蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】,蓝桥杯嵌入式学习日记,按键长按、短按与双击详解(STM32 HAL库篇)

马肤

温馨提示:这篇文章已超过452天没有更新,请注意相关的内容是否还可用!

摘要:,,本文介绍了在嵌入式学习中使用STM32微控制器和HAL库实现按键的长按、短按与双击功能。通过三行按键法,详细阐述了不同按键操作的检测和处理方法。这是蓝桥杯嵌入式学习日记的第三部分,对于提高嵌入式系统的交互性能具有重要意义。

查阅相关资料

在进行板子开发之前,首先需要查阅相关资料了解器件连接,从CT117E-M4产品手册中,我们可以明确按键PB0、PB1、PB2、PA0分别对应B1、B2、B3、B4四个按键。

按键抖动

当我们使用这类按键时,由于内部机械触点的弹性,按键按下或松开时会产生一串的抖动,这段时间大约为5~10ms,为了防止按键产生的抖动导致的功能紊乱,我们需要进行消抖处理,这里我选择利用uwTick进行软件延时,实际情况下也可以使用定时器,但不建议使用HAL_Delay函数进行延时。

蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】,蓝桥杯嵌入式学习日记,按键长按、短按与双击详解(STM32 HAL库篇) 第1张

消抖处理的具体实现方法

在进行消抖处理时,我们可以采用软件滤波的方法,具体实现时,可以记录上一次按键的状态和当前按键的状态,如果两次状态相同,则确认按键动作,否则忽略此次按键,这样可以有效地消除按键抖动带来的影响。

程序的编写

1、创建工程

蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】,蓝桥杯嵌入式学习日记,按键长按、短按与双击详解(STM32 HAL库篇) 第2张

通过STM32cubemx进行工程创建,设置完成后生成工程,建议创建key.c和key.h文件,方便后续代码的管理和维护。

2、三行按键法

为了简化代码和提高可读性,我们可以采用宏定义的方式定义按键的读取方式。

蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】,蓝桥杯嵌入式学习日记,按键长按、短按与双击详解(STM32 HAL库篇) 第3张

#define B1 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)
#define B2 HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)
// 以此类推...

我们需要实现按键的读取和消抖处理,可以采用三行按键法来实现:

u8 ReadDate = Key_Flag ^ 0xff;  // 读取按键状态并进行处理
Trg = ReadDate & (ReadDate ^ Cont);  // 提取按键的变化部分
Cont = ReadDate;  // 更新按键状态

在上述代码中,Key_Flag是按键状态的宏定义,通过读取GPIO的状态来得到,通过三行按键法的逻辑处理,我们可以得到按键的实时状态并进行相应的处理。

补充:

蓝桥杯嵌入式学习日记(三)——按键的长按、短按与双击(三行按键法)【STM32】【HAL库】,蓝桥杯嵌入式学习日记,按键长按、短按与双击详解(STM32 HAL库篇) 第4张

我们可以根据按键的状态来实现不同的功能,根据按键的短按、长按、双击等不同的操作来实现不同的功能,这需要我们在程序中添加相应的判断逻辑,根据按键的持续时间、按下次数等来判断具体的操作,并进行相应的处理,具体的实现方式可以根据实际需求进行设计和调整。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码