独立按键控制LED
目录
1.独立按键介绍
2.原理图
3.C51数据运输
解释:<< >>
编辑
解释:& |
解释:^ ~
编辑
4.C51基本语句
5.按键的跳动
6.独立按键控制LED亮灭代码
第一步:
第二步:
第三步:
第四步:
最终代码:
7.独立按键控制LED状态
第一步:
第二步:
第三步:
最终代码:
8.独立按键控制LED显示二进制
第一步:
第二步:
第三步:
最终代码:
9.独立按键控制LED移位
第一步:
第二步:
第三步:
第四步:
最终代码:
1.独立按键介绍
相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开

2.原理图



3.C51数据运输

解释:<< >>
解释:& |

解释:^ ~

4.C51基本语句

5.按键的跳动
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动

6.独立按键控制LED亮灭代码
第一步:
MCU一端接GND,另一端接IO口,单片机上电,所有io口默认都是高电平,没按下高电平,按下低电频

第二步:
把上面的头文件加上X就可以单独设置

第三步:
如下,单独设置

第四步:
K1接P3_1(看芯片网络标号RXD对应的引脚)上得到对应连接

 按下亮松开灭第一个,P3_1是控制开关的,P2_0控制灯

最终代码:
#include <REGX52.H>void main()
{while(1){if(P3_1==0 || P3_0==0){P2_0 = 0;	}else{P2_0 = 1;}}	
} 
7.独立按键控制LED状态
第一步:
消抖,消除抖动的方法,延时代码生成

第二步:
粘贴到main函数上方,修改延时代码如下

第三步:
实现一个LED灯亮灭未用按键

监测按下按键是否松手,一直按着要一直监测,松手了才操作,像鼠标点击关闭浏览器,点到X的位置,不松还没关闭,松手了才关闭:(28行代码取反的意思,原来亮,取反就是不亮)

最终代码:
#include <REGX52.H>
void Delay(unsigned int xms)
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main()
{while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);P2_0 = ~P2_0;}}
} 
8.独立按键控制LED显示二进制
第一步:
通过工具,生成延时函数,复制到mian.c文件

第二步:
修改延时函数,将延时设置为可改变的,带参数函数

第三步:
主函数调用延时函数,实现LED灯亮灭,P3_1为控制按钮,P2控制灯亮灭,LEDNum控制移动

最终代码:
#include <REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);	}}void main()
{unsigned char LEDNum = 0;while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);LEDNum++;P2=~LEDNum;}}
} 
9.独立按键控制LED移位
第一步:
把前面的延迟函数复制过来,延迟函数放在main函数前面,也可以放到后面,如果放到后面要把下面选中的蓝色部分复制到到现在的位置加分号“;”

第二步:
延时函数在后面时,代码如下,要在前面声明

第三步:
位移的情况,下面是左移<<

左移操作实现

第四步:
板上的操作实现,只控制第一个按钮,按其他没用,灯往箭头方向移动

实现右移操作(看行数,接第四步代码)

最终代码:
#include <REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);	}}
unsigned char LEDNum;
void main()
{P2=~0x01;while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);LEDNum++;if(LEDNum>=8){LEDNum=0;}P2=~(0x01<<LEDNum);}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);if(LEDNum==0){LEDNum=7;}else{LEDNum--;P2=~(0x01<<LEDNum);}}}
}

