對于單片機中的按鍵消抖動,本節Bingo根據自己當年寫過的單片機其中的一個代碼來講解,代碼如下所示:
unsigned char key_scan(void)
{
if(key == 0) //檢測到被按下
{
delay(5); //延時5ms,消抖
if(key != 0)
retrurn 0; //是抖動,返回退出
while(!key1); // 確認被按下,等下釋放
delay(5); //延時5ms,消抖
while(!key1); //確認被釋放
return 1; //返回按下信號
}
return 0; //沒信號
}
針對以上代碼,消抖動的順序如下所示:
(1)檢測到信號
(2)延時5ms,消抖動
(3)繼續檢測信號,確認是否被按下
a) 是,則開始等待釋放
b) 否,則返回0,退出
(4)延時5ms,消抖動
(5)確認,返回按下信號,退出
當然在單片機中也可以循環計數來確認是否被按下。如此,太耗MCU資源。