|
發(fā)布時間: 2021-10-26 15:24
正文摘要:#include<reg51.h> void delay50ms() { unsigned t; for(t=0;t<0x01;t++) { & ... |
|
這種矩陣鍵盤用反轉(zhuǎn)法比較簡單,給你一個參考代碼。 { P1 = 0x0f; //行置低,列置高(讀列) if(P1!=0x0f) { // P1 = 0x0f; delaym(40); //延時去抖。約60MS,可根據(jù)實際情況修改 if(P1!=0x0f) { switch(P1)//掃描列 { case 0x07:i=3;break; case 0x0b:i=2;break; case 0x0d:i=1;break; case 0x0e:i=0;break; default:break; } //反轉(zhuǎn)行列電平,讀行 P1 = 0xf0; switch(P1) { case 0x70:j=3;break; case 0xb0:j=2;break; case 0xd0:j=1;break; case 0xe0:j=0;break; default:break; } while(P1!=0xf0); //等待鍵釋放 return key_word[i][j];//返回鍵值 } |
|
|
|
個人覺得你的代碼邏輯有很大的問題,沒有理解按鍵檢測的原理。 首先,你定義了一個temp,然后P1=0x0f,怎么突然之間就跳到while(temp!=0x0f)了?中間不應該有個temp=P1的過程? 其次,檢測到temp!=0x0f后,為什么讓P1=0xfe<<1?這也不會令P1最終得到真實的按鍵狀態(tài)啊。最終只會導致P1==0x00。 最后,switch(temp)這,temp并沒有得到真實的按鍵狀態(tài)(P1口)對應的電平狀態(tài),自然會導致switch(temp)下面的語句沒起任何作用。 建議找本教材,比如郭天祥的,看看按鍵檢測的原理以及例程。或者看看視頻的講解,理解原理之后再寫代碼。 |
Powered by 單片機教程網(wǎng)