1.介绍
按键介绍:
在我们的项目中按键是用来检测某颗按键是否按下,是“短按/长按/连击”在不同模式下,不同的按键有不同的功能;如切换模式,同一模式下切换不同页面、控制指定外设等。
视频讲解:
【按键流程讲解(STM32)】 https://www.bilibili.com/video/BV1k7wCzmEZ9/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
完整的流程图如下:

1.1、按键初始化
使用按键时需先在int main中进行初始化,如图:

接下来便是实际的初始化部分:
1:初始化函数
2:打开开启对应的GPIO时钟
3:把引脚模式配置为上拉输入

对应流程图也是一致的

1.2、开启按键扫描
按键扫描是写到了定时器2的中断服务函数中,每过1ms就扫描一次以免出现按键按下,但是单片机没有采集到信号的情况。

对应的流程图如下:

1.3、键值判定
按键1与按键2的采集逻辑有长按与短按
按键3与按键4的采集逻辑有短按与连击
长按、短按判定逻辑是:当按键按下后,计数器开始计数,当计数值大于消抖值(图中1),就判定为短按(图中2);当计数值大于长按阈值(图中3),就判定为长按(图中4)

对应的代码如下:

连击、短按判定逻辑是:当按键按下后,计数器开始计数,当计数值大于消抖值(图中1),就判定为短按(图中2);当计数值大于连击阈值(图中3),就判定为连击(图中4)

对应的代码如下:

2.补充
2、此流程图为了方便大家理解,为简化版;实际程序运行中这里并不是同时执行,是按照顺序扫描;如:是否为按键1按下,不是的话再继续向下扫描,是否为按键2按下,也不是的话,是否为按键三按下,直到是按键X按下,开始执行按键X的判定逻辑。

2622

被折叠的 条评论
为什么被折叠?



