||
经常用到按键检测程序,如果用到循环扫描的方法检测按键,通常利用以下语句:
if(key1==0)
{
delay(5);
if(key1==0)
key_num=1;
while(key1==0);
} 语句delay(5)用于消抖延时,while(key1==0)用于检测按键是否松开,当按键按下时如果没有及时松开,程序会一直这里循环,影响其他语句执行。例如在程序中有数码管循环扫描程序,会造成每按一次按键数码管会短暂熄灭,造成闪烁。因此,利用一个全局变量button_flag作为标志数据可完美解决此问题:
if(key1==0)
{
if(button_flag==0)
{
button_flag=1;
key_num=1;
}
} else button_flag=0;
当按键没有按下时button_flag=0,当按键按下时,因button_flag=0,能够读取键值,如果没松手,第二次执行到这儿时,因button_flag=1,不读取键值,button_flag也依旧不变,第三次,第四次执行到这儿都是这种情况。只有松手button_flag才会变为0,此方法还有消抖的功能,可以去掉延时消抖函数,进一步减少cpu的消耗时间。可以大大提升cpu的效率。