☰
单片机学习之旅之——独立按键控制LED
2026/11/3 2:46:05 网站建设 项目流程

一,3-1独立按键控制LED亮灭

学习到按键模块,(在第一篇提前透漏了按键模块)学习到了按键的结构如图
按键的两边都是联通的,都是垂直方向联通,左边延伸出来两个接触点,右边延伸出一个,当按钮按下,金属弹片被压扁,三个接触点连接。
2.代码独立控制LED
在之前的学习中,我们如果想让一个灯亮,我们往往需要给8个灯都赋值,比如P2=0xFE。但如果我们就只想控制一个灯怎么办呢?我们可以添加头文件REGX52.H如图

打开此头文件,可以看到这个头文件已经定义了位寄存器
所以我们可以直接使用P2_0等控制单一LED。
3.符号类型,运算,循环



4.过程中遇到的问题
把=与搞混

没有分清=与
区别,后来询问AI搞清楚了。=是赋值运算符,把=右边的直接赋值给左边,而= =是关系比较运算符,询问判断两边相不相等比如P3_0= =0就是P3_0这个端口是否为0.
正确代码如下

2.单片机引脚电平
P1,P2,P3电平为高电平1,如果想改变状态需要置为0

二.独立按键控制LED状态


我们要消除抖动可以用软件实现,使用Dealy函数延迟即可,在这里我们用到了前面学习的Delay函数自由使用的搭建(可以看第二篇单片机旅途),整体代码如下

上面部分就是Delay自由延迟函数,下面则是本次实验的重点,当P3_0被按下,就会延迟100ms,然后While(P3_00);这个函数是让单片机检测,P3_0是否还为0,如果还为0(及用户按住P3_0按钮)则整个程序会一直在While(P3_00)里面兜圈子,一直兜到P3_0为1,此时程序会向下进行延迟100ms,然后使P2_0按位取反,直接改变P2_0现在的状态。
*过程中遇到的问题:
if(P3_00);我在这个代码后面添加了分号;这使得我还没有按下按键我的单片机LED就自己闪烁,是因为在这个代码后面加上;就会使这个if的语句体变成空语句,程序执行完if后就不会去执行P3_00了。

三,独立按键控制LED显示二进制
本次学习到了显示二进制,其中新知识:char是8位如果让他=0则为0000 0000.整体代码如下

这里我们新定义了一个变量,原因是如果不定义的话代码如下

LED并不会亮,视频可看主页发布视频(我不会在文章里面插入)
原因是在单片机上电后默认高电平1111 1111 此时如果进行自增运算,就会溢出,变成0000 0000 然后按位取反变成1111 1111 所以仍然不亮
最后正常显示二进制代码请看主页视频1.2

四,独立按键控制LED移位
本次是控制LED移位,代码整体解读,上部分依旧是延迟函数,定义新函数LEDNumber=0,然后在第一个if里面做检测P3_1的检测,之后就自增,现在进行防溢出,当LEDNumber>=8后使其为0,然后让LEDNumber左移位再取反。第二个if和第一个相似不过是让LED向相反方向移动,再进行防溢出。


上机视频请移步主页1.3

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询