STM32按键长按、短按实现不同功能函数

STM32按键长按、短按实现不同功能函数
这里的函数接口只需要输入GIPOX、GPIO_Pin_X(这里X是根据你的按键的硬件电路来的),我这里长按是亮红灯,短按亮绿灯,在使用过程中,可以替换为其他功能,比如长按翻下一页,短按翻上一页等功能。
这段代码适用于只有一个按键,但是却可以实现两个功能的需求。

 /*
 * 函数名:Key_Scan
 * 描述  :检测是长按or短按函数,长按执行LED_RED函数,短按执行LED_GREEN
 * 输入  :GPIOx:x 可以是 A,B,C,D或者 E
 *		     GPIO_Pin:待读取的端口位 	
 * 输出  :KEY_OFF(没按下按键)、KEY_ON(按下按键)
 */
void Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			
	/*检测是否有按键按下 */
	if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
	{	 
		Delay_ms(1000);
		if (GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON) 
		{  
     while (GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)		LED_RED;	} 
	  else   { LED_GREEN;}
    }
}

原理:查询方式进入按键检测函数,只有按下按键了,才能进入本函数,1秒后判断按键是否还是按下的状态,如果是判定为长按,如果不是判定为短按。这里的1秒时间,是我随意设定的,可以根据实际需求调整。
注意:查询方式扫描按键值是有弊端的,只有按下去按键时,CPU刚好处理到这里时,才能进入到这个函数。在实际使用中,可以将这个函数放到按键的中断处理函数。这样就完美了,可以按下去立刻执行按键函数,立刻判断是否为长按。(tips:如果用了滴答定时器进行毫秒延时,需要把滴答定时器的延时优先级调至最高即可,加入这句话到mian即可:NVIC_SetPriority (SysTick_IRQn, 1;)

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值