按键的抖动现象
按键按下时都会发出一声响,虽然有的按键声音很轻微,但这都是金属导体碰撞产生的震动;——称这种现象为:按键的抖动。
如果不对按键的抖动进行处理,按键就会对系统电路或程序产生意外的干扰。因此,我们要对按键进行“消抖”。
按键按下后抬起有效
利用延时函数,按键key1按下后抬起有效,控制LED闪烁;
#include <reg51.h>
sbit key1 = P1^4; //实验板上key1
sbit LED0 = P0^0;
unsigned char key1_down;
void delay(unsigned int delay_time)
{
unsigned int j = 0;
for(;delay_time > 0;delay_time --)
{
for(j = 0;j < 125;j ++);
}
}
void key_pressed(void)//按键扫描函数
{
if(key1 == 1); //如果按键按下
{
delay(20); //消除键盘抖动
if(key1 == 1) //如果确实按键按下
key1_down = 1; //记忆key1按下的状态
}
if((key1 == 0) && (key1_down == 1)) //key1曾经按下过,且这时又抬起
{
LED0 = !LED0; //LED闪烁
key1_down = 0; //按键按下的状态清零
}
}
void main(void)
{
P0 = 0x00; //让P0驱动的LED全灭
while(1)
key_pressed(); //调用函数
}
按键按下即有效
当确定按键真的按下后即生效
/* 软件去抖 */
if (0 == K1) //如果有键按下
{
delay_ms(8); //延时一段时间去抖
if (0 == K1) //如果真的有键按下,检测到得是稳定闭合状态
{
//语句块; //按键以后需要做的事情
}
while (!K1); //松手检测,如果按住不放则一直在循环里
}