#include <reg52.h>
#define uchar unsigned char
uchar keyvalue;
sbit P2_0=P2^0; //数码管位选
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳极数码管
void delay(uchar z) //延时函数
{uchar x,y;
for(x=z;x>0;x–)
for(y=114;y>0;y–);
}
void keyscan() //独立按键扫描函数
{ P3=0xff;
if(P3!=0xff)
{ delay(5);
if( P3!=0xff)
{
switch(P3)//判断哪一行被按下
{ case 0xdf:keyvalue=2;break;//S1按下
case 0xef:keyvalue=3;break;//S2按下
case 0xf7:keyvalue=4;break;//S3按下
case 0xfb:keyvalue=5;break;}//S4按下
}
while(P3!=0xff);//松手检测
}
}
void display(uchar i) //数码管显示函数
{
P2_0=0; //打开位选锁存器
P0=table[i]; //显示按键值
delay(5);
P2_0=1; //锁定位选数据
}
void main()
{
while(1)
{
keyscan(); //独立按键扫描
display(keyvalue);//按键值显示
}
}