当前位置: 首页 > news >正文

51单片机——按键控制LED流水灯

引言

在电子制作和嵌入式系统学习中,51 单片机是一个经典且入门级的选择。按键控制 LED 流水灯是 51 单片机的一个基础应用,通过这个实例,我们可以深入了解单片机的输入输出控制原理。

51 单片机简介

51 单片机是对所有兼容 Intel 8051 指令系统的单片机的统称。它具有体积小、成本低、功能强等特点,广泛应用于各种控制领域。其内部包含中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、定时 / 计数器和多种 I/O 接口等部件。

按键控制 LED 流水灯的功能及作用

功能

通过按键控制 LED 灯按照一定顺序依次点亮和熄灭,形成流水灯效果。按下按键时,流水灯开始工作;再次按下按键,流水灯停止工作。

作用

  1. 学习单片机基础:这个项目是学习单片机 I/O 口控制的绝佳实例,能帮助初学者熟悉单片机的基本编程和硬件连接。
  2. 状态指示:在实际应用中,LED 流水灯可以作为设备状态的可视化指示,例如显示系统的运行状态、数据传输状态等。
  3. 人机交互:按键作为输入设备,实现了人与单片机系统的交互,为更复杂的人机交互设计打下基础。

硬件连接

  1. 单片机:选择常见的 STC89C52 单片机作为核心控制单元。
  2. 按键:一端连接到单片机的 I/O 口(如 P3.2),另一端接地。按键按下时,对应的 I/O 口电平被拉低。
  3. LED 灯:多个 LED 灯的阴极分别连接到单片机的不同 I/O 口(如 P1.0 - P1.7),阳极通过限流电阻连接到电源正极。当 I/O 口输出低电平时,对应的 LED 灯点亮。

软件编程

开发环境

使用 Keil C51 作为开发工具,编写 C 语言代码。

代码实现:

#include <REGX51.H>
#include <intrins.h>unsigned char Keynumber,LEDMode;//延时函数
void delay(unsigned int t)
{unsigned char i;while(t--){for(i=0;i<120;i++);}
}//定时器0初始化
void Timer0Init(void)		
{TMOD &= 0xF0;		TMOD |= 0x01;		TL0 = 0x18;		TH0 = 0xFC;		TF0 = 0;		TR0 = 1;		EA=1;ET0=1;
}//独立按键模块
unsigned int Key()
{unsigned char KeyNum=0;if(P3_0==0){delay(20);while(P3_0==0);delay(20);KeyNum=1;}if(P3_1==0){delay(20);while(P3_1==0);delay(20);KeyNum=2;}if(P3_2==0){delay(20);while(P3_2==0);delay(20);KeyNum=3;}if(P3_3==0){delay(20);while(P3_3==0);delay(20);KeyNum=4;}return KeyNum;
}void main()
{P2=0xFE;Timer0Init();while(1){Keynumber=Key();if(Keynumber){if(Keynumber==1){LEDMode++;if(LEDMode>=2)LEDMode=0;}}}
}void Timer0() interrupt 1
{static unsigned int T0count;TL0 = 0x18;		//??????TH0 = 0xFC;		//??????T0count++;if(T0count>=1000){T0count=0;if(LEDMode==0){P2=_crol_(P2,1);}if(LEDMode==1){P2=_cror_(P2,1);}}
}

总结

通过本文介绍的 51 单片机按键控制 LED 流水灯项目,我们学习了单片机的基本硬件连接和软件编程方法。这个项目不仅是一个有趣的电子制作,更是深入学习嵌入式系统的基石。希望读者通过实践,能够掌握更多单片机应用技巧,开启电子世界的探索之旅。

http://www.lryc.cn/news/525874.html

相关文章:

  • 【opencv】第9章 直方图与匹配
  • HTML5 Web Worker 的使用与实践
  • MVCC底层原理实现
  • 基于ESP32-IDF驱动GPIO输出控制LED
  • 【优选算法】9----长度最小的子数组
  • LabVIEW太阳能照明监控系统
  • MongoDB中单对象大小超16M的存储方案
  • 三维激光扫描-用智能检测系统提升效率
  • css遇到的一些问题
  • 【langgraph】ubuntu安装:langgraph:未找到命令
  • mysql 学习2 MYSQL数据模型,mysql内部可以创建多个数据库,一个数据库中有多个表;表是真正放数据的地方,关系型数据库 。
  • 小识JVM堆内存管理的优化机制TLAB
  • ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证10)
  • vscode环境中用仓颉语言开发时调出覆盖率的方法
  • OLED--软件I2C驱动__标准库和HAL库
  • 【设计模式-行为型】观察者模式
  • 从理论到实践:Django 业务日志配置与优化指南
  • Linux下php8安装phpredis扩展的方法
  • Flink运行时架构
  • JupyterLab 安装以及部分相关配置
  • PC端实现PDF预览(支持后端返回文件流 || 返回文件URL)
  • 大模型 / 智能体在智能运维领域的应用总结与发展趋势概述
  • uniapp 在线更新应用
  • AIGC视频生成模型:ByteDance的PixelDance模型
  • python远程获取数据库中的相关数据并存储至json文件
  • Kubernetes v1.28.0安装dashboard v2.6.1(k8s图形化操作界面)
  • 详解三种常用标准化:Batch Norm、Layer Norm和RMSNorm
  • linux+docker+nacos+mysql部署
  • 如何实现gitlab和jira连通