#include<reg51.h>
unsigned char keyscan(void);
unsigned char key_num;
unsigned char a,b,c;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delay(unsigned int z)//1ms延时函数
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
P0=table[1];
while(1)
{
key_num=keyscan();//按键扫描
P0=table[key_num];//按键显示
}
}
unsigned char keyscan(void)
{
P1=0xF0;
if((P1&0xF0)!= 0xF0)//按键检测
{
delay(10);//按键消抖
if((P1&0xF0)!= 0xF0)
{
a=0xFE;
b=0;
c=4;
while((a&0x10)!=0)
{
P1=a;
if((P1&0xF0)!= 0xF0)
{
switch(P1&0xF0)
{
case 0xE0:c--;
case 0xD0:c--;
case 0xB0:c--;
case 0x70:c--;
default:break;
}
return(b*4+c);//返回键值
}
else
{
a=(a<<1)|0x1;b++;//下一次循环扫描
}
}
}
}
return(b*4+c);//松开按键后保留键值
}
评论10