矩陣鍵盤掃瞄

2022-03-31 08:14:40 字數 1309 閱讀 5870

根據矩陣鍵盤的原理圖可知,當沒有按鍵按下時,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...