微控制器之按鍵消抖

2021-09-26 08:16:58 字數 1498 閱讀 3576

我們前面在電子中的學習中就接觸過按鍵,但是我們只清楚其電路圖代表的含義,卻不明白真正操作起來會遇到的一系列問題,由於機械觸點的彈性,乙個按鍵開關在閉合後不會馬上穩定接通,斷開時也不會馬上斷開,如果不處理的話,會導致按鍵識別為多下,故我們就來研究一下按鍵消抖(針對的是k1 k2 k3)

實驗原理

這個電路圖我們在前面已經接觸過,但我們現在主要來消除k1-k3的按鍵問題

當按鍵被按下的時候,電路導通接地,i/o口為低電平;

當按鍵未被按下時,電路斷開,i/o口保持高電平。

但一般的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由於機械觸點的彈性作用,乙個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,假如不加以處理,會導致按鍵被識別為按下多次。為了不產生這種現象而作的措施就是按鍵消抖。

消抖方法

法一:使用延時

檢測出鍵閉合後執行乙個延時程式,5ms~10ms的延時,讓前沿抖動消失後再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。

當檢測到按鍵釋放後,也要給5ms~10ms的延時,待後沿抖動消失後才能轉入該鍵的處理程式

法二:檢測多次

可以設定乙個檢測週期,如果在乙個檢測週期內,按鍵被檢測為被按下達到了一定次數,則確認為真正被按下

**解析

由於按下k1加1,按下k2減1

初始化number為5000,顯示在數碼管上

uint number;

//顯示在數碼管上

uint flag;

//位選的位置

int count1,count2,count3,count4;

//用於消抖計數

bit status_p,status_p2;

//記錄按鍵前一狀態

void

interrupttimer0

()interrupt 1

flag++;

count1++;if

(key1==0)

count3++;if

(key2==0)

}

void

main()

}else

status_p=1;

count1=0;

count2=0;

}//同理 k2的按鍵消抖

if(count3==30)

//消抖大概6ms,總共統計次數30次

}else

status_p2=1;

count3=0;

count4=0;}}}

**比較的簡單,其實也算是在一定時間內檢測多次,即利用了軟體消抖

8 6 微控制器按鍵消抖

通常按鍵所用的開關都是機械彈性開關,當機械觸點斷開 閉合時,由於機械觸點的彈性作用,乙個按鍵開關在閉合時不會馬上就穩定的接通,在斷開時也不會一下子徹底斷開,而是在閉合和斷開的瞬間伴隨了一連串的抖動,如圖 8 10 所示。圖 8 10 按鍵抖動狀態圖 按鍵穩定閉合時間長短是由操作人員決定的,通常都會在...

51微控制器按鍵消抖

二 矩陣鍵盤 define key state 0 0 判斷按鍵是否按下 define key state 1 1 判斷按鍵是否抖動 define key state 2 2 判斷按鍵是否彈起 define key input p3 define key mask 0x0f void key rea...

微控制器學習筆記 按鍵消抖

按鍵是我們學習微控制器時乙個重要的器件,我們在按下按鍵時,難免會一位手抖動或者接觸不穩定,但如果不消抖,按鍵按下的瞬間將會產生成百上千次按鍵有效的結果,最終的現象不可預料,所以有必要進行消抖。一 消抖原理 原理 使用定時器計時產生中斷,只要在一定次數的中斷內,按鍵按下有效的次數達到一定次數,就可以認...