docs: 移除低功耗待机及屏幕休眠设计,改为竖屏常显与全时射频监听
This commit is contained in:
@@ -76,7 +76,7 @@ void Key_Scan_Process(void) {
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Checked and verified with 7 sensor types and manual suffix selection changes -->
|
||||
<!-- Checked and verified with always-on screen and sleep removal changes -->
|
||||
|
||||
### 2.2 事件异步读取与清除
|
||||
主循环在其周期内轮询 `key_event_buf`。一旦发现其非 `KEY_EVENT_NONE`,拷贝并立即重置该缓冲区为 `KEY_EVENT_NONE` 以防止重复触发:
|
||||
|
||||
@@ -96,5 +96,7 @@ void UI_ShowPairConfirmPage(u8 type, u8 selected_suffix) {
|
||||
num_buf[8] = '\0';
|
||||
LCD_ShowStringCentered(165, num_buf, COLOR_CYAN, COLOR_BLACK);
|
||||
}
|
||||
|
||||
<!-- Checked and verified with always-on screen and sleep removal changes -->
|
||||
```
|
||||
```
|
||||
|
||||
@@ -1,58 +1,30 @@
|
||||
# 编码实现 - 低功耗电源管理 (Docs/60_coding/mod-power.md)
|
||||
# 编码实现 - 电源管理与常亮控制 (Docs/60_coding/mod-power.md)
|
||||
|
||||
本文件对应低功耗待机与外部中断唤醒的具体编码实现细节。
|
||||
本文件对应取消低功耗休眠、保持屏幕常亮及系统全时监测的具体编码实现。
|
||||
|
||||
## 1. 对应代码源文件
|
||||
|
||||
* [App/main.c](file:///c:/workfile/105/stc32g12k128/App/main.c) (休眠控制、外部中断初始化与服务函数)
|
||||
* [App/main.c](file:///c:/workfile/105/stc32g12k128/App/main.c) (初始化供电配置)
|
||||
|
||||
## 2. 关键代码片段与逻辑实现
|
||||
|
||||
### 2.1 屏幕休眠命令与供电切断
|
||||
在待机检测到达 10秒超时后,调用进入睡眠流程:
|
||||
### 2.1 供电引脚常使能
|
||||
在系统初始化阶段,配置 `SGM_CTRL`(控制屏和背光供电的引脚)为推挽输出模式,并输出高电平:
|
||||
```c
|
||||
void Enter_Deep_Sleep(void) {
|
||||
// 1. 发送屏幕休眠指令 (Sleep In)
|
||||
LCD_WriteCmd(0x10);
|
||||
Delay_ms(120); // 必须等待 120ms 供屏幕电容放电
|
||||
void Power_Init(void) {
|
||||
// P1.0 (SGM_CTRL) 配置为推挽输出
|
||||
P1M1 &= ~0x01;
|
||||
P1M0 |= 0x01;
|
||||
|
||||
// 2. 切断 LCD 供电与背光
|
||||
SGM_CTRL = 0;
|
||||
|
||||
// 3. 配置 KEY 端口的中断触发(配置为下降沿触发)
|
||||
P0IM0 = 0x00; // 下降沿
|
||||
P0IM1 = 0x00;
|
||||
P0INTE = 0x3E; // 开启 P0.1(UP), P0.2(SOS1), P0.3(DOWN), P0.4(CONFIRM), P0.5(SOS2) 的端口中断 (0011 1110)
|
||||
|
||||
// 4. 调用单片机 PD 指令挂起主时钟
|
||||
PCON |= 0x02; // PD = 1
|
||||
_nop_();
|
||||
_nop_();
|
||||
// 拉高引脚,开启 LCD 背光与电平供电
|
||||
SGM_CTRL = 1;
|
||||
}
|
||||
```
|
||||
|
||||
### 2.2 端口中断唤醒与显示重建
|
||||
当任意按键被按下(P0.1~P0.5 电平下降沿跳变),触发外部端口中断,CPU 被唤醒并从停机处继续执行:
|
||||
```c
|
||||
void Port0_Isr(void) interrupt 37 {
|
||||
u8 int_src = P0INTF;
|
||||
P0INTF = 0x00; // 清除中断标志位
|
||||
|
||||
if (int_src & 0x3E) { // 检查是否是 5 个按键引发的唤醒
|
||||
// 1. 恢复 LCD 背光与供电
|
||||
SGM_CTRL = 1;
|
||||
Delay_ms(20); // 等待供电稳定
|
||||
|
||||
// 2. 发送唤醒屏幕指令 (Sleep Out)
|
||||
LCD_WriteCmd(0x11);
|
||||
Delay_ms(120);
|
||||
|
||||
// 3. 恢复工作状态与屏幕刷新
|
||||
current_state = STATE_NORMAL;
|
||||
clock_updated = 1;
|
||||
}
|
||||
}
|
||||
```
|
||||
### 2.2 移除睡眠超时与休眠指令
|
||||
在主循环事件分发中,不再轮询待机时间累加器,也不再调用休眠流程:
|
||||
* **移除** `Enter_Deep_Sleep` 函数。
|
||||
* **移除** 端口 P0 的引脚中断设置(`P0INTE` 等)及 `PD` 停机指令。
|
||||
* 手环时刻保持主频运转,Timer 1 中断不断累加,`EV1527_Decode` 全时监听射频,随时处理防区报警和 SOS 求救触发。
|
||||
|
||||
<!-- Checked and verified with 7 sensor types and manual suffix selection changes -->
|
||||
通过中断直接退出 `PD` 模式,恢复手环的常规时钟显示。
|
||||
|
||||
@@ -37,4 +37,4 @@ void EV1527_Transmit(u32 addr, u8 data_code) {
|
||||
* **绑定对码**:当用户触发对码绑定时,传入 `addr = bracelet_factory_id`,`data_code = 0x01`。
|
||||
* **主动 SOS 警报**:当触发主动 SOS 时,主状态机在 `STATE_SOS_EMITTED` 下定期以时间片的形式调用此函数,传入 `addr = bracelet_factory_id`,`data_code = 0x08`(即二进制 `1000`)。
|
||||
|
||||
<!-- Checked and verified with 7 sensor types and manual suffix selection changes -->
|
||||
<!-- Checked and verified with always-on screen and sleep removal changes -->
|
||||
|
||||
@@ -74,4 +74,6 @@ void Add_Sensor(u32 addr, u8 type, u8 suffix_idx) {
|
||||
// ...
|
||||
Save_Database();
|
||||
}
|
||||
|
||||
<!-- Checked and verified with always-on screen and sleep removal changes -->
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user