62 lines
4.9 KiB
Markdown
62 lines
4.9 KiB
Markdown
# STC32G 手环项目工程与功能实现 Walkthrough
|
||
|
||
本项目完成了手环核心交互逻辑与状态机的全部实现。所有代码已完全用中文进行行级注释,且在 Keil C251 下编译成功(0 Errors)。
|
||
|
||
## 实现功能摘要
|
||
|
||
1. **自适应射频解码兼容性**:
|
||
* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制(高电平50~2500us,低电平1500~60000us),通过低/高电平比例(15~48倍,基准为31倍)自动识别 EV1527 帧并解析数据。
|
||
* 优化串口调试输出,避免大量多行打印造成的 CPU 阻塞。
|
||
|
||
2. **严格匹配要求的按键与事件交互逻辑**:
|
||
* **进入配对菜单**:在待机模式下,同时长按 `▲`(上键)+ `▼`(下键) 3秒,进入传感器类型选择菜单(无震动与LED闪烁,保持菜单展示)。
|
||
* **进入对码搜索 (Pair Wait)**:在菜单中选择好类型后,短按 `SOS` 确认,此时触发 1 次 100ms 短振确认,且 LED 开启白色快闪(3Hz),进入雷达扫描信号接收。
|
||
* **主动呼救 (Emit SOS)**:在待机模式下,短按 `SOS` 键,立刻切入求救模式并开始向外循环发射 433MHz 警报信号。
|
||
* **IPC 对码绑定**:在待机模式下,长按 `SOS` 键 5秒,显示 BINDING IPC 页面,向外发射 1 次 433MHz 绑定信号(数据码为 0x01),维持 2 秒后自动返回待机。
|
||
* **解除求救模式**:在求救模式下,长按任意一个按键(UP、DOWN 或 SOS),即可主动解除警报退回时钟待机。
|
||
|
||
3. **不接收/解析他人 SOS 广播**:
|
||
* 手环只对已经配对存储在内部数据库(门磁、PIR、烟感、燃气、水浸)的传感器 ID 触发报警。
|
||
* 防区轮询解码时严格过滤并排除 SOS 信号的被动接收,防止被其他设备的 SOS 广播误触发。
|
||
|
||
4. **各传感器特定声光电反射与对码状态**:
|
||
* **对码流程**:
|
||
* 对码中:LED 维持 **白色快闪 (3Hz)**(R+G+B 全开闪烁)。
|
||
* 对码成功:屏幕显示 PAIR SUCCESS,触发 **强力长振 1 次 (400ms)**,并且 LED **绿色常亮 2 秒**。
|
||
* 对码失败/超时:双击快速短振 (100ms + 100ms),LED **红色快闪 3 次**。
|
||
* **传感器报警触发模式** (5秒循环周期):
|
||
* **门磁**:LED 红色常亮,马达 1 次短振 300ms。
|
||
* **PIR 人体感应**:LED 黄色(R+G 混色),马达 2 次短振 300ms (间隔 200ms)。
|
||
* **烟雾**:LED 绿色,马达 3 次短振 200ms (间隔 150ms)。
|
||
* **气体**:LED 紫色(R+B 混色),马达 4 次短振 200ms (间隔 100ms)。
|
||
* **水浸**:LED 黄色(R+G 混色),马达 2 次长振 600ms (间隔 300ms)。
|
||
* **手环主动 SOS 求救模式**:
|
||
* LED **红色极速闪烁 (5Hz)**。
|
||
* 马达 **持续 1200ms 循环长振** (振动 1000ms,静止 200ms 循环)。
|
||
|
||
5. **电池百分号显示修复与坐标复原**:
|
||
* **字模基线对齐**:将 `%` 字符(0x25)的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。
|
||
* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。
|
||
|
||
6. **对码捕获卡顿 Bug 修复**:
|
||
* 修复了 `while(1)` 循环开头无条件执行 `state_changed = 0` 导致在 Section 4 异步检测到射频匹配信号跳入 `STATE_PAIR_CONFIRM` 后重绘标记被强行抹除、屏幕始终卡死在搜索雷达页面的 Bug。现在已改在重绘判定内部重置,检测到对码信号即可瞬间跳转至“捕获成功”确认页。
|
||
|
||
## 仿真模式扩展说明
|
||
|
||
为了支持无物理元件调试,串口输入指令集已同步扩展:
|
||
* **模拟组合按键**:串口发送 **`c`** 字符,模拟同时长按 `▲` + `▼` 按键 3 秒进入配对菜单。
|
||
* **模拟确认搜索**:在菜单页下发送 **`s`**,模拟按下 SOS 键,触发 100ms 短振与白灯快闪,进入对码搜索(雷达显示)。
|
||
* **模拟按键解除**:在求救模式下,发送 **`U`**、**`D`** 或 **`S`**(代表长按按键),即可解除 SOS 并退回时钟。
|
||
* **模拟切换系统布防状态**(用于测试普通防区的触发):
|
||
* 发送 **`1`**:强制系统进入 **NORMAL** 撤防/常态模式(门磁/PIR 触发时会被忽略,烟感/水浸/燃气仍可触发)。
|
||
* 发送 **`2`**:强制系统进入 **ARMED** 布防模式(门磁/PIR 此时被触发会立刻报警)。
|
||
* 发送 **`3`**:强制系统进入 **DISARMED** 撤防模式。
|
||
|
||
## 编译结果
|
||
|
||
* **编译器**:Keil C251 V5.60.0.0
|
||
* **编译输出目标**:`Build\wristband.hex`
|
||
* **Errors**:0
|
||
* **Warnings**:2
|
||
* **Program Size**:data=104.1, edata+hdata=351, xdata=352, const=1395, code=13552
|