2026-07-10 09:17:27 +08:00
|
|
|
|
# 模块拆分 - 按键输入与事件产生 (Docs/50_module-breakdown/mod-key.md)
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
2026-07-10 09:17:27 +08:00
|
|
|
|
本模块描述物理按键输入引脚的检测、消抖、长短按事件封包,以及其作为事件产生者向事件队列投递的过程。
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
|
|
|
|
|
## 1. 模块职责说明
|
|
|
|
|
|
|
|
|
|
|
|
* **职责范围**:
|
2026-07-10 09:17:27 +08:00
|
|
|
|
1. **事件产生者 (Event Producer)**:物理按键 `KEY_UP` (P2.0), `KEY_DOWN` (P3.6), `KEY_CONFIRM` (P3.7), `KEY_SOS` (P2.3) 被按下触发低电平,按键模块负责将物理信号翻译为 `KeyEvent` 事件,并**推送到事件队列**中。
|
2026-07-10 10:04:40 +08:00
|
|
|
|
2. **移位消抖**:在 Timer1 10ms 中断分频中读取 IO 状态,连续 3 次检测一致则确认电平状态,过滤物理抖动。
|
|
|
|
|
|
3. **推入事件队列**:当确认有物理键沿跳变时,调用 `Event_Queue_Push()` 将对应的 `KeyEvent` 压入独立的事件队列缓冲区中,避免因主逻辑繁忙丢失按键。
|
2026-07-10 09:17:27 +08:00
|
|
|
|
4. **长短按时序**:确认键长按 3 秒产生 `KEY_CONFIRM_LONG`,▼ 键长按 2 秒产生 `KEY_DOWN_LONG`,SOS 键按下即刻产生最高优先级的 `KEY_SOS_ACTIVE` 抢占求救事件。
|
2026-07-09 18:42:00 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
2026-07-10 09:17:27 +08:00
|
|
|
|
## 2. 接口与函数说明
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
2026-07-10 09:17:27 +08:00
|
|
|
|
* `void Key_Init(void)`:将 Pin 19, 20, 21, 24 配置为高阻输入并开启内部上拉电阻 (`P3PU |= 0xC0`, `P2PU |= 0x09`)。
|
2026-07-09 10:31:36 +08:00
|
|
|
|
* `void Key_Scan_Process(void)`:
|
2026-07-10 09:17:27 +08:00
|
|
|
|
在 Timer1 的 10ms 定时周期中回调。
|
|
|
|
|
|
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_CONFIRM`, `KEY_SOS` 引脚。
|
|
|
|
|
|
* 累加按键维持计数器以判定长按与短按。
|
|
|
|
|
|
* 将结果转换为 `KeyEvent` 传入事件队列。
|
2026-07-10 10:04:40 +08:00
|
|
|
|
* `bit Event_Queue_Push(KeyEvent evt)`:将产生的按键事件压入系统事件环形队列。若溢出返回 0。
|
|
|
|
|
|
* `KeyEvent Event_Queue_Pop(void)`:分发循环调用该接口读出排队事件。若空返回 `KEY_EVENT_NONE`。
|
2026-07-09 11:03:18 +08:00
|
|
|
|
|
2026-07-09 17:42:55 +08:00
|
|
|
|
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->
|