詳解單片機的按鍵檢測與控制

按鍵在單片機控制系統中起到人機交互的作用,通過按鍵可以輸入數據、命令和各種參數,按鍵側鍵測處理是單片機系統設計和開發中一個重要的內容,關係到整個系統的交互性能和穩定性。按鍵處理形式在單片機系統中有兩種形式:直接按鍵和矩陣編碼鍵盤,下面分別對這兩種按鍵檢測電路的特點及編程思路和方法進行分析和介紹。

按鍵抖動問題產生的原因及解決方法

按鍵的抖動問題是指按鍵的觸點在閉合和斷開瞬間由於接觸情況不穩定,從而導致電壓信號的抖動現象(由按鍵的機械特性造成,不可避免)。圖8-1所示為一次按鍵的抖動過程,在按鍵的前沿和後沿都會有5~10ms的抖動。

詳解單片機的按鍵檢測與控制

圖8-1 按鍵抖動示意圖

對於時鐘是微秒級的單片機而言,鍵盤的抖動有可能造成單片機對一次按鍵的多次處理。為了提高系統的穩定性,我們必須採用有效的方式消除抖動。

去除抖動可以採用硬件方式和軟件方式。硬件方式一般是在按鍵與單片機的輸入通道上安裝硬件去抖電路(如RS觸發器)。軟件方式的實現方法是:當查詢到電路中有按鍵按下時,先不進行處理,而是先執行10~20ms的延時程序,延時程序結束後,再次查詢按鍵狀態,若此時按鍵仍為按下狀態,則視為按鍵被按下。

按鍵檢測電路及應用

1. 獨立式按鍵

獨立式鍵盤相互獨立,每個按鍵佔用一根I/O口線,每根I/O口線上的按鍵工作狀態不會影響其他按鍵的工作狀態,CPU可直接讀取該I/O線的高/低電平狀態。這種按鍵硬件、軟件結構簡單,判鍵速度快,使用方便,但佔用I/O口線較多,適用於按鍵數量較少的系統中。

獨立連接式鍵盤連接如圖8-2所示。當沒有鍵被按下時,所有的數據輸入線均為高電平;當任意一個按鍵被按下時,與之相連的數據輸入線將變為低電平;通過相應指令,可以判斷是否有鍵被按下。

詳解單片機的按鍵檢測與控制

圖8-2 獨立式鍵盤接口設計

【例8-1】 利用單片機的P1.0~P1.34個I/O口檢測4個按鍵的觸發信息,以實現不同功能的控制。

硬件電路參見圖8-2所示,C51參考程序如下:

詳解單片機的按鍵檢測與控制

2. 矩陣式按鍵

在單片機系統中,當按鍵數量較多時,為了減少IO口的使用,通常將按鍵排列成矩陣型式。例如下例中的16個按鍵,被排列成了如圖8-3所示的4X4矩陣方式。該矩陣式鍵盤由4根行線和4根列線組成,每個行線和列線的交叉點是一個按鍵。

【例8-2】 將矩陣式鍵盤的按鍵值通過數碼管顯示出來。

電路連接如圖8-3所示(電源和震盪電路未標出)。

詳解單片機的按鍵檢測與控制

圖8-3 矩陣式鍵盤按鍵顯示電路圖

如何判斷被按下的鍵值呢?

分析如下:

根據下面的電路圖,如果已知P1.0端口被置為低電平“0”,那麼當按鍵K0被按下時,可以肯定P1.4端口的電平也變為了低電平“0”。基於這個原理,總結矩陣鍵盤識別按鍵的步驟如下:

a)首先判斷是否有按鍵被按下

本例中矩陣鍵盤中P1端口低4位連接的是列線,高4位連接的是行線。將全部行線置為低電平“0”,全部列線置為高電平“1”。然後檢測列線的狀態。只要有一根列線的電平為低,則表示有按鍵被按下。否則沒有按鍵按下。

b)按鍵消抖

當判斷到有按鍵被按下後,還要進行消抖處理,以確認真正有按鍵被按下。

c)按鍵識別

當確認有鍵被按下後,採用逐行掃描的方法來確定是哪一個按鍵被按下。先掃描第一行,即將第一行輸出低電平“0”,然後讀取列值,那一列出現低電平“0”,則說明該列與第一行交叉處的按鍵被按下。如果讀入的列值全部為"1",說明與第一行連接的按鍵均沒有被按下。那麼接下來開始掃描第二行,以此類推。直到完成全部行線的掃描。

C51程序如下:

詳解單片機的按鍵檢測與控制

詳解單片機的按鍵檢測與控制

矩陣式鍵盤與I/O接口應用

【例8-3】 四位數字密碼鎖

四位數字密碼鎖功能:通過鍵盤輸入密碼,當輸入密碼與內置密碼相同時,繼電器動作,表示密碼鎖解開。為了簡化功能,該密碼鎖只使用12個鍵(即4x3鍵盤),其中S1~S9為1~9數字鍵,S10為0數字鍵,S11為“*”鍵作為確認鍵使用,而S12為“#”鍵作為復位鍵,鍵盤接口電路如圖8-4所示,鍵值佈局如表8-1所示。

詳解單片機的按鍵檢測與控制

圖8-4 行列式鍵盤電路連接圖

詳解單片機的按鍵檢測與控制

表8-1 鍵盤佈局表

單片機上電時,數碼管顯示“0000”,此時輸入數字,數碼管將顯示按鍵值,數字逐個向左遞增,四次輸入完畢,四個數碼管顯示輸入的數,此時按“*”號按鍵將啟動比較,若輸入數字與內設密碼相同,繼電器動作。如不同,則系統復位等待重新輸入密碼。當按“#”號鍵,系統復位,數碼管顯示“0000”。

在上面鍵掃描程序基礎上增加的源程序如下:

詳解單片機的按鍵檢測與控制


分享到:


相關文章: