跟我學(xué)51單片機(jī)(四):獨(dú)立-矩陣鍵盤應(yīng)用與設(shè)計(jì)
二、電路詳解
電路圖如圖2 所示。
圖2
從圖2 中可知獨(dú)立式按鍵采用每個(gè)按鍵單獨(dú)占用一根I/O 口線結(jié)構(gòu)。當(dāng)按下和釋放按鍵時(shí),輸入到單片機(jī)I/O 端口的電平是不一樣的,因此可以根據(jù)不同端口電平的變化判斷是否有按鍵按下以及是哪一個(gè)按鍵按下。從圖2(a) 中可以看出,按鍵和單片機(jī)引腳連接并加了上拉電阻,這樣當(dāng)沒有按鍵按下的時(shí)候,I/O 輸入的電平是高電平,當(dāng)有按鍵按下的時(shí)候,I/O 輸入的電平是低電平。
雖然獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/O 口線,因此,在按鍵較多時(shí),I/O 口線浪費(fèi)較大。對(duì)于比較復(fù)雜的系統(tǒng)或按鍵比較多的場(chǎng)合,可以用到矩陣鍵盤,圖2(b) 中所示的為4×4的矩陣式鍵盤,其他矩陣式鍵盤的設(shè)計(jì)方法類似。
4×4 的矩陣式鍵盤由4 根行線和4 根列線交叉構(gòu)成,按鍵位于行列的交叉點(diǎn)上,這樣就構(gòu)成了16 個(gè)按鍵。其中交叉點(diǎn)的行列線是不連接的,當(dāng)按鍵按下的時(shí)候,此交叉點(diǎn)處的行線和列線導(dǎo)通。圖2(b) 行線通過上拉電阻接到VCC 上。當(dāng)無鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線在交點(diǎn)導(dǎo)通,此時(shí),行線電平將由與此行線相連的列線電平?jīng)Q定。這是識(shí)別按鍵是否按下的關(guān)鍵。然而,矩陣鍵盤中的每條行線與4 條列線相交,交點(diǎn)的按鍵按下與否均影響該鍵所在行線和列線的電平,各按鍵間將相互影響,鍵分析時(shí)必須將行線、列線信號(hào)配合起來作適當(dāng)處理,才能確定閉合鍵的位置。
值得注意的是本文介紹的矩陣鍵盤,在傳統(tǒng)的矩陣鍵盤的輸出端加了一個(gè)四輸入與門芯片74HC21。當(dāng)四路輸入有一個(gè)為低電平的時(shí)候,輸出為低電平。將74HC21 的輸出端接到單片機(jī)的外部中斷0(P32 管腳)上,這樣在實(shí)時(shí)性要求較高的情況下,設(shè)P00~P03 為全低等待按鍵觸發(fā),當(dāng)任何一個(gè)按鍵按下的情況下,系統(tǒng)都會(huì)進(jìn)入中斷服務(wù)程序,提高了鍵盤響應(yīng)時(shí)間,在系統(tǒng)實(shí)時(shí)性要求較高的情況下非常實(shí)用。本文的全部源程序見www.ele169.com。
三、程序設(shè)計(jì)
本文設(shè)計(jì)實(shí)例關(guān)鍵程序如下。
獨(dú)立按鍵程序
……
#define keyio P0 ( 1)
#define key1 P0_3 ( 2)
……
keyio|=0X0F; ( 3)
if(key1==0) ( 4)
{
delay_nms(20); ( 5)
if(key1==0) ( 6)
{
while(key1==0); ( 7)
return 1; ( 8)
}
}
萬能遙控器相關(guān)文章:萬能遙控器代碼
51單片機(jī)相關(guān)文章:51單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
評(píng)論