原理图及运行效果
实现依次按下四个按键,依次显示键值
源代码
#include "reg51.h"
//CK
//unsigned char code seg[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
//CA
unsigned char code seg[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
unsigned char num[]={16,16,16,16};
int n=0;
char key_scan(void);
delay(int t)
{
while(t--);
}
int main()
{
int cnt=0,KeyIn;
while(1)
{
KeyIn=key_scan();
if(KeyIn>=0)
{
num[cnt]=KeyIn;
cnt++;
while(key_scan()!=-1);
}
P1=0XFF; //仿真必须
P1=~seg[num[n]];
P2=~(0x01<<n);
delay(100);
n++;
n=n%4;
}
}
char key_scan(void)
{
char key,key1,key2;
P0=0X0F;
delay(2);
key1=P0;
P0=0XF0;
delay(2);
key2=P0;
key=key1|key2;
switch(key)
{
case 0xee:
return 0;
break;
case 0xde:
return 1;
break;
case 0xbe:
return 2;
break;
case 0x7e:
return 3;
break;
case 0xed:
return 4;
break;
case 0xdd:
return 5;
break;
case 0xbd:
return 6;
break;
case 0x7d:
return 7;
break;
case 0xeb:
return 8;
break;
case 0xdb:
return 9;
break;
case 0xbb:
return 10;
break;
case 0x7b:
return 11;
break;
case 0xe7:
return 12;
break;
case 0xd7:
return 13;
break;
case 0xb7:
return 14;
break;
case 0x77:
return 15;
break;
default:
return -1;
}
}