docs: 梳理 SPEC LHS114TC-IF03 屏幕规格及 P0.0 电池采样、P2.7 充电检测设计

This commit is contained in:
2026-07-09 14:03:01 +08:00
parent aa484dae65
commit 2208a97fd6
16 changed files with 127 additions and 39 deletions

View File

@@ -70,10 +70,53 @@ void Add_Sensor(u32 addr, u8 type, u8 suffix_idx) {
sensor_list[slot].name_gbk[len++] = '0' + (suffix_idx % 10);
sensor_list[slot].name_gbk[len] = '\0';
// 其余变量赋值并保存数据库
// ...
Save_Database();
}
### 2.5 电池采样与充电状态读取实现
在系统模块中,通过硬件 ADC 通道 8 (P0.0) 和数字 I/O (P2.7) 采集电池状态:
1. **ADC 初始化 (ADC_Init)**
```c
void ADC_Init(void) {
P0M1 |= 0x01; P0M0 &= ~0x01; // P0.0 配置为高阻输入 (模拟输入模式)
ADCCFG = 0x2F; // RESFMT = 1 (右对齐), ADC 时钟配置为 SYSCLK / 2 / 16
ADC_CONTR |= 0x80; // 打开 ADC 电源 (ADC_POWER = 1)
}
```
2. **读取采样数据与电量百分比计算**
```c
u16 Get_ADC_Result(u8 channel) {
ADC_CONTR = 0x80 | channel; // 开启电源并选择通道
_nop_(); _nop_();
ADC_CONTR |= 0x40; // 启动 ADC 转换 (ADC_START = 1)
while (!(ADC_CONTR & 0x20)); // 等待转换完成 (ADC_FLAG)
ADC_CONTR &= ~0x20; // 清除 ADC 标志
return ((u16)ADC_RES << 8) | ADC_RESL; // 返回 12 位 ADC 转换结果
}
u8 Read_Battery_Percent(void) {
u16 adc_val = Get_ADC_Result(8); // 读取通道 8 (P0.0)
// 线性百分比转换3.3V (ADC=1279) 对应 0%, 4.2V (ADC=1628) 对应 100%
if (adc_val <= 1279) {
return 0;
} else if (adc_val >= 1628) {
return 100;
} else {
return (u8)((u32)(adc_val - 1279) * 100 / (1628 - 1279));
}
}
```
3. **充电状态读取**
```c
// P2.7 在 System_Init 时需配置为高阻输入以进行充电状态检测
bit Is_Charging(void) {
return (P2 & (1 << 7)) ? 1 : 0; // 读取 P2.7 引脚高电平状态1 表示 USB 接入
}
```
<!-- Checked and verified with always-on screen and sleep removal changes -->
```