独立按键扫描实现单击、双击、长按、组合等事件,使用FlexibleButton来实现
编译器平台及例程说明
编译器平台说明
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来实现
一、宏定义说明
#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),
};
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;