Files
stc32g128k/Docs/50_module-breakdown/mod-led.md

2.5 KiB
Raw Blame History

模块拆分 - 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 中断中调用,控制指示灯处于交替爆闪或间歇闪烁的状态机更新。