练习:按下矩阵键盘键盘,显示0-F
该方法代码比较粗暴和长,但复用东西很多,蛮好用的,也可以把矩阵键盘封装成函数来使用,我封装好的函数会附在最后,欢迎下载使用!!!
#include "reg52.h"
sfr P4=0xC0;
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C1=P3^4;
sbit C2=P3^5;
sbit C3=P4^2;
sbit C4=P4^4;
unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
void SelectHC573(unsigned char n){
switch(n){
case 4:
P2 = (P2 & 0x1f) | 0x80;
break;
case 5:
P2 = (P2 & 0x1f) | 0xa0;
break;
case 6:
P2 = (P2 & 0x1f) | 0xc0;
break;
case 7:
P2 = (P2 & 0x1f) | 0xe0;
break;
}
}
void Display(unsigned int value){
SelectHC573(7);
P0=0xff;
SelectHC573(6);
P0=0x01;
SelectHC573(7);
P0=value;
}
unsigned char count=0;
void ScannKey(){
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0){
while(C1==0);
count=0;
Display(duanma[count]);
}
else if(C2==0){
while(C2==0);
count=1;
Display(duanma[count]);
}
else if(C3==0){
while(C3==0);
count=2;
Display(duanma[count]);
}
else if(C4==0){
while(C4==0);
count=3;
Display(duanma[count]);
}
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0){
while(C1==0);
count=4;
Display(duanma[count]);
}
else if(C2==0){
while(C2==0);
count=5;
Display(duanma[count]);
}
else if(C3==0){
while(C3==0);
count=6;
Display(duanma[count]);
}
else if(C4==0){
while(C4==0);
count=7;
Display(duanma[count]);
}
R3=0;
R2=R1=R4=1;
C1=C2=C3=C4=1;
if(C1==0){
while(C1==0);
count=8;
Display(duanma[count]);
}
else if(C2==0){
while(C2==0);
count=9;
Display(duanma[count]);
;
}
else if(C3==0){
while(C3==0);
count=10;
Display(duanma[count]);
}
else if(C4==0){
while(C4==0);
count=11;
Display(duanma[count]);
}
R4=0;
R2=R3=R1=1;
C1=C2=C3=C4=1;
if(C1==0){
while(C1==0);
count=12;
Display(duanma[count]);
}
else if(C2==0){
while(C2==0);
count=13;
Display(duanma[count]);
}
else if(C3==0){
while(C3==0);
count=14;
Display(duanma[count]);
}
else if(C4==0){
while(C4==0);
count=15;
Display(duanma[count]);
}
}
void InitSystem(){
SelectHC573(4);
P0=0xff;
SelectHC573(5);
P0=0x00;
}
void main(){
InitSystem();
while(1){
ScannKey();
}
}