u8 KEY_Scan(void)
{
static u8 keyup=1; //防止检测多次
if(keyup&&(KEY0==0||KEY1==0||KEY3==0))
{
delay_ms(50);//去抖
if(KEY0==0||KEY1==0||KEY3==0)
{
keyup=0;
if (KEY0==0)
return KEY0_PRES;
else if(KEY1==0)
return KEY1_PRES;
else if(KEY3==0)
return WKUP_PRES;
}
}
else if(KEY0==1&&KEY1==1&&KEY3==1) //若按键全部松开
keyup=1;
return 0;
}
今天写按键的一个小程序,发现没有松手检测,如果一直按着按键不松开,会一直触发,执行程序。然后发现例程的检测程序,感觉不错。
设置一个静态变量,当此变量为一,并且有按键按下时,进入按键判断函数。进入后把变量设置为0。若一直按着按键,一直执行不到最后若按键全部松开,keyup=1,所以,不会执行多次。
还可以设置一个参数,确定是否需要检测多次:
<pre name="code" class="objc">u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)
key_up=1; //支持连按
if(key_up&&(KEY0==0||KEY1==0||KEY3==0))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(KEY3==0)return WKUP_PRES;
}else if(KEY0==1&&KEY1==1&&KEY3==1)key_up=1;
return 0;// 无按键按下
}
若mode置一,说明支持连按,则keyup一直为一,会重复检测
2016/1/16