# xkey **Repository Path**: eric_pyt/xkey ## Basic Information - **Project Name**: xkey - **Description**: 一个简单灵活的事件型按键代码 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-07 - **Last Updated**: 2026-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xkey #### 介绍 一个简单灵活的事件型异步按键代码 #### 软件架构 功能描述: ```C /************************************************************************ * 按键事件: * XKEY_DOWN XKEY_UP XKEY_CLICK XKEY_LONG1 XKEY_LONG2 XKEY_CLICK_DOUBLE XKEY_REPEAT XKEY_IDEL * 按键逻辑: * 1,按下按键,触发 XKEY_DOWN * 2,松开按键,触发 XKEY_UP * 3,按下按键,并松开,持续时长达到 XKEY_MS_SHORT_MIN ,触发 XKEY_CLICK * 4,XKEY_MS_SHORT_MAX 时间内,多次触发按键,触发 XKEY_CLICK_DOUBLE * 5,按键按下,持续时长达到 XKEY_MS_LONG1 后,松开触发 XKEY_LONG1 * 6,按键按下,持续时长达到 XKEY_MS_LONG2 后,松开触发 XKEY_LONG2 * 7,按键按下,持续时长达到 XKEY_MS_REPEAT_HOLD后,触发重复触发,间隔XKEY_REPEAT_INTERVAL ,触发 XKEY_REPEAT * 9,按键释放,持续时长达到 XKEY_MS_IDEL 后,触发 XKEY_IDEL ************************************************************************/ ``` 实现按键事件: ``` typedef enum { XKEY_NONE = 0, // 无按键 XKEY_DOWN = 1, // 按下 XKEY_UP = 2, // 释放 XKEY_CLICK = 3, // 单击 XKEY_LONG1 = 4, // 长按1 XKEY_LONG2 = 5, // 长按2 XKEY_CLICK_DOUBLE = 6, // 双击 XKEY_REPEAT = 7, // 重复触发 XKEY_IDEL = 8, // 空闲 XKEY_MAX = 9 } xkey_event_t; ``` #### 使用示例 ``` uint8_t key1_read(void) { GPIO_PinState pin = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_2); retrun pin; } void key_func(xkey_event_t event) { // xxxxx } void main(void) { static xkey_t key1 = {0}; xkey_init(&key1, key1_read, XKEY_ACTIVE_LOW); xkey_bind(&key1, XKEY_DOWN, key_func); xkey_bind(&key1, XKEY_UP, key_func); xkey_bind(&key1, XKEY_CLICK, key_func); xkey_bind(&key1, XKEY_LONG1, key_func); xkey_bind(&key1, XKEY_LONG2, key_func); xkey_bind(&key1, XKEY_CLICK_DOUBLE, key_func); xkey_bind(&key1, XKEY_REPEAT, key_func); xkey_bind(&key1, XKEY_IDEL, key_func); while(1){ delay(20); xkey_loop(); } } ```