當前位置:
首頁 > 最新 > 矩陣鍵盤按鍵掃描

矩陣鍵盤按鍵掃描

一、4*4矩陣鍵盤

如下圖,4*4矩陣鍵盤是單片機外部設備中所使用的排布類似於矩陣的鍵盤組,在鍵盤中按鍵數量較多時,為了減少I/O口的佔用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個埠就可以構成4*4=16個按鍵,比之直接將埠線用於鍵盤多出了一倍,由此可見,在需要的鍵數比較多時,採用矩陣法來做鍵盤是合理的。

矩陣鍵盤實物圖

矩陣鍵盤PCB原理圖

由下圖矩陣鍵盤的內部電路圖可以看出,矩陣鍵盤線路有4條列線、4條行線,每條行線和每條列線通過一個按鍵開關相連接,當沒有按鍵被按下時,行列線之間互不影響。

二、讀取矩陣鍵盤按鍵值的方法

運用比較廣泛的讀取矩陣鍵盤輸入的方法有兩種,一種是行(列)掃描法,一種是翻轉法,今天我們採用的是第二種翻轉法,第一種方法如果大家有興趣可以自行去了解。

我們將行線和列線分開來看,如果我們讓四條行線輸出低電平,四條列線輸入高電平,當沒有按鍵按下時,列線輸入全為高電平,如果其中有一個按鍵按下,那麼列線中就有一條與行線低電平接通,輸入低電平,但這時我們只能知道被按下的按鍵在哪一列,卻不知道它是這一列四個按鍵中的哪一個。。這時如果我們將行列線交換,即行線輸入高電平,列線輸出低電平,被按下開關所在那一行由於與列線低電平線與被拉低,輸入低電平,這樣我們就可以知道這個按鍵在哪一行。

比如現在我們把行線置低電平輸出,列線高電平輸入,按下開關J7,列2就會被行線拉低輸入低電平,但列2上除了開關J7外還有其他三個按鍵,我們無法確定是哪一個,這時把行線設置為高電平輸入,列線置為低電平輸出,J7按下時行1會被拉低從而輸入低電平,這樣我們就知道被按下的按鍵是列2和行1的交點處的J7。

GIF

三、主要程序代碼

這次矩陣鍵盤的輸入掃描檢測我們使用的是STM32F405單片機,開始先設置單片機的IO口,使行線輸出低電平,列線輸入高電平,配置代碼如下:

行線3210的IO口分別為:PB5,PB4,PB3,PC12

列線0123的IO口分別為:PC11,PC10,PA8,PB15

設置行線IO口推挽輸出並置低電平,設置列線IO口上拉輸入,即輸入高電平。之後讀取列線IO口的輸入電平(高電平為1,低電平為0),記入變數cord_l中,如果沒有按鍵按下,那麼cord_l的值將會是0x0f,如果不是,說明有按鍵按下,此時延時消抖再讀一次。

如果按鍵確實被按下了,那麼我們就交換行列線的配置,讀取行線的輸入值記入cord_h中。為了方便確定按鍵,我們將cord_h和cord_l通過左移和或運算合併成press,通過press的值來確定是哪一個按鍵被按下了。(比如被按下的是J7,那麼cord_h=00001101(0x0d),cord_l=00001011(0x0b),press=11011011(0xdb).)

以上就是矩陣鍵盤按鍵檢測的STM32F4單片機實現的過程,當然還有很多其他的方法,比如前文提到的行(列)掃描法,在程序實現方面也可以根據需求選擇用按鍵中斷來實現。

除此以外,在實際使用過程中,偶爾我們需要連按,有時要求不能連按,具體的實現大家可以探討探討,有想法可以留言~

圖文:電控組 劉雨

電氣信息學院2015級

排版:你猜呀~

這裡是四川大學Robomaster機器人協會

新浪微博:@四川大學RoboMasters社團

如果你也很酷


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 SCURM 的精彩文章:

TAG:SCURM |