之前做過很多仿真儀表盒,經(jīng)常遇到盒子上既有大量LED指示燈,又有很多按鍵的情況,主芯片使用的SiliconLabs的一款單片機(jī),管腳資源有限,如何應(yīng)對如此多的指示燈和按鍵呢?當(dāng)時(shí)選用了max7219來實(shí)現(xiàn)多個(gè)LED燈的控制,而按鍵則是通過矩陣掃描實(shí)現(xiàn)的。
所謂“矩陣掃描”,可以想象成是把幾路IO橫豎交叉形成網(wǎng)格狀,然后把按鍵放置在網(wǎng)格的交叉點(diǎn)上。這種電路應(yīng)用很廣泛,可以由較少的IO口實(shí)現(xiàn)較多的按鍵控制。比如,6根IO按照3行3列排列,就可以實(shí)現(xiàn)接入9個(gè)按鍵;8根IO按照4行4列排列,就可以實(shí)現(xiàn)接入16個(gè)按鍵。來看下面這個(gè)3*3的矩陣按鍵原理圖:
3*3矩陣按鍵1
注意,中間那四個(gè)行、列交叉地方的線是分離的,并沒有短接:
3*3矩陣按鍵2
還要注意的是,我們要給行或列IO加上上拉電阻,以保證它們的默認(rèn)狀態(tài)是高電平。
矩陣按鍵掃描的實(shí)現(xiàn)原理是這樣的:把屬于列的IO口設(shè)置為輸入狀態(tài),這時(shí)由于上拉電阻的作用,當(dāng)按鍵沒有動作時(shí),程序就會讀到高電平;這時(shí)開始按行進(jìn)行掃描,先把行1的IO設(shè)置為輸出狀態(tài),然后設(shè)置輸出為低電平,接著依次讀取列IO口的狀態(tài),如果有按鍵被按下,那么列IO口的讀入電平就變成低電平,這時(shí)就可以根據(jù)行和列判斷出動作按鍵的位置了。行1的掃描完成后,把行1的IO置高,然后按照上面步驟依次進(jìn)行行2和行3的掃描,確認(rèn)有動作按鍵的位置就可以了。下面是程序的簡單流程圖(沒有包含去抖等處理):
簡單掃描按鍵流程圖
-
led
+關(guān)注
關(guān)注
242文章
23343瀏覽量
662322 -
原理圖
+關(guān)注
關(guān)注
1300文章
6358瀏覽量
234865 -
單片機(jī)
+關(guān)注
關(guān)注
6042文章
44617瀏覽量
637483 -
仿真
+關(guān)注
關(guān)注
50文章
4123瀏覽量
133862 -
矩陣按鍵
+關(guān)注
關(guān)注
0文章
28瀏覽量
8380
發(fā)布評論請先 登錄
相關(guān)推薦
評論