之前我們已經就矩陣按鍵做了簡單的介紹。也對按鍵的工作原理進行了分析和實踐。今天,我們就4*4矩陣按鍵做一個詳細的介紹,因為生產生活中,使用最多的就是這類按鍵,我們可以把4*4按鍵作為一個模塊,拿來就用,市場上也有很多現成的模塊,我們需要了解其基本構造就可以使用了,主要是區分行和列。後期學習中斷後,會更加方便。
這裡我們就開始說4*4矩陣按鍵的內容。首先是看下市場上的一些按鍵模塊。
具體這個是幹什麼的就不是很清楚了。一般的,我們都會把左側的3*3位置,設定為123456789這九個數字,下方的三個和右側的四個,除了有0外,另外六個可以自由設計。儘管功能各不相同,但是,我們把按鍵的含義擦除,後面的模塊都是4*4鍵盤,沒有什麼不同,輸出也都是八根線,所以我們只要掌握這個4*4的檢測方法,一法通萬法皆通。
使用中,我們僅需注意行列就可以了。
使用P1埠進行控制,採用高四位控制行,第四位控制列,以後都是這個標準,就會得出4*4矩陣按鍵的標準鍵值表。由於表格上傳會出現錯誤,就使用文字描述了。
這是埠的鍵值2進位真值表
第一行:0111 0111/0111 1011/0111 1101/0111 1110
第二行:1011 0111/1011 1011/1011 1101/1011 1110
第三行:1101 0111/1101 1011/1101 1101/1101 1110
第四行:1110 0111/1110 1011/1110 1101/1110 1110
這是埠鍵值的16進位真值表
第一行:0X77++0X7B++0X7D++0X7E
第二行:0XB7++0XBB++0XBD++0XBE
第三行:0XD7++0XDB++0XDD++0XDE
第四行:0XE7++0XEB++0XED++0XEE
我們單片機掃描用的是二進位的真值表,但是代碼需要書寫為16進位的真值表。只要我們的控制方式不變,這個真值就不會變化,即使採用P0/P2/P3也是一樣的。
接線方法如下。
h1234對應的是P1的P1.0/P1.1/P1.2/P1.3
L1234對應的是P1的P1.4/P1.5/P1.6/P1.7
然後就是通過程序的掃描來確認按鍵是否按下,以及是哪個按鍵按下了。
掃描流程依然是,先分行置零,然後對讀到的鍵值進行消抖,接著判斷鍵值是否標準,然後依據鍵值做出動作。
由於我們沒有學習中斷,所以就簡單些的應用來說明問題。
使用兩種同種類的鍵盤來分別展示。
這兩種鍵盤都是4*4的變形,在後期便於我們進行繪製和測試,每次都去繪製16個按鍵和連線還是比較費時間的。當然生活中,也有相應的模塊,如果有資金可以購置,這樣就無需自己焊接了。若僅僅是學習,焊接一個矩陣當然是最好的,既鍛鍊動手能力,又可以使用。
在鍵值的讀取上,我們可以通過逐行掃描,當然不止這一種方式,還有一種通過運算可以得到相應的鍵值,也是很好的。
方法是:1,首先將所有行置零,然後讀取列數據,保存。
2,然後將所有列置零,然後讀取行數據,保存。
3,將行列數據相加,就是鍵值。
示例:假設我摁下了3行2列的按鍵。
1,行置零,讀取到0000 1011
2,列置零,讀取到1101 0000
3,數據和,0000 1011+1101 0000=1101 1011
跟之前的我們逐行掃描相比,這個會更快些。接下來,我們就使用這種方式,寫下代碼。
這裡將消抖放在了主函數中,是為了看起來更加清楚,方便了解其工作原理,如果想要簡潔一些,可以將消抖部分,放在按鍵處理函數中。不影響按鍵掃描。
按鍵處理函數中的P0輸出,是我隨機寫的,沒有實際含義,主要是讓不同的按鍵按下顯示不同的現象,用於判斷按鍵是否正常被掃描到了。還有在程序中,按鍵掃描後,我沒有添加按鍵是否抬起的判斷,如果是在一些有運算的場合,建議添加上,否則會造成連續運算。
接下來我們使用兩種按鍵來仿真下運行情況。
運行仿真後,使用系統自帶的鍵盤沒有響應。
使用我們自己繪製的按鍵可以正常驅動,動作也正常響應。具體原因不得而知,估計是自帶鍵盤代碼不支持我這種操作。為此我們再來測試下,使用行列單獨掃描的結果,看是否也是不能用,如果都不能用,後期操作,將會比較費時間,因為繪製按鍵矩陣真的很費事。
行列掃描可以正常使用,還好還好,這就說明是程序的支持問題,我們的代碼是沒有問題的,以後為了方便,我還是使用行列掃描的代碼。
好了關於矩陣按鍵,就介紹到這裡,接下來的一段時間,會製作一些實例來練習下之前學習的知識。鞏固下。近段時間會更新的慢些,家裡的寶貝長大了,會鬧人啦,帶起來比較費時間呢。多謝理解。