独立按键扫描实现单击、长按、组合单击事件(可重注册或取消按键事件)

本文介绍了一种基于STM32H743芯片的独立按键扫描实现方法,支持单击、长按及组合单击事件。文中详细讲解了编译器平台配置、宏定义、变量定义、GPIO初始化、按键扫描处理等关键步骤。

编译器平台及例程说明

编译器平台说明

1. Toolchain : MDK-ARM Community  Version: 5.30.0.0(Kile V5)
2. Encoding  : Encode in UTF-8 without signature
3. Device Specific Packs : Keil.STM32H7xx_DFP.2.7.0.pack
4. Preprocessor Symbols Define : USE_HAL_DRIVER, STM32H743xx
    USE_HAL_DRIVER : 允许使用HAL库驱动
    STM32H743xx    : STM32H743xx芯片
5. Chip Type : STM32H743VIT6, Flash:2MByte, ROM:1MByte
6. 在stm32h7xx_hal_conf.h文件中HSE_VALUE为外部高速振荡器,默认25MHZ。此值必须与硬件保持一致。

例程说明

1. 独立按键扫描实现单击、长按、组合单击事件(可重注册或取消按键事件)

一、宏定义说明

// PE3  -- User Key1 -- 用户按键1
// PC5  -- User Key2 -- 用户按键2
#define USER_KEY1_PIN                                               USER_KEY1_Pin                             
#define USER_KEY2_PIN                                               USER_KEY2_Pin                                    
#define Read_Key1_State()                                           HAL_GPIO_ReadPin(USER_KEY1_GPIO_Port, USER_KEY1_PIN)
#define Read_Key2_State()                                           HAL_GPIO_ReadPin(USER_KEY2_GPIO_Port, USER_KEY2_PIN)


typedef void (* KeyFunc)(void);


#define KEY_VALID_COUNT_MAX                                         (220)    /* 按键有效次数最大值 */
#define KEY_NONE_ACTION                                             (0x0003) /* 两个按键 */

#define KEY_COUNT_CLICK                                             (10) /* 按键单击的有效次数 */
#define KEY_COUNT_LONG_PRESS                                        (80) /* 按键长按的有效次数 */


#define LONG_PRESS(key)                                             ((key) | 0x8000)
#define IS_KEY_LONG_PRESS(key , code)                               (((code) & 0x8000) && ((key) == ((code) & 0x7FFF)))


typedef enum
{
   
   
    KEY_USER1_CLICK_EVENT      = 0, /* 按键1单击事件 */
    KEY_USER2_CLICK_EVENT      = 1, /* 按键2单击事件 */
    KEY_USER_CLICK_EVENT       = 2, /* 按键12 组合单击事件 */
    KEY_USER1_LONG_PRESS_EVENT = 3, /* 按键1长按事件 */
    KEY_USER2_LONG_PRESS_EVENT = 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值