Files
stc32g128k/Docs/50_module-breakdown/mod-key.md

27 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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