天天看點

ATmega8仿真——鍵盤掃描的學習

1.按鍵的使用特點

  按鍵的應用主要是在按鍵閉合時改變電路的電平,但是一般情況下按鍵的開關都是機械彈性觸點開關,即利用觸點的接觸和分離來實作電路的通斷,是以在按鍵按下和釋放時往往會産生抖動幹擾。

消除抖動幹擾的兩種方式:

  (1)硬體設計:硬體消抖要在硬體設計上增加消抖電路,如用R-S觸發器等,這樣就會增加系統成本。

  (2)軟體設計:在軟體中對按鍵進行二次測試确認,即當第一次檢測到按鍵被按下後,間隔10 毫秒左右再次檢測該按鍵是否被按下,隻有兩次都冊到按鍵按下時才确認該按鍵被按下了,進而消除抖動幹擾。

2.單鍵盤掃描應用

用PB口接一個LED數位管,來顯示按下按鍵的次數;

用PC0端口接一個按鍵電路;

ATmega8仿真——鍵盤掃描的學習

  實作的功能是每一次按鍵,LED數位管顯示的資料加1,到9回0。

 問:上面的程式沒有考慮長按的情況,如果向我們使用的鍵盤一樣,長時間按下一個按鍵,在螢幕上就不斷的列印該字元,在這個例子裡怎樣實作:若長時間按下按鍵,CountNum就不斷加加?

答:隻需要更改ScanKey函數,更改結果如下

3.矩陣按鍵(鍵盤)掃描的應用

  按鍵太多的情況下,為了節省I/O資源,通常采用矩陣式的接口。矩陣鍵盤由行和列組成,每個鍵都有它的行值和列值,行值和列值的組合就是識别每個鍵盤的編碼。

确定是哪個按鍵的流程:(???)

(1)在行和列的一個口中輸出高電平,在另一個行列口讀取一個掃描碼;

(2)在後一個行列口中輸出高電平,在前一行列口讀取第二個掃描碼;

(3)查表确定哪個按鍵被按下。

電路圖如下:

程式實作步驟:

(1)确定有無按鍵按下;

(2)确定是哪個按鍵;

(3)傳回該按鍵值或處理對應的任務;

(4)再加上,考慮抖動消除,等待按鍵的斷開。

要實作每按下一個按鍵,就在LED數位管顯示出該按鍵對應的值,按鍵斷開後或預設顯示“-”:

代碼總結:

  主函數:判斷是否有按鍵按下,并消除抖動幹擾,若有則将獲得的鍵值顯示在LED數位管中;

  ScanKey函數:得到掃描碼确定是哪個按鍵,等待按鍵釋放,傳回該按鍵的值。

方法擴充:

(1)除了像上面的對按鍵的接口不停的掃描,

(2)還可以使用定時掃描,例如用一個定時器,每隔10MS 對按鍵接口進行掃描,看是否有按鍵按下;

(3)也可以使用中斷的方式去掃描,當按鍵按下時由硬體電路産生一個中斷,MCU 響應該中斷,确定哪個按鍵被按下,處理相應函數。