STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作(包含消抖算法)

   日期:2020-12-18     浏览:140    评论:0    
核心提示:这里写目录标题

STM32F103基于HAL库使用SysTick_Handler实现稳定读取按键按下动作(包含消抖算法)

  • SysTick_Handler介绍
  • 程序介绍

今天我给大家分享一个基于 SysTick_Handler中断实现的按键扫描

SysTick_Handler介绍

SysTick_HandlerHAL库配置的stmf103芯片里运行时会每隔1ms被调用的一个回调函数,所以我在这个回调函数里面写了按键读取的程序Key_Scan();,这个函数每隔1ms会在回调函数里面被调用一次

按键接法是这样的,自然状态下引脚读取时高电平按键按下时引脚读取时低电平

程序介绍

程序流程图如图所示:

这个程序判断按键按下需要2个条件:

  • 按键持续按下时间超过32ms
  • 按键在非按下状态

那这个程序是怎么实现消抖的呢?很简单,按键弹起的时候一直都是高电平,程序需要读到连续的32个毫秒的高电平才会判断为按键按下,中间哪怕有一个低电平的抖动,sw1Count计数器都会清零,重新开始32毫秒的计数,因此实现了消抖,而且程序在判断到了按键按下之后pushFlag1置1,这样在按键持续按下的时候就不会识别为多个按键按下的操作。

uint8_t sw1Count;
uint8_t pushFlag1;
void Key_Scan(void)
{ 
         
	if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_RESET )
	{ 
		 sw1Count++;                         //SW1键按下,计数sw1Count加1
		 if(sw1Count>=32)                    //1MS中断一次,sw1Count大于等于32,即按键已按下32ms
		 { 
				if(pushFlag1==0)                //判断有没有重按键,1为有,0为没有
				{ 
					swState1=1;                       //设置按键标志 HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,1);
					sw1Count=0;
					pushFlag1=1;                     //设置重按键标志
				}
				else
					sw1Count=0;
		 }
		 else
				swState1=0;
	}
	else                                            //无按键按下
	{ 
		 sw1Count=0;                           //清零sw1Count
		 swState1=0;                            //清除按键标志
		 pushFlag1=0;                          //清除重按键标志
	}
}

一键三连,谢谢铁汁们=

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服