用單片機P1口擴展成4*4的鍵盤 按下按鍵點亮P0口的LED
矩陣鍵盤的擴展不算復雜 主要是檢測代碼部分比較復雜
IO擴展原理
矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。
在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數就為4*4個。
這種行列式鍵盤結構能有效地提高單片機系統(tǒng)中I/O口的利用率。
檢測原理
當無按鍵閉合時,行線與列線之間開路。當有鍵閉合時,與閉合鍵相連的兩條I/O口線之間短路。
判斷有無按鍵按下的方法:
粗掃描。行線輸出低電平,列線輸出高電平。讀取Px口,若數據不等于 0x0F則有按鍵按下。
細掃描。行線逐行輸出低電平,其他IO口輸出高電平。讀取Px口,若數據不等于輸出的數值則有按鍵按下。并可以確定行數。同理列線逐行輸出低電平,可以檢測出列數。
根據行數和列數轉換按鍵碼
代碼如下:
#include#defineucharunsignedchar#defineLED_ON(X)P0=~(1<<(X))//LED低電平點亮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<