# 按键驱动框架 **Repository Path**: mymcu/key-driver-framework ## Basic Information - **Project Name**: 按键驱动框架 - **Description**: 这是一个按键驱动框架例程,支持短按、长按、一直按连续触发、双击4种键值。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2023-12-27 - **Last Updated**: 2023-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 按键驱动框架 #### 介绍 这是一个按键驱动框架例程,支持短按、长按、一直按连续触发、双击4种键值。 该框架提供唯一的按键扫描接口key_scan(),按键的消抖,短按、长按、连续触发、双击的判断等处理,均由框架内部处理。用户只需要通过定时(10ms)调用该接口来获取按键值。 #### 使用说明 1.根据硬件,修改get_keys_input()函数。 【特别注意】需要把原始输入,转换为用1表示相应按键按下。 2.修改宏定义KEYS_NUM_MAX,支持多少种硬件输入值就取多少。 如3个独立按键 + 一个组合按键(K1+K2同时按),则取KEYS_NUM_MAX=4。 3.修改keys_info[]按键信息表。 每一项的含义见key_info_t结构体定义。 如{KEY1_INPUT_VALUE, KEY1_SHORT, KEY1_LONG, KEY_NONE, KEY1_DOUBLE, 200},表示: * 硬件输入为KEY1_INPUT_VALUE, * 短按键值为KEY1_SHORT, * 支持长按,键值为KEY1_LONG, * 不支持一直按连续触发,所以取值KEY_NONE, * 支持双击,键值为KEY1_DOUBLE, * 长按有效时间判定长度为200个扫描周期(即长按约2秒返回长按键值), 【注意1:短按时间、连续按的间隔时间,这两个参数由宏定义SHORT_KEY_DELAY,CNTINUS_KEY_DELAY决定。】 【注意2:双击的两次按下的时间间隔,由宏定义DOUBLE_KEY_DELAY决定。】 【注意3:支持双击的按键,短按键值返回的时间比不支持的延迟DOUBLE_KEY_DELAY*10ms。】 4.每10ms在定时中断中,把key.scan_flag置1。 5.在主循环中,按如下方式调用扫描函数。 ```c if (key.scan_flag) { key_val = key_scan(); // key_scan()中会清零key.scan_flag if (KEY_NONE != key_val) { printf("KEY VALUE = %d.\r\n", key_val); } } ``` The End. 2021-11-26.