個人感覺,這個矩陣鍵盤的出現,就是為了減少序列口的使用,像這個4*4的矩陣鍵盤,8個序列口就可以控制16鍵,而如果是普通的則需要16個序列口,同樣的效果,序列口的使用減少了一般,對於序列口資源緊張的情況,這個矩陣鍵盤是個不錯的選擇。
但凡事都不可能都是好的,你的序列口使用減少了,那麼使用難度也相應上去了。接下來,讓我們來看看這個矩陣鍵盤的使用原理。
電路圖
接線
row1-4,col1-4依次接入p1的0-7。(埠可以自己自行設定)
原理
要想獲取鍵盤的輸入值,每次需逐行或逐列進行掃瞄。例如,當給給row全高電平,col1低電平,其餘全高,即給入11101111訊號,此時掃瞄的是第一行。若k00按鍵被按下,則讀取到p1口的訊號為11101110,當k10按鍵被按下,則讀取到p1口的訊號為11101101,依次類推,當k30被按鍵,則讀取的到訊號為11100111。所以,可知道,當掃瞄第一行時,每個按鍵被按下,都能在p1口讀取到相應的訊號,注意,這個訊號是唯一的,這是基礎也是保證。接下來的第二行,第三行,第四行都依次類推,同時,每按下乙個按鈕,都能得到乙個唯一的訊號。
然後,好了,既然給個按鍵都對應乙個唯一的訊號,那麼,我們只要判斷讀取到的訊號是什麼,那麼我們就能知道是哪個按鍵被按下去了。
(ps.掃瞄方式有很多,各種掃瞄,上面是我自己覺得還可以的掃瞄方式,也比較簡單,其它掃瞄方式,你們可以自行摸索一下。)
好了,原理差不多了。老規矩,我把我寫的矩陣掃瞄鍵盤的函式給弄上(注意哈,我這寫的**的接線跟上面說的應該是相反的即col1-4接p1的0-3,row1-4接p1的4-7):
實現**
int
key_read
(void)}
} p0 =
0xfd
;// 第二列if(
(p0 &
0xfd)!=
0xfd)}
} p0 =
0xfb
;// 第三列if(
(p0 &
0xfb)!=
0xfb)}
} p0 =
0xf7
;// 第四列if(
(p0 &
0xf7)!=
0xf7)}
}return num;
}void
delay_ms
(unsigned
int n)
其實,這個矩陣鍵盤明白的掃瞄原理,也不難,你到這裡,基本也明白了這個矩陣怎麼用。好了,這次的矩陣鍵盤就到了。最後,恭喜你,又學會乙個!
最後說下,那個去讀函式的返回值就是按鍵上的值…
4 4矩陣鍵盤的實現方式
在網上看了些4 4矩陣鍵盤的程式,哥們自己也想寫乙個,首先是初始化就是p0口賦初值,這是數碼管的i o口,然後就是p3口的賦初值,這個是選通有幾個數碼管的,就是這個意思吧,最重要的是p1口這是連線鍵盤的i o口。首先說說它的原理 我是依據我自己的圖來寫的,我的圖是p1.0 p1.3是行,p1.4 p...
4 4矩陣鍵盤C51程式
include include define key port p0 鍵盤介面定義 sbit key port 0 key port 0 sbit key port 1 key port 1 sbit key port 2 key port 2 sbit key port 3 key port 3 ...
4 4矩陣鍵盤的FPGA驅動
4 4矩陣鍵盤有4行與4列,在按鍵按下時一行與一列即導通。其驅動方法非常簡單。本設計中以一定的時間頻率分別將每一行的引腳電平拉高,並在拉高某個引腳的同時檢測每一列的電平變化,當檢測到某列引腳有上公升沿跳變時,即為該行與該列導通對應的那個按鍵被按下。例如上圖中,拉高pd4,此時檢測到pd2引腳有上公升...