diff --git a/App/main.c b/App/main.c index 1ef7a4a..76f4b47 100644 --- a/App/main.c +++ b/App/main.c @@ -257,7 +257,7 @@ void main(void) RGB_Send(0, 0, 0, 0, 0, 0); // 【首要修正】:上电第一时间强制发送 0 码关闭灯条,熄灭上电暂态引起的随机白光! RF_Init(); // 初始化射频芯片各引脚控制 Delay_ms(500); // 软启动延时,等待供电电容稳定 - LCD_Init(); // 初始化 LHS114TC-IF03 (ST7789V) 屏幕控制寄存器序列并开启背光 + LCD_Init(); // 初始化 LHS114TC-IF03 (ST7789V) 屏幕控制寄存器序列 (背光保持关闭,避免闪烁) Uart1_Init(); // 初始化串口 1 波特率 115200 供调试日志 Uart_SendString("Wristband System Initialized!\r\n"); @@ -281,6 +281,9 @@ void main(void) Uart_SendString("[SYS] Event-driven framework ready\r\n"); + // 所有初始化与首帧时钟界面绘制均已完成,此刻才点亮背光,避免开机过程中的中间画面被看到而产生闪烁 + SGM_CTRL = 0; + // ====== 主循环 ====== while (1) { /* 0. 检查主循环按键定时标志 (由 1ms 中断置位,主循环响应清除并处理) */ diff --git a/App/system.c b/App/system.c index a4f3193..cbcf76a 100644 --- a/App/system.c +++ b/App/system.c @@ -60,6 +60,9 @@ void GPIO_Init(void) // SGM_CTRL (P1.7), LCD 控制管脚 (P1.0, P1.1, P1.4, P1.5, P1.6) 置为推挽输出 P1M1 &= ~((1 << 7) | (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5) | (1 << 6)); P1M0 |= ((1 << 7) | (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5) | (1 << 6)); + SGM_CTRL = 1; // 背光从上电第一刻起就确定关闭 (LEDA=1),避免推挽模式生效前电平不确定造成瞬间闪烁 + + // SHUT (P3.5) 射频/外设开启使能脚置为推挽输出 P3M1 &= ~(1 << 5); diff --git a/Drivers/lcd.c b/Drivers/lcd.c index a18dba7..277bed7 100644 --- a/Drivers/lcd.c +++ b/Drivers/lcd.c @@ -85,8 +85,9 @@ void LCD_Init(void) P1M1 &= ~((1<<0) | (1<<1) | (1<<4) | (1<<5) | (1<<6) | (1<<7)); P1M0 |= ((1<<0) | (1<<1) | (1<<4) | (1<<5) | (1<<6) | (1<<7)); - // 设置各控制引脚初始默认电平 - SGM_CTRL = 0; // PMOS低电平点亮背光 (LEDA = 0) + // 设置各控制引脚初始默认电平 (LEDA 背光电平不在这里设置——开机路径由 GPIO_Init() 提前 + // 关闭、main() 即将进入主循环前才点亮;休眠唤醒路径由 Wakeup_Restore() 在调用本函数前 + // 先行点亮;两条路径对背光的时序要求不同,LCD_Init() 本身不做任何背光电平的假设) LCD_CS = 1; LCD_SCL = 1; LCD_RST = 1;