按键即微动开关,本身不能自锁。今天我们通过三个程序举例如何在程序中编写按键控制语句。
一、三个制作中用到的
电路图以及元器件清单相同。
1.电路
“按键与LED”电路图
2.元器件清单
二、一键无锁控制LED
即按下LED点亮,放手LED熄灭。
1.程序设计(3.12.1)
#include 《reg52.h》//头文件
***it LED=P1^0;//定义LED引脚
***it KEY=P3^2;//定义按键引脚
void main()
{
while(1)
{
if(KEY==0)//判断按键是否按下
{
LED=0;//LED点亮
}
else
{
LED=1;//LED熄灭
}
}
}
2.程序解释
“if(KEY==0)”注意判断按键是否按下,要用“==”而不是“=”;如果按键按下,LED点亮,否则熄灭。
“= =”与“=”有什么区别,如何正确使用。
用“= =”用于判断语句,而“=”是赋值的含义,比如“LED=0;”将“0”赋值
三、一键自锁控制LED
按一下LED点亮,再按一下LED熄灭。
1.程序设计
#include 《reg52.h》//51头文件
***it LED=P1^0;
***it KEY=P3 ^ 2;
void main(void)
{
while(1)
{
if(KEY == 0)//判断按键状态
{
LED =~LED;//变化灯的状态
}
}
}
2.程序解释
“~”,取反的符号,如果原来是高电平,取反后就为低电平,原来是低电平取反后就是高电平。通过判断按键状态,不断取反操作而实现LED状态变化。
将程序下载后,你将发现,按键有时并不怎么听话,这个程序有问题,问题在哪儿?需要处理按键防抖。
3.C语言基础知识
按键防抖
当按下按键时,由于金属弹片的作用,不能很快闭合稳定,放开时也不能立刻断开,闭合稳定前后称为按键抖动,消除抖动可以通过程序或者硬件电路实现,通常通过程序完成。
按键抖动
如何用程序来实现呢?从上图中可以看出,当检测到按键状态变化,先延时一段时间(一般为10~20ms),绕开不稳定状态(前沿抖动),然后再检测一次按键状态,如果与前面检测的状态相同,说明已经进入“闭合稳定”。
4.改进程序
#include 《reg52.h》//头文件
***it LED=P1^0;
***it KEY=P3 ^ 2;
void delay(unsigned int a)
{
unsigned int i,j;
for(i=a;i》0;i--)
for(j=110;j》0;j--);
}
void main()
{
while(1)
{
if(KEY == 0)//判断按键状态
{
delay(20);//延时20ms
if(KEY == 0)//再次判断按键状态
{
LED =~LED;//变化灯的状态
while(KEY == 0);//等待按键松开
}
}
}
}
解释:
两次检测按键状态,确保按键真正按下。按键消除抖动程序非常重要,在设计按键控制的电路中,一定要加上消除抖动程序。“while(KEY==0);”该条语句是等待按键释放,检测到按键释放后,跳出循环体。