您的位置:首页 > 其它

关于单片机按键问题总结

2016-04-07 09:38 351 查看
最近看了一本书《8051单片机创新教程》,这本书比大学课本写得好,在大学的课本中,我们常见的按键扫描程序如下:

unsinged char KeyScan(void)
{
unsigned char KeyValue=0;
if(KEY_IO != 0xFF) //检测到有按键按下
{
DelayNms(20); //延时 20 毫秒(严重影响单片机的运行效率)
if(KEY_IO != 0xFF)//确认按键按下
{
switch(KEY_IO)
{
case 0xFE: KeyValue=1;break;
case 0xFD: KeyValue=2;break;
default : KeyValue=0;break;
}
}
}
return KeyValue;
}


在现实中,论坛上看到以下代码,我们不妨这样,没有用延时,运行效率大大提高!单片机实时性能显著提高!


//读取按键
uchar read_key()
{
static int Key_on_off = 0 ;//按键自锁变量
uchar  num , temp ;
num = P2 ;
num &= 0xf0 ; 	//将低四位清0
if(num != 0xf0)
{
if(Key_on_off = 0)
{
Key_on_off = 1 ;
switch(num)
{
//返回按键的编码
case 0xe0 : temp = 1 ; break ;
case 0xd0 : temp = 2 ; break ;
case 0xb0 : temp = 3 ; break ;
case 0x70 : temp = 4 ; break ;
}
}
}
else
Key_on_off = 0 ;
return temp  ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: