#include <reg52.h>
unsigned char Table[16]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, //0,1,2,3,4,5,6
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};//7,8,9,A,B,C,D,E,F,
void delay(unsigned char m) //延时
{
unsigned char a,b;
for(a=m;a>0;a--)
for(b=100;b>0;b--);
}
unsigned char temp,key,number_key;
unsigned char Key_scan(); //键盘扫描
void main()
{
P0=0xff; //先关闭显示数据
P2=0xff; //先关闭数码管
number_key=0xff;
while(1)
{
P2=0x00; //打开数码管
number_key=Key_scan(); //将返回的键值赋给变量
P0=number_key; //送键值显示
delay(5);
}
}
unsigned char Key_scan() //键盘扫描
{
P1=0x0f; //读低4位
temp=P1;
temp=temp&0x0f;
temp=~(temp|0xf0); //读取
if(temp==1)
key=1;
else if(temp==2)
key=2;
else if(temp==4)
key=3;
else if(temp==8)
key=4;
P1=0xf0; //读高4位
temp=P1;
temp=temp&0xf0;
temp=~(temp|0x0f); //把高4位得到的按键值转化成数字
if(temp==16)
key=key+0;
else if(temp==32)
key=key+4;
else if(temp==64)
key=key+8;
else if(temp==128)
key=key+12;
while(!p1);
return number_key=Table[key-1];
} 请电子朋友帮我看下这个键盘扫描程序怎样修改才可以稳定的显示数字 现在的情况是按下键的时候数字会不稳定按2次或3次才是需要的数字 我是新手请大家指点一下 非常感谢 |