代码是这样的,也是从论坛上看见的
#include<reg51.h>
#define KEYP P2
#define SEG7P P0
unsigned char code TAB[17]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
unsigned char disp[4]= {0x40,0x40,0x40,0x40};
unsigned char scan[4]= {0xef,0xdf,0xbf,0x7f};
void delay(int);//1ms
void scanner(void);
main() {
while(1) {
scanner();
}
}
void delay(int x) {
int i,j;
for(i=0; i<x; i++)
for(j=0;j<120;j++);
}
void scanner(void) {
unsigned char col,row,dig;
unsigned char rowkey,kcode;
for(col=0; col<4; col++)
{
KEYP=scan[col];
SEG7P=disp[col];
rowkey=~KEYP&0x0f;
if(rowkey!=0)
{
if(rowkey==0x01) row=0;
else if(rowkey==0x02) row=1;
else if(rowkey==0x04) row=2;
else if(rowkey==0x08) row=3;
kcode=4*col+row;
if(kcode!=10&&kcode!=11){
for(dig=3; dig>0; dig--)
disp[dig]=disp[dig-1];
disp[0]=TAB[kcode];
}
if(kcode==11){
for(dig=0; dig<3; dig++)
disp[dig]=disp[dig++];
disp[0]=0x40;
}
while(rowkey!=0)
rowkey=~KEYP&0x0f;
}
if(kcode==10){
int k;
for(k=0;k<4;k++){
disp[k]=0x40;
}
}
delay(4);
}
}
|