feat: 校准电池电压与ADC2充电检测,重构RGB为Bitbang翻转驱动,并修复RTC晶振起振问题

This commit is contained in:
2026-07-28 18:03:20 +08:00
parent 47bcd252b2
commit d01121e3ae
25 changed files with 15134 additions and 11463 deletions

View File

@@ -1,5 +1,6 @@
#include "ui.h"
#include "../Drivers/lcd.h"
#include "../Drivers/adc.h"
// 引入外部主菜单对码项名称定义 (例如 "DETEC. PORTE" 等,法语表达防区类型名称)
extern char *code menu_items[5];
@@ -10,23 +11,26 @@ extern char *code menu_items[5];
* @param hour 当前待显示的小时数 (0~23)
* @param min 当前待显示的分钟数 (0~59)
* @details 该页面被划分为三大功能视觉区:
* 1. 顶部状态栏:左侧绘制布撤防指示锁,右侧显示 "85%" 剩余电量以及精细电池单色位图。
* 1. 顶部状态栏:左侧绘制布撤防指示锁,右侧显示真实剩余电量百分比以及电池单色位图。
* 2. 中部核心栏:垂直居中以 16x32 大号粗字体绘制格式化时间 "HH:MM",在其下方标注 AM/PM 标识。
* 3. 底部信息栏:使用灰色小字模绘制法语星期日期 "VEN 10-07" (星期五 7月10日)。
*/
void UI_ShowClockPage(SystemState state, u8 hour, u8 min)
{
char time_str[6];
LCD_Clear(COLOR_BLACK); // 使用纯黑色底色,充分利用 AMOLED 黑色像素不发光的省电特性
char batt_str[7];
u8 batt;
// ====== 绘制左上角布撤防锁头状态图标 ======
// 清屏,底色填充为纯黑
LCD_Clear(COLOR_BLACK);
// ====== 绘制左上角布撤防图标 ======
if (state == STATE_ARMED)
{
// 状态: ARMED (布防) -> 绘制红色闭合锁头
LCD_DrawRectBorder(10, 23, 20, 15, COLOR_RED); // 锁身矩形
LCD_FillRect(15, 15, 2, 8, COLOR_RED); // 左半锁环
LCD_FillRect(17, 15, 10, 2, COLOR_RED); // 锁环顶梁
LCD_FillRect(25, 15, 2, 8, COLOR_RED); // 右半锁环
// 状态: ARMED (布防) -> 绘制红色闭合锁头
LCD_DrawRectBorder(10, 23, 20, 15, COLOR_RED); // 锁身矩形
LCD_DrawRectBorder(14, 15, 12, 9, COLOR_RED); // 闭合状态的拱形锁环
LCD_FillRect(18, 28, 4, 5, COLOR_RED); // 锁芯暗扣
}
else
{
@@ -37,9 +41,24 @@ void UI_ShowClockPage(SystemState state, u8 hour, u8 min)
LCD_FillRect(25, 17, 2, 6, COLOR_GREEN); // 开启状态的偏置锁环
}
// ====== 绘制右上角电池电量 ======
LCD_ShowString(77, 24, "85%", COLOR_GRAY, COLOR_BLACK); // 静态测试显示 85% 字符并移动至右上角
LCD_DrawMonoBitmap(107, 27, 20, 10, bmp_battery_20x10, COLOR_GRAY, COLOR_BLACK); // 渲染 20x10 电池并移动至右上角
// ====== 绘制右上角真实电池电量 ======
batt = ADC_GetBatteryPercent();
if (batt >= 100) {
batt_str[0] = '1'; batt_str[1] = '0'; batt_str[2] = '0'; batt_str[3] = '%'; batt_str[4] = '\0';
} else {
batt_str[0] = '0' + (batt / 10);
batt_str[1] = '0' + (batt % 10);
batt_str[2] = '%';
batt_str[3] = '\0';
}
// 充电中则在百分比后追加 '+' 后缀
if (Is_Charging()) {
u8 len = (batt >= 100) ? 4 : 3;
batt_str[len] = '+';
batt_str[len + 1] = '\0';
}
LCD_ShowString(70, 24, batt_str, COLOR_GRAY, COLOR_BLACK); // 渲染真实动态百分比
LCD_DrawMonoBitmap(107, 27, 20, 10, bmp_battery_20x10, COLOR_GRAY, COLOR_BLACK); // 渲染 20x10 电池图标
// ====== 绘制中部时间 "HH:MM" ======
time_str[0] = '0' + (hour / 10); // 小时十位