我們前面在電子中的學習中就接觸過按鍵,但是我們只清楚其電路圖代表的含義,卻不明白真正操作起來會遇到的一系列問題,由於機械觸點的彈性,乙個按鍵開關在閉合後不會馬上穩定接通,斷開時也不會馬上斷開,如果不處理的話,會導致按鍵識別為多下,故我們就來研究一下按鍵消抖(針對的是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...
微控制器學習筆記 按鍵消抖
按鍵是我們學習微控制器時乙個重要的器件,我們在按下按鍵時,難免會一位手抖動或者接觸不穩定,但如果不消抖,按鍵按下的瞬間將會產生成百上千次按鍵有效的結果,最終的現象不可預料,所以有必要進行消抖。一 消抖原理 原理 使用定時器計時產生中斷,只要在一定次數的中斷內,按鍵按下有效的次數達到一定次數,就可以認...