单片机--按键定时器检测:短按、长按

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28877125/article/details/85158323

 通过使用定时器计数的方法来分辨按键的:短按、长按

  1. 检测到引脚被拉低:按键按下为低电平,没有按下为高电平
  2. 延时10毫秒:滤波
  3. 引脚还是被拉低:确定按键被按下
  4. 设置按键按下标志
  5. 开启定时器,开始计数:定时器中有一个全局变量用于记录计数值
  6. 直到引脚被拉高:按键被释放将为高电平
  7. 关闭定时器
  8. 检测按键按下标志
  9. 检测定时器按键检测时间全局变量是否大于某个值,一般为200ms
  10. 大于则为长按,否则为短按
uint8_t ylf_key_scan(void)
{
	static uint8_t press_flag;

	if(!KEY_PIN)
	{
		scs_delay_ms(10);
		if (!KEY_PIN)
		{
			press_flag = 1;
			TR0 = 1;           // 定时器0开始计数
			while(!KEY_PIN);
			TR0 = 0;           // 定时器0计数结束
		}
	}
	if (press_flag)
	{
		if (KEY_COUNT >= 200)
		{	
			KEY_COUNT = 0;
			press_flag = 0;			
			return KEY_LONG_PRESSED;

		} else {		
			KEY_COUNT = 0;
			press_flag = 0;	
			return KEY_SINGLE_PRESSED;
		}
	}
	return KEY_DEFAULT_STATUS;
}

猜你喜欢

转载自blog.csdn.net/qq_28877125/article/details/85158323
今日推荐