單片機(jī)4*4矩陣鍵盤
用單片機(jī)P1口擴(kuò)展成4*4的鍵盤 按下按鍵點(diǎn)亮P0口的LED
矩陣鍵盤的擴(kuò)展不算復(fù)雜 主要是檢測(cè)代碼部分比較復(fù)雜
IO擴(kuò)展原理
矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。
在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4*4個(gè)。
這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O口的利用率。
檢測(cè)原理
當(dāng)無按鍵閉合時(shí),行線與列線之間開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O口線之間短路。
判斷有無按鍵按下的方法:
粗掃描。行線輸出低電平,列線輸出高電平。讀取Px口,若數(shù)據(jù)不等于 0x0F則有按鍵按下。
細(xì)掃描。行線逐行輸出低電平,其他IO口輸出高電平。讀取Px口,若數(shù)據(jù)不等于輸出的數(shù)值則有按鍵按下。并可以確定行數(shù)。同理列線逐行輸出低電平,可以檢測(cè)出列數(shù)。
根據(jù)行數(shù)和列數(shù)轉(zhuǎn)換按鍵碼
代碼如下:
#include#defineucharunsignedchar#defineLED_ON(X)P0=~(1<<(X))//LED低電平點(diǎn)亮ucharKeyScan(void);voidmain(void){ucharkey;while(1){key=KeyScan();if(key>0){key=key-1;LED_ON(key);}}}ucharKeyScan(void){uchari,val,row,col,key;P1=0xF0;//行線置0,列線置1if(P1!=0x0F0)//按鍵按下{for(i=0;i<4;i++)//行掃描{val=0xFF&(~(1<