給你一個(gè)解決辦法:
當(dāng)用外部中斷的方法實(shí)現(xiàn)按鍵的檢測時(shí),由于存在按鍵抖動(dòng),這樣我們在按下按鍵時(shí),會(huì)出現(xiàn)多次進(jìn)入中斷的現(xiàn)象,最好的解決辦法是在程序中我們進(jìn)行相應(yīng)的處理:
void int_key() interrupt 0//外部中斷1服務(wù)程序
{ EX0=0;//關(guān)外部中斷1 delay_ms(100); if(s1==0) //s1是外部中斷對應(yīng)的IO口 { s1_num++; //這里是用戶自己編寫的程序 s1_num%=4;//這里是用戶自己編寫的程序 di();//這里是用戶自己編寫的程序 }
while(!s1);
EX0=1;//開外部中斷
}
delay_ms(100),if(s1==0)是必需要有的,延時(shí)是為了消抖,if(s1==0)是為了看看延時(shí)后是否還為低電平,如果還為低電平那確實(shí)是按下按鍵了,并且這樣可以有效地做到一次按鍵只進(jìn)入一次中斷,當(dāng)然delay_ms(100)這個(gè)延時(shí)時(shí)間不能太長,否則正常的按鍵也會(huì)在延時(shí)后,因?yàn)闀r(shí)間太長手已經(jīng)松開變?yōu)楦唠娖剑袛噱e(cuò)誤。這個(gè)中斷是下降沿觸發(fā)。
|