當用外部中斷的方法實現按鍵的檢測時,由于存在按鍵抖動,這樣我們在按下按鍵時,會出現多次進入中斷的現象,最好的解決辦法是在程序中我們進行相應的處理: l void int_key() interrupt 0//外部中斷1服務程序 { EX0=0;//關外部中斷1 delay_ms(100); if(s1==0) //s1是外部中斷對應的IO口 { s1_num++; //這里是用戶自己編寫的程序 s1_num%=4;//這里是用戶自己編寫的程序 di();//這里是用戶自己編寫的程序 } while(!s1); EX0=1;//開外部中斷 } delay_ms(100),if(s1==0)是必需要有的,延時是為了消抖,if(s1==0)是為了看看延時后是否還為低電平,如果還為低電平那確實是按下按鍵了,并且這樣可以有效地做到一次按鍵只進入一次中斷,當然delay_ms(100)這個延時時間不能太長,否則正常的按鍵也會在延時后,因為時間太長手已經松開變為高電平,而判斷錯誤。這個中斷是下降沿觸發。 |