程序修改如下:
#define KeyPort P3
unsigned char keyscan() //矩阵键盘扫描函数
{
unsigned char temp1,temp2,VAL; //临时变量
static bit sign=0; //按键自锁标志
static unsigned char count=0; //消抖计数变量
KeyPort=0xf0; //先给P3赋一个初值
if(KeyPort!=0xf0) //判断P3不等于所赋初值,说明有健按下
{
if(sign==0) //如果按键自锁标志为0
{
count++; //消抖计数
if(count>=100) //消抖计数自>=100,估算主循环周期调整
{ //摒弃Delay延时方式,提高运行效率
count=100; //防止溢出
sign=1; //按键自锁标志置1,键不抬起,按其他键无效
temp1=KeyPort; //temp1保存高4位变化
KeyPort=0x0f; //再给P3赋值0x0f
temp2=KeyPort; //temp2保存低4位变化
VAL=temp2|temp1; //VAL=高4位+低4位
return VAL; //返回VAL值
}
}
}
else //按键抬起
{
sign=0; //按键自锁标志清0
count=0; //消抖计数清0
}
}
|