- 單片機(jī)原理及應(yīng)用
- 趙旭輝 楊靈主編
- 1742字
- 2021-09-27 12:50:20
3.5 矩陣式鍵盤的識別
矩陣式鍵盤由多個鍵排列而成,鍵開關(guān)被排列成M(行)×N(列)的矩陣結(jié)構(gòu),每個鍵開關(guān)位于行和列的交叉處。其連接示意圖如圖3-20所示。

圖3-20 矩陣式鍵盤工作原理示意圖
課件 矩陣式鍵盤掃描與識別方法

視頻 矩陣式鍵盤掃描與識別方法

圖3-20所展示的是4×4矩陣式鍵盤,共有16個鍵位,只用了P1口的8根口線[一般來講M(行)×N(列)矩陣式鍵盤所需要的口線數(shù)為M+N條]。與獨(dú)立式鍵盤相比,更加節(jié)省系統(tǒng)的I/O口資源。無論是獨(dú)立式鍵盤還是矩陣式鍵盤,其檢測方法都是通過檢測對應(yīng)口線是否為低電平來判斷按鍵是否被按下。但是矩陣式鍵盤的檢測要比獨(dú)立式鍵盤復(fù)雜得多。
矩陣式鍵盤的檢測主要有兩種方法:一種是逐行掃描法;另一種是行列反轉(zhuǎn)法。
1.逐行掃描法
觀察圖3-20所示的4×4矩陣式鍵盤,可以看到,在接口電路中有4條行線和4條列線分別接到每個按鍵開關(guān)的左右兩端。其中,4條行線的連接口線工作在輸出方式,4條列線的連接口線工作在輸入方式。

圖3-21 逐行掃描法的工作流程
逐行掃描法的工作流程如圖3-21所示。
首先CPU對4條行線置0,然后CPU從列線上讀入數(shù)據(jù),若讀入的數(shù)據(jù)全為1,表示無鍵按下,則結(jié)束掃描。只要讀入的數(shù)據(jù)中有一個不為1,則表示有鍵被按下。
接著,CPU先使第0行為0,其余3行為1,讀入全部列,若全為1,表示按鍵不在此行;接著向下掃描,使第1行為0,其余各行為1,再讀入全部列,若全為1,表示按鍵不在此列;然后重復(fù)上述步驟。直至第N行為0時,第M列也為0,則表明該按鍵位于第N行第M列。
2.行列反轉(zhuǎn)法
使用逐行掃描法需要進(jìn)行整個鍵盤的多次掃描,判斷過程較為復(fù)雜。使用行列反轉(zhuǎn)法可以克服這些問題,并加快按鍵的檢測速度。
使用行列反轉(zhuǎn)法的步驟如下:
(1)使矩陣式鍵盤連接行線的口線工作在輸出方式,連接列線的口線工作在輸入方式。CPU先向全部行線上輸出0,然后讀取列線上的電平。若有按鍵被按下,必然有一個列線為低電平;否則,表示沒有按鍵被按下,不必再進(jìn)行檢測。
(2)若檢測到某個列線為低電平之后,重新設(shè)置鍵盤行線的連接口線工作于輸入方式,列線工作于輸出方式,并將剛剛得到的列線值再次從列線上輸出,此時檢測所有行線上的電平,必然得到一個行線為低電平的行線值。
(3)將得到的行線值與列線值組合在一起,即為該按鍵的編碼值。將得到的鍵值與事先準(zhǔn)備好的所有按鍵的鍵值編碼比較,就知道哪個按鍵被按下了。
比如第2行第3列的按鍵被按下,采用行列反轉(zhuǎn)法,其工作過程見表3-3。
表3-3 行列反轉(zhuǎn)法工作過程表

【課堂練習(xí)】4×3矩陣式鍵盤的行列反轉(zhuǎn)法檢測。使用4×3矩陣式鍵盤與51單片機(jī)的P1口相連,按鍵后,在共陰極數(shù)碼管上會顯示所按鍵位代表的數(shù)字。電路連接如圖3-22所示。

