#include<reg52.h> //头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
uchar key,n; //定义变量
uchar code table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//反转法矩阵键盘的各个按键的计算值
uchar code yin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管显示0~F
void delay(uint i)//延时函数
{
while(i--);
}
void keyscan()
{
uchar l,h,i;//定义局部变量,用l得出低4位的值,用h得出高4位的值
P1=0x0f;//给P1赋值00001111
l=P1&0x0f;
if(l!=0x0f)
{
delay(100);
if(l!=0x0f)
l=P1&0x0f;//若有键按下,得出低四位的值
}
P1=0xf0;//给P1赋值11110000
h=P1&0xf0;
if(h!=0xf0)
{
delay(100);
if(h!=0xf0)
h=P1&0xf0;//若有键按下,得出高4位的值
}
key=l+h;//高4位的值与低4位的值相加
for(i=0;i<16;i++)
{
if(key==table[i])//通过查表得出n的值
n=i;
}
}
void main()
{
while(1)
{
keyscan();
P0=yin[n];//在数码管上显示相应的键值
}
}