魯慶賓
(南陽理工學院 計算機科學與技術系,河南 南陽 473004)
鍵盤是一組按鍵的集合,是最常用的微機輸入設備。操作員可以通過鍵盤輸入數據或指令,實現簡單的人機通信[1]。連擊是鍵盤操作中常用的方法,可以在很大程度上提高鍵盤的使用效率[2]。
在下文中,短擊是指短暫按下某鍵,時間小于500 ms,長擊是指長時間按住某鍵不放,時間超過1 s。比如,在手機鍵盤中,短擊“*”鍵則可以在輸入框中輸入該符號,長擊則鎖定鍵盤或解鎖;短擊向下箭頭則執行一次下移操作,長擊超過一定時間則可以執行連續的下移操作。
筆者以 STC89C51的P1口設計的4×4式鍵盤為例[3],介紹在一個鍵盤中存在的以下3情況:一是該鍵按下只執行單一功能;二是該鍵按下時短擊執行該鍵第一功能,長擊執行第二功能;三是該鍵按下時短擊執行第一功能,長擊則每隔一個較短的時間連續執行該鍵的功能。該方法在Keil C下編譯通過。
矩陣式鍵盤的結構如圖1所示[4]。從鍵盤的行線送出全0,讀取列線的值,如果鍵盤中有鍵按下,則相應的列線必然被拉為低電平,即讀取到列線的值不全為1,否則,當鍵盤中無鍵按下時,讀取到列線的值全為1。于是,當判斷鍵盤中無鍵按下時鍵盤掃描函數直接返回-1;有鍵按下時,需要判斷是哪一個按鍵按下,步驟為:從第0行送0,其他行送1,讀取列線的值,若讀取到的列線值不全為1,則所按下的鍵必在該行,否則,所按下的鍵不在該行,從下一行送0,其他行送1,直到最后一行。當判斷所按下按鍵在該行時,只要找到列線中輸入為0的列,行列位置即確定,對該位置進行編碼,此編碼即為插入圖1鍵值[5]。

圖1 圖4×4矩陣鍵盤接口Fig.1 Keyboard interface of 4×4 matrix
掃描得到鍵值[的函數如下:


鍵的處理流程圖如圖2所示。

圖2 按鍵處理流程圖Fig.2 Flow chart of keys processing
在以下的方法中,定義了兩個全局變量:
1)KeyStatus:按鍵按下后的狀態。程序中置了3狀態:①時去抖狀態,程序中使用狀態0;②擊狀態,程序中使用狀態1;③擊后連續執行某一功能狀態,程序中使用狀態2。
2)在按鍵狀態0時,時間達到15 ms,去抖完成,執行按鍵的第一功能,進入狀態1。當狀態1時間達到1 000 s,需要執行第二功能的按鍵執行第二功能,需要連續執行某一功能的按鍵再次執行一次第一功能,轉讓狀態2。當狀態2時間每到一次100 s,需要連續執行某一功能的按鍵再次執行一次第一功能。
按鍵執行第一功能和連續執行的函數假定為void KeyFirstFunction(unsigned char);執行第二功能的函數假定為void KeySecondFunction(unsigned char);定時器 0 中斷服務程序為void T0IntServe();假定振蕩頻率為 12 MHz,定時時間為1 ms,程序代碼如下:


該方法的特點:
1)按鍵的處理只是在每次循環時掃描一下有沒有鍵按下,根據按鍵按下的時間確定當前按鍵的狀態。既沒有常規按鍵處理中的使用延時去抖,也沒有在等待按鍵釋放過程中的循環處理,避免了CPU在延時過程中什么事情也不干的問題,提高了CPU的使用效率。
2)根據按鍵按下的時間和各按鍵的功能設置其執行的指令,巧妙解決了多個按鍵在連擊時處理方法復雜的問題,結構簡單、條理清晰。
經過在多個項目中的實際證明,用這種方法不但可以快速有效地處理按鍵功能,而且程序稍加調整后,可以在定時中斷中掃描按鍵,另外定時器也可以作為時基產生器產生程序運行所需的時標。
[1]吳國經.單片機應用技術[M].北京:中國電力出版社,2004.
[2]李全利,遲榮強.單片機原理及接口技術[M].北京:高等教育出版社,2004.
[3]許泳龍.單片機原理及應用[M].北京:機械工業出版社,2005.
[4]張毅剛.MCS-計[M].哈爾濱:哈工大出版社,2004.
[5]李朝青.單片機原理及接口技術[M].北京:北京航空航天大學出版社,2006.
[6]周國運.單片機原理及應用[M].C語言版.北京:中國水利水電出版社,2009.