STM—长短按键高效算法(可控制长按时间)

                                  算法在一次项目中产生。      
         本算法根据现有算法进行改进,思路依照现有算法,但是对现有算法进行了改进提升。
                                     下面将一一介绍。

原有代码展示


void Key_Scan(void)
{
	if(KEY == 0) //有按键按下
		{
				key_sum++;
				if(key_sum == 1) // 短按
				{
	                 //此处填写短按按键操作
				}
					
				if(key_sum == 16) // 长按 快速增加 长按最低时间为16x50=800ms
				{
				     //此处填写长按按键操作
					key_sum = 15;
				}
		}
	else
		{
				key_sum = 0;
		}
}

Systic部分


SysTick_Config(SystemCoreClock/1000);

void SysTick_Handler(void)
{

	if(++key_sum == 50) // 每50ms进行上面的按键检测
	{
		key_sum = 0;
		KEY_Flag = 1;
	}
	
}

现有代码的缺点说明

以上Key_Scan()函数可以看出,如果想进行按键长按操作,那么短按操作就一定也会执行

改进现有代码的思路

根据以上,可以把检测k_sum数值放到else里,具体如下。

改进代码展示

此处分为两种情况:

其一:需要长按操作即使反馈,即使检测。例如:长按按键时,数字快速增加。

void Key_Scan(void)
{
  if(KEY == 0)  //有按键按下
	{ 
		k_sum++;   //依据Systic进行计数
	
		if(k_sum==16)  //按下时间到达16x50=800ms 为长按操作
		{
          //此处填写长按按键操作代码
          k_sum=15;//将计数减一,以便下次执行长按操作
		}
    }
	
  else
    {
		if((k_sum<15)&&(k_sum!=0))  //当按下时间未到800ms时,跳出if进入else,对k_sum进行检测,如果不为0,则进行短按操作。
		   {
			//此处填写短按按键代码操作
		   }
		  k_sum=0;
	}
}

其二:不需要长按按键及时反馈,可以等松手后再反馈。例如:长按切换LCD显示界面

void Key_Scan(void)
{
	if(KEY == 0)  //按键按下
  	{ 
		k_sum++;
	} 
	else  //松手后对按下时间进行检测
	{			
		if((k_sum<16)&&(k_sum!=0))  //按键时间未到达16x50=800ms 且不为0  短按操作
			{
				//此处填写短按按键操作代码
			}
			if(k_sum>=16)  //按键时间到达16x50=800ms 长按操作
			{
				//此处填写长按按键操作代码
			}		
	 k_sum=0; //只进行一次检测,将计数值清零
	}
	
}

完结,欢迎评论区交流。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值