书接上回。http://t.csdnimg.cn/4wSSW
目录
一.按下灭,松开亮
二.两个按键控制两个灯
三.点一下灯开,在按一下关
四。优化按键消抖
1.加入bit变量
一.按下灭,松开亮
代码
#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器sbit KEY1 = P3^1; // 独立按键sbit LED = P0^0; // 独立按键void main()
{ while (1){if(KEY1 ==0){LED = 1;}else{LED = 0;}}}
实机图
这里用的是K1按钮,想用哪个按钮,就切换到哪个按钮引脚就行。
二.两个按键控制两个灯
#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器sbit KEY1 = P3^1; // 独立按键1sbit KEY2 = P3^2; // 独立按键2sbit LED1 = P0^0; // 灯1sbit LED2 = P0^1; // 灯2void main()
{while (1) {if(KEY1== 0){LED1 = 0;}else if(KEY2== 0){LED2 = 0;}else{LED1 = 1;LED2 = 1;}}}
按住K1,第一个灯亮,按住K2,第二个灯亮。
三.点一下灯开,在按一下关
#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器sbit KEY1 = P3^1; // 独立按键1
// sbit KEY2 = P3^2; // 独立按键2sbit LED1 = P0^0; // 灯1//sbit LED2 = P0^1; // 灯2void main()
{while (1) {if(KEY1== 0){LED1 = ~LED1;}// else if(KEY2== 0)// {// LED2 = 0;// }// else{// LED1 = 1;// LED2 = 1;// }}}
四。优化按键消抖
解决按键点击过快等问题,
1.加入bit变量
如 bit firstIn = 1;
按下的时候赋值为0,抬起的时候赋值为1
例子如下
if (KEY1 == 0 && firstIn == 1){ firstIn = 0;LED1 =~LED1;}if (KEY1 == 1){firstIn = 1;}
2.加入布尔变量
先引入头文件,我的路径是这样的
-
#include <SiLABS\shared\si8051Base\stdbool.h>
剩下的就同上
bool firstIn = 1;while (1) {if (KEY1 == 0 && firstIn){ firstIn = false;LED1 =~LED1;}if (KEY1 == 1){firstIn = true;}}