独立按键扫描实现单击、双击、长按、组合等事件,使用FlexibleButton来实现

本文介绍了一种使用FlexibleButton库在STM32H743上实现独立按键扫描的方法,支持单击、双击、长按等多种事件。通过详细代码示例展示了按键初始化、事件回调及测试过程。

编译器平台及例程说明

编译器平台说明

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. 独立按键扫描实现单击、双击、长按、组合等事件,使用FlexibleButton来实现

一、宏定义说明

// 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)


#define XTO_STR(e)                                                        (#e)


typedef enum
{
   
   
    USER_BTN1 = 0,
    USER_BTN2 = 1,
    USER_BTN_MAX
}eUserBtn;

二、变量的定义

static flex_button_t UserButton[USER_BTN_MAX];

/* 按键事件*/
static char * BTN_EVENT_STR[FLEX_BTN_PRESS_NONE + 1] = 
{
   
   
    XTO_STR(PressDown),
    XTO_STR(Click),
    XTO_STR(Double),
    XTO_STR(RepeatClick),
    XTO_STR(ShortStart),
    XTO_STR(ShortEnd),
    XTO_STR(LongStart),
    XTO_STR(LongEnd),
    XTO_STR(LongHold),
    XTO_STR(LongHoldEnd),
    XTO_STR(BtnEventMax),
    XTO_STR(BtnEventNone),
};


/* 按键ID字符串 */
static char * BTN_ID_STR[USER_BTN_MAX] = 
{
   
   
    XTO_STR(BTN1),
    XTO_STR(BTN2),
};

三、读取按键状态

/* 读取按键状态 */
static u8 ubRead_Button_Value(void * arg)
{
   
   
    flex_button_t * btn = (flex_button_t *)arg;

    switch(btn->id)
    {
   
   
        case USER_BTN1: return Read_Key1_State() ;
        case USER_BTN2: return Read_Key2_State() ;
        default: break;
    }

    return 0;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值