diff --git a/App/main.c b/App/main.c index 83acd0b..8b759cc 100644 --- a/App/main.c +++ b/App/main.c @@ -17,6 +17,8 @@ bit last_hw_r = 1; bit last_hw_g = 1; bit last_hw_b = 1; +bit rgb_test_mode = 0; + // 实际 WS2812 物理控制引脚(接 P0.0) sbit WS2812_DI = P0^0; @@ -745,7 +747,11 @@ void Timer1_Isr(void) interrupt 3 } // 3. 警报警示声光发生器逻辑 - if (current_state == STATE_SOS_EMITTED) + if (rgb_test_mode) + { + // RGB 测试模式下不更新虚拟 LED 状态,交由主循环串口命令控制 + } + else if (current_state == STATE_SOS_EMITTED) { // SOS 特殊告警:LED 红色极速闪烁 (5Hz),马达持续进行 1200ms 循环长振 u8 sos_flash = (ms_tick / 100) % 2; // 5Hz -> 100ms 翻转一次 @@ -1088,6 +1094,54 @@ void main(void) state_changed = 1; Uart_SendString("[UART SIM] Set State to: DISARMED (Disarmed)\r\n"); } + else if (cmd == '4') + { + rgb_test_mode = 1; + LED_R = 0; LED_G = 1; LED_B = 1; // 红色亮 (0代表亮) + Uart_SendString("[UART SIM] RGB Test -> RED\r\n"); + } + else if (cmd == '5') + { + rgb_test_mode = 1; + LED_R = 1; LED_G = 0; LED_B = 1; // 绿色亮 + Uart_SendString("[UART SIM] RGB Test -> GREEN\r\n"); + } + else if (cmd == '6') + { + rgb_test_mode = 1; + LED_R = 1; LED_G = 1; LED_B = 0; // 蓝色亮 + Uart_SendString("[UART SIM] RGB Test -> BLUE\r\n"); + } + else if (cmd == '7') + { + rgb_test_mode = 1; + LED_R = 0; LED_G = 0; LED_B = 1; // 黄色亮 (红+绿) + Uart_SendString("[UART SIM] RGB Test -> YELLOW\r\n"); + } + else if (cmd == '8') + { + rgb_test_mode = 1; + LED_R = 0; LED_G = 1; LED_B = 0; // 紫色亮 (红+蓝) + Uart_SendString("[UART SIM] RGB Test -> PURPLE\r\n"); + } + else if (cmd == '9') + { + rgb_test_mode = 1; + LED_R = 1; LED_G = 0; LED_B = 0; // 青色亮 (绿+蓝) + Uart_SendString("[UART SIM] RGB Test -> CYAN\r\n"); + } + else if (cmd == '0') + { + rgb_test_mode = 1; + LED_R = 0; LED_G = 0; LED_B = 0; // 白色亮 (红+绿+蓝) + Uart_SendString("[UART SIM] RGB Test -> WHITE\r\n"); + } + else if (cmd == 'f' || cmd == 'F') + { + rgb_test_mode = 0; + LED_R = 1; LED_G = 1; LED_B = 1; // 熄灭 + Uart_SendString("[UART SIM] RGB Test -> OFF (Normal Mode)\r\n"); + } } // 1. 读取按键事件并自动清空 @@ -1096,6 +1150,7 @@ void main(void) if (ev != KEY_EVENT_NONE) { + rgb_test_mode = 0; // 任何物理/按键事件触发时退出 RGB 测试模式 // 通过串口打印获取到的按键事件代号进行测试联调 Uart_SendString("Key Event Captured: "); Uart_SendHex8((u8)ev);