圖3-22 編碼鍵盤的使用
【分析】這里使用的是自定義的4×3矩陣式鍵盤,其內(nèi)部結(jié)構(gòu)與普通的4×4矩陣式鍵盤基本一樣,只是少了一列。使用行列反轉(zhuǎn)法進(jìn)行鍵盤掃描,先畫出鍵盤連接的示意圖如圖3-22所示。下面仍以4×4矩陣式鍵盤為例進(jìn)行分析,只是在計算結(jié)果時要去掉最右側(cè)一列?,F(xiàn)在假設(shè)按下的鍵位是數(shù)字5這個鍵,先使P1口的值為0xf0(即低4位接行檢測線,高4位接列檢測線)。數(shù)字5鍵按下后,P1.1與P1.5連通,P1.1原為低電平,因此P1.5也變成了低電平,其他的不變。此時,獲取列檢測線上的值為1101B并保存起來。接著改變P1口的輸入/輸出狀態(tài),將低4位變?yōu)檩敵?,?位變?yōu)檩斎?;然后將剛獲取的列檢測線值,輸入P1口的高4位,同樣因為P1.1與P1.5已經(jīng)相連,所以瞬間P1.1也由原來的高電平變?yōu)榈碗娖?,其他各口線不改變,此時獲取行檢測線上的值為1101B。現(xiàn)在將獲取到的列檢測線值和行檢測線值組合在一起,形成1字節(jié),即11011101B,轉(zhuǎn)換成十六進(jìn)制為0xdd,這就是數(shù)字5鍵對應(yīng)的鍵盤編碼值。按照上面的分析,寫出該鍵盤上各鍵的編碼值,見表3-4。在程序中只要將獲取到的編碼與表3-4進(jìn)行比較即可得到該次按鍵的鍵名所代表的數(shù)值。
表3-4 4×3矩陣式鍵盤的編碼表

要將按鍵對應(yīng)的鍵名數(shù)值在數(shù)碼管上顯示出來,還需要為數(shù)碼管設(shè)定一下段選碼表,將段選碼表與鍵盤的鍵名數(shù)字在位置上一一對應(yīng)起來,就可以實(shí)現(xiàn)按下某一鍵,立刻在數(shù)碼管上顯示出相應(yīng)的數(shù)字來。
參考程序如下:


程序中scanKey(?。┻@個函數(shù)就是行列反轉(zhuǎn)法的代碼實(shí)現(xiàn),該函數(shù)返回的數(shù)值就是當(dāng)前按鍵值在整個鍵盤編碼中的位置,結(jié)合數(shù)碼管模塊的動態(tài)顯示程序,能實(shí)現(xiàn)更多、更復(fù)雜信息的錄入顯示功能。
- Cortex-M3 + μC/OS-II嵌入式系統(tǒng)開發(fā)入門與應(yīng)用
- 計算機(jī)組裝·維護(hù)與故障排除
- 電腦常見故障現(xiàn)場處理
- Unity 5.x Game Development Blueprints
- 計算機(jī)維修與維護(hù)技術(shù)速成
- Svelte 3 Up and Running
- 筆記本電腦使用、維護(hù)與故障排除從入門到精通(第5版)
- 基于Proteus仿真的51單片機(jī)應(yīng)用
- “硬”核:硬件產(chǎn)品成功密碼
- FL Studio Cookbook
- 嵌入式系統(tǒng)原理及應(yīng)用:基于ARM Cortex-M4體系結(jié)構(gòu)
- 計算機(jī)電路基礎(chǔ)(第2版)
- 微服務(wù)實(shí)戰(zhàn)(Dubbox +Spring Boot+Docker)
- 微服務(wù)架構(gòu)基礎(chǔ)(Spring Boot+Spring Cloud+Docker)
- 從企業(yè)級開發(fā)到云原生微服務(wù):Spring Boot實(shí)戰(zhàn)