2 Star 9 Fork 7

Lin / KeyEvent

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

TouchKey

简介

主要将 8bit , 16bit , 32bit , 64bit , 触摸按键信息, 转换成一个 8bit 的按键键值

API

从总线中读取按键

static uint8_t read_touch_key_from_bus(uint8_t SYS_RAM *pData)

  • 参数

    pData : 将 8bit , 16bit , 32bit , 64bit (或是通过其他总线读取) 数据转换成字节数组

  • 返回

    GET_TOUCH_KEY_SUCCESS 或者 GET_TOUCH_KEY_FAIL

获取 按键1 和 按键2 和 按键按下数量

static uint8_t get_touch_key1_and_key2(const uint8_t SYS_RAM *pData, uint8_t SYS_RAM *key1, uint8_t SYS_RAM *key2)

  • 参数

    pData: 按键数据(read_touch_key_from_bus 函数转换后的字节数组)

    key1: 按键1

    key2: 按键2

  • 返回

    按键按下数量(超过3个按键时, 视为3个)

获取按键键值

uint8_t get_touch_key(uint8_t *pkeyValue, uint8_t *pkeyPower)

  • 参数

    pkeyValue:按键键值

    pkeyPower:电源按键状态键值(如果电源键按下时, 该变量等于电源键键值)

  • 返回

    GET_TOUCH_KEY_SUCCESS 或者 GET_TOUCH_KEY_FAIL

按键键值

  • KEY_VAL_NONE (0x00)

    无键值, 没有按键按下

  • KEY_VAL_INVALID (0xFF)

    无效键值, 多个按键按下时, 无法组成组合键

  • KEY_VAL_INVALID_WAIT_UP (0XFE)

    等待组合键释放(滑条除外)

  • 键值小于0xA0

    代表的是滑条的键值(0x10-0x1A ... 0x90-0x9a)

  • 键值大于等于0xA0, 小于0xFE

    代表的是功能按键(可以在这里进行增加所需的功能按键键值)

使用

需要修改处(TouchKey.c):

  1. TODO标签处: /* TODO 根据实际情况修改以下宏定义 */

  2. TODO标签处: /* TODO 根据实际情况修改映射表 */

  3. TODO标签处: /* TODO 通过总线读取按键的时候, 需要在这里实现总线读取 */

    如果是总线读取的话(如IIC), 需要在这里实现所需的总线读取按键通信处理

    将读取到的按键转换成字节数组

修改完上述的情况, 周期性调用(推荐50ms) uint8_t get_touch_key(uint8_t *pkeyValue, uint8_t *pkeyPower)

来获取按键键值。

示例: demo.c 文件中的 void SoftTime_Tick50ms(void)函数(第44行到57行)

KeyEvent

简介

根据 TouchKey生成的按键键值, 来处理按键的长短按键功能

API

初始化(优先调用)

void KeyEvent_Init(void)

创建短按按键

ShortKey_T *KeyEvent_CreateShort(void (*event_cb)(KeyEvent_E), uint8_t key_val)

  • 参数

    event_cb:事件回调函数

    key_val:当前需要创建的按键的按键键值

  • 返回

    短按按键句柄

创建长短按键

LongKey_T *KeyEvent_CreateLong(void (*event_cb)(KeyEvent_E), uint8_t key_val, uint16_t long_start, uint16_t long_hold)

  • 参数

    event_cb:事件回调函数

    key_val:当前需要创建的按键的按键键值

    long_start: 长按开始时间(单位: ms)

    long_hold: 长按保持时间(单位: ms)

  • 返回

    长短按键句柄

短按按键扫描(实现短按按键的功能)

可以发生的事件:KEY_EVENT_DOWNKEY_EVENT_UP

static void KeyEvent_ShortTick(uint8_t key_val)

  • 参数

    key_val: 当前获取到的按键键值

长按按键扫描(实现长短按键的功能)

可以发生的事件:KEY_EVENT_DOWNKEY_EVENT_UPKEY_EVENT_LONG_STARTKEY_EVENT_LONG_HOLDKEY_EVENT_LONG_UP

static void KeyEvent_LongTick(uint8_t key_val)

  • 参数

    key_val: 当前获取到的按键键值

按键扫描(内部调用短按按键扫描和长按按键扫描)

void KeyEvent_Tick(uint8_t key_val)

  • 参数

    key_val: 当前获取到的按键键值

事件类型

  • KEY_EVENT_NONE

  • KEY_EVENT_DOWN

    按下

  • KEY_EVENT_UP

    按下抬起(不触发长按才有) (如果按下期间触碰到另一个键后[键值已经为0xFF], 不会触发该事件)

  • KEY_EVENT_LONG_START

    长按开始

  • KEY_EVENT_LONG_HOLD

    长按保持

  • KEY_EVENT_LONG_UP

    长按抬起

使用

需要修改处(KeyEvent.h):

  1. TODO标签处: /* TODO 根据实际情况修改 */
  2. 初始化KeyEvent_Init
  3. 创建按键 'KeyEvent_CreateShort' 或KeyEvent_CreateLong
  4. 周期性调用(推荐50ms)KeyEvent_Tick

示例: demo.c

MIT License Copyright (c) 2021 Lin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

用于小家电的触摸按键处理: 1: TouchKey 生成按键键值 2: KeyEvent 根据生成的按键键值来处理按键的长短按功能 展开 收起
C
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/Lin_g/key-event.git
git@gitee.com:Lin_g/key-event.git
Lin_g
key-event
KeyEvent
master

搜索帮助