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

44 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模块拆分 - 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 中断中调用,控制指示灯处于交替爆闪或间歇闪烁的状态机更新。
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V2 -->