为什么会有按键抖动(百度百科)
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
如何消除抖动
如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期。
一段处理代码:
uint8_t YF_Key_On(uint8_t port,uint8_t pin)
{
uint32_t uTemp;
//按键扫描
uTemp = GPIO_ReadValue(port);
if(!((uTemp>>pin)&0x0001))
{
DelayMS(10);//软件延时,检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后
//按键扫描
uTemp = GPIO_ReadValue(2);
if(!((uTemp>>pin)&0x0001))//让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
{
return 1;
}
}
return 0;
}