51、52微控制器使用矩陣鍵盤

omegablank發表於2018-03-21

為了學習矩陣鍵盤,先做個小小的實驗目標 : 按下矩陣鍵盤後 ,數碼管顯示按下的是第幾鍵。

我的矩陣鍵盤是4X4的,操作原理是先檢測按下的鍵是哪行。再確定是哪列。這樣就能識別是按的哪個鍵了。

首先看電路圖,確定鍵盤是連CPU的哪個針。我的開發板上是連線的P1,具體是P10~P17,八個針對應邏輯的8位。

 (此處省略,直接貼程式碼)

#include<reg52.h>
void delay(int n);
void juzhen(void);
char duanxuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char keyveluetonumber[17]={0X0,0x77,0x7B,0X7D,0X7E,0XB7,0XBB,0XBD,0XBE,
0XD7,0XDB,0XDD,0XDE,0XE7,0XEB,0XED,0XEE};
int keyvelue=0;

int main(){
int j=0;
P2=0XFF;
while(1){
juzhen();
P0=duanxuan[keyvelue];
}
}


void juzhen(void){
int a=0,i;
char tempkey;
P1=0xf0;
if(P1!=0Xf0){
delay(10);
if(P1!=0Xf0){
tempkey=P1;
P1=0X0f;
tempkey|=P1;

for(i=1;i<=16;i++){ /*下面switch的優化程式碼 */
if(keyveluetonumber[i]==tempkey) {
keyvelue=i ;
break;
}
}
/* switch(tempkey){ //這個switch的對應關係更直觀,但這麼程式設計太2了,
所以用陣列提前把下標和元素做好對映,直接查詢即可。
不省時間,但省程式設計師的精力。

case 0x77 : keyvelue=1;break;
case 0x7B : keyvelue=2;break;
case 0X7D : keyvelue=3;break;
case 0X7E : keyvelue=4;break;
case 0XB7 : keyvelue=5;break;
case 0XBB : keyvelue=6;break;
case 0XBD : keyvelue=7;break;
case 0XBE : keyvelue=8;break;
case 0XD7 : keyvelue=9;break;
case 0XDB : keyvelue=10;break;
case 0XDD : keyvelue=11;break;
case 0XDE : keyvelue=12;break;
case 0XE7 : keyvelue=13;break;
case 0XEB : keyvelue=14;break;
case 0XED : keyvelue=15;break;
case 0XEE : keyvelue=16;break;
}
*/

}

}


return ;
}
void delay(int n){ //簡陋的延時函式
int i;
while(n--)
for(i=110;i>0;i--);
}

 

相關文章