温馨提示:这篇文章已超过452天没有更新,请注意相关的内容是否还可用!
摘要:,,本文介绍了在嵌入式学习中使用STM32微控制器和HAL库实现按键的长按、短按与双击功能。通过三行按键法,详细阐述了不同按键操作的检测和处理方法。这是蓝桥杯嵌入式学习日记的第三部分,对于提高嵌入式系统的交互性能具有重要意义。
查阅相关资料
在进行板子开发之前,首先需要查阅相关资料了解器件连接,从CT117E-M4产品手册中,我们可以明确按键PB0、PB1、PB2、PA0分别对应B1、B2、B3、B4四个按键。
按键抖动
当我们使用这类按键时,由于内部机械触点的弹性,按键按下或松开时会产生一串的抖动,这段时间大约为5~10ms,为了防止按键产生的抖动导致的功能紊乱,我们需要进行消抖处理,这里我选择利用uwTick进行软件延时,实际情况下也可以使用定时器,但不建议使用HAL_Delay函数进行延时。
消抖处理的具体实现方法
在进行消抖处理时,我们可以采用软件滤波的方法,具体实现时,可以记录上一次按键的状态和当前按键的状态,如果两次状态相同,则确认按键动作,否则忽略此次按键,这样可以有效地消除按键抖动带来的影响。
程序的编写
1、创建工程
通过STM32cubemx进行工程创建,设置完成后生成工程,建议创建key.c和key.h文件,方便后续代码的管理和维护。
2、三行按键法
为了简化代码和提高可读性,我们可以采用宏定义的方式定义按键的读取方式。
#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的状态来得到,通过三行按键法的逻辑处理,我们可以得到按键的实时状态并进行相应的处理。
补充:
我们可以根据按键的状态来实现不同的功能,根据按键的短按、长按、双击等不同的操作来实现不同的功能,这需要我们在程序中添加相应的判断逻辑,根据按键的持续时间、按下次数等来判断具体的操作,并进行相应的处理,具体的实现方式可以根据实际需求进行设计和调整。
还没有评论,来说两句吧...