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

@@ -10,12 +10,15 @@
## 2. 关键代码片段与逻辑实现
### 2.1 局部窗口设置 (X轴偏移量修正)
`lcd.c` 中配置窗口时,需要向 X 轴坐标加上 4 像素偏差:
### 2.1 局部窗口设置 (X/Y轴偏移量修正)
`lcd.c` 中配置窗口时,需要将坐标对齐到 ST7789V 在 135x240 面板下的实际 GRAM 范围,加入 X 轴 52 像素、Y 轴 40 像素偏差:
```c
void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2) {
x1 += 4;
x2 += 4;
x1 += 52;
x2 += 52;
y1 += 40;
y2 += 40;
LCD_WriteCmd(0x2A); // Column Address Set
LCD_WriteData(x1 >> 8);
LCD_WriteData(x1 & 0xFF);
@@ -30,15 +33,48 @@ void LCD_SetWindow(u16 x1, u16 y1, u16 x2, u16 y2) {
}
```
### 2.2 电池图标与百分比坐标对齐
`main.c` 的时钟重绘函数中,通过以下坐标在 **135 像素宽** 屏幕上绘制电量
### 2.2 电池图标与动态百分比 (包含充电 + 后缀) 渲染
`main.c` 的时钟页面刷新中,获取当前百分比及充电状态,动态绘制到状态栏
```c
// 绘制百分比字符
LCD_ShowString(77, 24, "85%", COLOR_GRAY, COLOR_BLACK);
// 绘制电池位图
LCD_ShowImage(107, 27, 20, 10, bmp_battery_20x10, COLOR_GRAY, COLOR_BLACK);
void UI_ShowClockPage(SystemState state, u8 hour, u8 min) {
char bat_str[10];
u8 bat_val = Read_Battery_Percent();
bit charging = Is_Charging();
LCD_Clear(COLOR_BLACK);
// 充电状态判定与百分比字符串格式化
if (charging) {
// 充电时显示 + 号后缀,如 "85%+"
if (bat_val >= 100) {
bat_str[0] = '1'; bat_str[1] = '0'; bat_str[2] = '0'; bat_str[3] = '%'; bat_str[4] = '+'; bat_str[5] = '\0';
} else {
bat_str[0] = '0' + (bat_val / 10);
bat_str[1] = '0' + (bat_val % 10);
bat_str[2] = '%';
bat_str[3] = '+';
bat_str[4] = '\0';
}
// X 坐标向左平移 8 像素 (X=69) 以确保和电池图标 (X=107) 之间有 6px 以上的安全间距
LCD_ShowString(69, 24, bat_str, COLOR_GRAY, COLOR_BLACK);
} else {
// 未充电正常显示百分比,如 "85%"
if (bat_val >= 100) {
bat_str[0] = '1'; bat_str[1] = '0'; bat_str[2] = '0'; bat_str[3] = '%'; bat_str[4] = '\0';
} else {
bat_str[0] = '0' + (bat_val / 10);
bat_str[1] = '0' + (bat_val % 10);
bat_str[2] = '%';
bat_str[3] = '\0';
}
LCD_ShowString(77, 24, bat_str, COLOR_GRAY, COLOR_BLACK);
}
// 绘制电池位图图标
LCD_ShowImage(107, 27, 20, 10, bmp_battery_20x10, COLOR_GRAY, COLOR_BLACK);
// ...
}
```
两者 Y 轴保持 24 与 27 对齐X 轴坐标根据 135 宽屏幕右偏 15 像素(原为 62 和 92安全边距保持在 6 像素77 + 3*8 = 101与 107 之间为 6px防止重合。
### 2.3 字模百分号偏置
`lcd_font.h` 的 ASCII 字符数组中,百分号 `%`(十进制 37十六进制 0x25的字模通过在字模绘制时向上平移 2 像素对齐普通数字的下基准线。