主要将 8bit , 16bit , 32bit , 64bit , 触摸按键信息, 转换成一个 8bit 的按键键值
从总线中读取按键
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):
TODO标签处: /* TODO 根据实际情况修改以下宏定义 */
TODO标签处: /* TODO 根据实际情况修改映射表 */
TODO标签处: /* TODO 通过总线读取按键的时候, 需要在这里实现总线读取 */
如果是总线读取的话(如IIC), 需要在这里实现所需的总线读取按键通信处理
将读取到的按键转换成字节数组
修改完上述的情况, 周期性调用(推荐50ms) uint8_t get_touch_key(uint8_t *pkeyValue, uint8_t *pkeyPower)
来获取按键键值。
示例: demo.c
文件中的 void SoftTime_Tick50ms(void)
函数(第44行到57行)
根据 TouchKey
生成的按键键值, 来处理按键的长短按键功能
初始化(优先调用)
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_DOWN
和 KEY_EVENT_UP
static void KeyEvent_ShortTick(uint8_t key_val)
参数
key_val
: 当前获取到的按键键值
长按按键扫描(实现长短按键的功能)
可以发生的事件:KEY_EVENT_DOWN
和 KEY_EVENT_UP
和 KEY_EVENT_LONG_START
和 KEY_EVENT_LONG_HOLD
和 KEY_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):
KeyEvent_Init
KeyEvent_CreateLong
KeyEvent_Tick
示例: demo.c
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。