|
發(fā)布時間: 2021-10-16 15:50
正文摘要:我這樣寫程序能讀出P0口的狀態(tài)嗎? 經(jīng)過開發(fā)板測試發(fā)現(xiàn),讀不出來,請高手指點(diǎn)一下為什么? |
xuyaqi 發(fā)表于 2021-10-16 19:27 也不行,但是可以讀取出行的數(shù)據(jù),比如,第一行,程序顯示01111111,第二行10111111,第三行11011111第四行就是11101111。但是具體哪個按鍵按下去的,它反應(yīng)不出來,怎么回事啊 |
dzc3458 發(fā)表于 2021-10-16 18:43 確實(shí)是不能直接讀數(shù)據(jù),但是覺得不應(yīng)該啊,為什么會讀取不了數(shù)據(jù)呢 |
yzwzfyz 發(fā)表于 2021-10-16 16:14 就讀不了,你說奇怪不 是不是跟單片機(jī)掃描有關(guān)系 |
|
給個參考: void Getch ( ) //取鍵值函數(shù) { unsigned char X,Y,Z; P0=0x0f; //先對P0 置數(shù) 行掃描 if(P0!=0x0f) //判斷是否有鍵按下 { delay10ms(); //延時,軟件去干擾 if(P0!=0x0f) //確認(rèn)按鍵按下 { X=P0; //保存行掃描時有鍵按下時狀態(tài) P0=0xf0; //列掃描 Y=P0; //保存列掃描時有鍵按下時狀態(tài) Z=X|Y; //取出鍵值 switch ( Z ) //判斷鍵值(那一個鍵按下) { case 0xee: k=0; break; //對鍵值賦值 case 0xed: k=1; break; case 0xeb: k=2; break; case 0xe7: k=3; break; case 0xde: k=4; break; case 0xdd: k=5; break; case 0xdb: k=6; break; case 0xd7: k=7; break; case 0xbe: k=8; break; case 0xbd: k=9; break; case 0xbb: k=10;break; case 0xb7: k=11;break; case 0x7e: k=12;break; case 0x7d: k=13;break; case 0x7b: k=14;break; case 0x77: k=15;break; } } } } |
|
這個讀不了的 試試下面的: switch(P0|0x00) |
| 這種4x4矩陣鍵盤好像不能直接讀數(shù)據(jù),需要逐行掃描,先把掃描行置0,然后檢測按鍵,看看哪個列為0,才能判斷第幾行第幾列,應(yīng)該是這樣的 |
| 不可能讀不到,無論是0,是1,總會讀到一個值的。怎么能說讀不到呢? |
Powered by 單片機(jī)教程網(wǎng)