头文件,bsp_key.h
#define KEY_NUM 2 //按键数量
typedef enum{
KEY1_RELEASE = 0x00,
KEY1_LONGCLICKED,
KEY1_LONGLONG,
KEY1_MULTICLICKED_1,
KEY1_MULTICLICKED_2,
KEY1_MULTICLICKED_3,
KEY1_MULTICLICKED_4,
KEY1_MULTICLICKED_5,
KEY2_RELEASE,
KEY2_LONGCLICKED,
KEY2_LONGLONG,
KEY2_MULTICLICKED_1,
KEY2_MULTICLICKED_2,
KEY2_MULTICLICKED_3,
KEY2_MULTICLICKED_4,
KEY2_MULTICLICKED_5,
};
#define LONG_PRESS_THRESHOLD 1000 //长长按时间
#define IDLE_COUNT_THRESHOLD 200 //空闲时间
#define CLICK_LONG_THRESHOLD 500 //长按时间
#define CLICK_COUNT_MAX 1500
#define CONFIRM_COUNT 25 //消抖时间
typedef struct{
int (*Scan)(void);
void (*Init)(void);
uint16_t KeyCnt;
uint8_t IdleCnt;
uint8_t ClickCnt;
uint8_t LongPressed;
uint8_t State;
}Key_t;
通过修改头文件中的宏定义可以修改按键检测的参数。
源文件,bsp_key.c
定义按键对象
Key_t g_Key_List[KEY_NUM];
初始化代码
/************************************* USER CODE *************************************/
/*
*********************************************************************************************************
* 函 数 名: Key1_Scan
* 功能说明: 扫描按键1的状态
* 形 参: 无
* 返 回 值: 按键1的状态
*********************************************************************************************************
*/
static int Key1_Scan(void)
{
return gpio_get_level(9);
}
/*
*********************************************************************************************************
* 函 数 名: Key2_Scan
* 功能说明: 扫描按键2的状态
* 形 参: 无
* 返 回 值: 按键2的状态
*********************************************************************************************************
*/
static int Key2_Scan(void)
{
return gpio_get_level(2);
}