|
我自己的經(jīng)驗是:在定時里做一個4ms的標(biāo)志位,主程序里面用這個4ms掃描一次按鍵,有按下,計數(shù)++,無按下計數(shù)清零,加一個按下松開標(biāo)志位,按下計數(shù)達(dá)到3次(消抖值)后判為成功按下并且按下松開標(biāo)志位=1,未松開就不做第二次按下計數(shù);寫的有點亂,寫個偽代碼:
定時器中斷函數(shù)()
{//假設(shè)定時中斷時間是250us
4ms計數(shù)++;
if(4ms計數(shù) >= 16)//4ms/250us=16
{
4ms計數(shù) = 0;
4ms標(biāo)志位 = 1;
}
}
main()
{
while(1)
{
if(4ms標(biāo)志位)
{
4ms標(biāo)志位 = 0;
keypress();
其他功能函數(shù)();
}
}
}
void keypress()
{
if(按鍵io口 == 0)//假設(shè)低電平為按下
{
if(按下松開flag == 0)
{
按下計數(shù)++;
if(按下計數(shù) >= 5)
{
按下計數(shù) = 0;
按下松開flag = 1;
//按鍵按下
}
}
}
else
{
按下計數(shù) = 0;
按下松開flag = 0;//松開后標(biāo)志位清零,可以檢測下一次按鍵
}
} |
|