关于单片机按键问题总结

简介: 最近看了一本书《8051单片机创新教程》,这本书比大学课本写得好,在大学的课本中,我们常见的按键扫描程序如下: unsinged char KeyScan(void){ unsigned char KeyValue=0; if(KEY_IO != 0xFF) //检测到有按键按下...

最近看了一本书《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  ;
}



目录
相关文章
【单片机】按键声光报警实验(蜂鸣器)
【单片机】按键声光报警实验(蜂鸣器)
577 0
|
3月前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
253 1
|
3月前
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
|
3月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
|
3月前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
6月前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
单片机按键的使用
单片机按键的使用
165 0

热门文章

最新文章