|
我自己的經(jīng)驗(yàn)是:在定時(shí)里做一個(gè)4ms的標(biāo)志位,主程序里面用這個(gè)4ms掃描一次按鍵,有按下,計(jì)數(shù)++,無(wú)按下計(jì)數(shù)清零,加一個(gè)按下松開標(biāo)志位,按下計(jì)數(shù)達(dá)到3次(消抖值)后判為成功按下并且按下松開標(biāo)志位=1,未松開就不做第二次按下計(jì)數(shù);寫的有點(diǎn)亂,寫個(gè)偽代碼:
定時(shí)器中斷函數(shù)()
{//假設(shè)定時(shí)中斷時(shí)間是250us
4ms計(jì)數(shù)++;
if(4ms計(jì)數(shù) >= 16)//4ms/250us=16
{
4ms計(jì)數(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)
{
按下計(jì)數(shù)++;
if(按下計(jì)數(shù) >= 5)
{
按下計(jì)數(shù) = 0;
按下松開flag = 1;
//按鍵按下
}
}
}
else
{
按下計(jì)數(shù) = 0;
按下松開flag = 0;//松開后標(biāo)志位清零,可以檢測(cè)下一次按鍵
}
} |
|