# 模块拆分 - WS2812B 可编程 RGB 灯效 (Docs/50_module-breakdown/mod-led.md) 本模块管理双级联幻彩 RGB 灯珠(WS2812B/FCOB-2.7)的硬件 SPI 通道、防抖抗噪切换以及指示闪烁逻辑。 ## 1. 模块职责说明 * **职责范围**: 1. 管理物理引脚 `P2.3`(复用硬件 SPI 的 MOSI)作为单线纳秒级高速数据流输出。 2. 实现对级联的两个 RGB 灯珠(上灯 DOUT 串接下灯 DIN)输出相同的 24-bit × 2 色彩数据。 3. **硬件 SPI 复用防噪隔离处理**: 由于单片机引脚紧缺,SPI 引脚与马达控制可能存在轻微高频串扰。在每次发送 48-bit (GRB) 灯光控制字之前,**必须临时关闭全局中断 (EA=0)**,并将马达引脚配置为高阻输入以彻底隔离噪声。发送完成后立即恢复引脚模式并使能全局中断 (EA=1)。 4. **软件异步闪烁控制**: 在 1ms 中断中自增计时器,控制报警状态下不同防区灯光的异步闪烁(500ms 亮、500ms 灭,或本地 SOS 下的 50ms 红光快速交替爆闪)。 --- ## 2. LED 报警色彩矩阵 根据防区传感器类型及报警动作亮起指示灯: * **门磁/窗磁 (PORTE)**:红色闪烁。 * **PIR 人体红外 (PIR)**:橙色闪烁。 * **烟雾传感器 (FUMEE)**:绿色闪烁。 * **紧急按钮 (URGENCE)**:蓝色闪烁。 * **气体泄漏 (GAZ)**:紫色闪烁。 * **水浸传感器 (INOND.)**:黄色闪烁。 * **振动传感器 (VIBRA.)**:青色闪烁。 * **本地主动 SOS**:双红灯以 50ms 周期高速交替闪烁。 --- ## 3. 接口与函数说明 * `void WS2812_Init(void)`:初始化物理引脚 `P2.3` 状态,复用硬件 SPI 通道,配置时钟展宽 LUT 码表。 * `void WS2812_WriteRGB(u8 led1_g, u8 led1_r, u8 led1_b, u8 led2_g, u8 led2_r, u8 led2_b)`: 1. 临时保存并拉低 `EA = 0`。 2. 切换 `P2.5` (MOTOR) 引脚为高阻输入以防共地噪声。 3. 通过 SPI 控制寄存器高速连发 48 字节的时序宽展码,驱动两个灯珠亮起对应颜色。 4. 发送完毕后发送 >80us 的低电平复位脉冲。 5. 恢复马达引脚为推挽输出,并还原 `EA`。 * `void LED_Set_Color(u8 g, u8 r, u8 b)`:同步设置双级联灯亮起特定颜色。 * `void LED_Flash_Process(void)`:在 1ms 中断中调用,控制指示灯处于交替爆闪或间歇闪烁的状态机更新。