根據矩陣鍵盤的原理圖可知,當沒有按鍵按下時,p1=0xf0;然後依次將p1^0~p1^3單獨置低電平,其他置高,再掃瞄各列的狀態,來判斷是哪個按鍵按下,比如,將p1^0輸出低電平,其他的引腳都輸出高電平,即p1=0xfe,那麼當第1行有按鍵按下時p1的相應值為,
1x1(01111110=0x7e) 1x2(10111110=0xbe) 1x3(11011110=0xde) 1x4(11101110=0xee)
將p1^1輸出低電平,其他的引腳都輸出高電平,即p1=0xfd,那麼當第2行有按鍵按下時p1的相應值為,
2x1(01111101=0x7d) 2x2(10111101=0xbd) 2x3(11011101=0xdd) 2x4(11101101=0xed)
將p1^2輸出低電平,其他的引腳都輸出高電平,即p1=0xfd,那麼當第2行有按鍵按下時p1的相應值為,
3x1(01111011=0x7b) 3x2(10111011=0xbb) 3x3(11011011=0xdb) 3x4(11101011=0xeb)
將p1^3輸出低電平,其他的引腳都輸出高電平,即p1=0xfd,那麼當第2行有按鍵按下時p1的相應值為,
4x1(01110111=0x77) 4x2(10110111=0xb7) 4x3(11010111=0xd7) 4x4(11100111=0xe7)
下面通過乙個來測試上面結果,
/*程式中用到了置位,如果檢測第一行時置位為0xfe,是為了初始化一下p1口,初始化後
*/#include
unsigned
intval;
void delay(unsigned int
t);void main(void
) p1 = 0xfd; //
置位為fd,檢測第二行 1111 1101
if (p1 != 0xfd
)
p1 = 0xfb; //
置位為fb,檢測第三行 1111 1011
if (p1 != 0xfb
)
p1 = 0xf7; //
置位為f7,檢測第四行 1111 0111
if (p1 != 0xf7
) }}
}}void delay(unsigned int
t)
矩陣鍵盤掃瞄
矩陣鍵盤掃瞄一般採取行列掃瞄法。比如先拉低所有列線,拉高行線,之後讀取行線狀態,如果行線有一行為低,則假設有按鍵按下,此時再延時20毫秒左右後判 斷行線的某一行是否仍然為低,若為低則確認有鍵按下。這時可以進行按鍵鍵值判斷,即判別在哪一行哪一列有按鍵按下。判斷的方法是通過拉高列線,依次置行線 的某一行...
矩陣鍵盤掃瞄
矩陣鍵盤掃瞄 module matrix keyboard input clk 50m,50m時鐘 input rst n,復位 input 3 0 row,矩陣鍵盤行輸入 output reg 3 0 col,矩陣鍵盤列輸出 output reg key flag,按鍵按下標誌 output re...
矩陣鍵盤掃瞄原理
當乙個按鍵兩端分別接乙個io口,乙個io口置高電平另乙個置低電平,當按下按鍵時高電平io口電平被拉低,另一端還是為低電平,這時檢測io口值就是兩個低電平。把上述方法應用到矩陣鍵盤上,如果把4個行引腳接p2前4位io口 p2.0 p2.3 都置低電平,把4個列引腳接p2後4位io口 p2.4 p2.7...