# STC荧光棒 **Repository Path**: fx283/stc-fluorescent-stick ## Basic Information - **Project Name**: STC荧光棒 - **Description**: 魔改任素汐荧光棒,加了按键控制 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-25 - **Last Updated**: 2026-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STC8G1K08A 荧光棒 RGB 彩色变换项目 这是一个基于 `STC8G1K08A-36I-SOP8` 的共阳极 RGB LED 灯效控制项目。程序使用 C 语言和 SDCC 编译,不依赖 Keil,也不需要额外的 VSCode 插件。工程只包含源代码、芯片头文件、编译脚本、测试脚本和可供 STC-ISP 使用的 HEX 文件。 ## 一、硬件信息与连接 ### MCU - 型号:`STC8G1K08A-36I-SOP8` - 封装:SOP8 - 默认程序时钟:24 MHz IRC - RGB 类型:共阳极,通道输出低电平点亮 - 按键:按下接地,低电平有效 ### SOP8 引脚连接 | 芯片物理引脚 | 芯片功能 | 本项目连接 | 说明 | |---|---|---|---| | Pin 1 | P5.4 / RST | 复位电路或下载接口 | 复位脚,按芯片手册连接 | | Pin 2 | VCC / AVCC | 电源正极 | 建议就近放置去耦电容 | | Pin 3 | P5.5 | 不使用 | 悬空或按硬件规范处理 | | Pin 4 | GND / AGND | 电源地 | 与按键地、LED 公共阳极回路共地 | | Pin 5 | P3.0 / INT4 | 按键 | 按键另一端接 GND,内部上拉,低电平有效 | | Pin 6 | P3.1 | RGB 红色 R | 通过限流电阻连接 RGB R 通道 | | Pin 7 | P3.2 | RGB 绿色 G | 通过限流电阻连接 RGB G 通道 | | Pin 8 | P3.3 | RGB 蓝色 B | 通过限流电阻连接 RGB B 通道 | 共阳极 RGB LED 的公共阳极接电源正极,R/G/B 三个阴极分别经过限流电阻接 Pin6、Pin7、Pin8。不要把 LED 通道直接接到 MCU 引脚,限流电阻必须保留。 ## 二、灯效模式 上电默认进入模式 1。每次短按按键,模式按 `1 → 2 → … → 13 → 1` 循环。模式切换后先白色恒亮 500 ms,作为“按键已经识别”的反馈,然后从新模式初始状态开始运行。 1. **多彩呼吸**:颜色按红、黄、绿、青、蓝、紫、白变化,并叠加亮度三角波呼吸。 2. **单色呼吸**:每次只显示一种纯色,完成约三次呼吸后切换下一种颜色。 3. **彩色闪烁**:不同颜色按约 500 ms 的节奏交替显示。 4. **彩虹流水**:颜色持续流动,整体亮度基本稳定。 5. **渐变跳变**:颜色经过渐变到达目标色,并在目标色停留后继续变化。 6. **快速变色**:颜色约每 150 ms 快速切换,形成活跃效果。 7. **彩色爆闪**:短时间高亮,随后熄灭,形成明显闪光效果。 8. **随机彩色闪烁**:颜色和持续时间由简单伪随机数决定。 9. **火焰/烛光**:使用红、橙、黄附近的随机亮度模拟火焰抖动。 10. **心跳**:红色快速双脉冲后进入较长停顿。 11. **彩色渐进点亮**:颜色变化与整体亮度从暗到亮再到暗同步进行。 12. **双节奏闪烁**:两次快速闪烁后长暂停,并循环更换颜色。 13. **随机彩色呼吸**:每次完整呼吸随机选择一种颜色。 所有效果都由 Timer0 中断驱动的非阻塞状态机完成,没有长时间 `delay()`,PWM 使用软件输出,PWM 刷新周期足够高,正常运行时不应看到明显的 PWM 闪烁。 ## 三、按键、低功耗与唤醒 - 短按:松开后只产生一次模式切换事件,并开始 500 ms 白色反馈。 - 长按约 1.5 秒:关闭 RGB、停止 Timer0、关闭 LVD 和比较器等不需要的模拟功能,进入 STOP/Power-Down。 - 唤醒:再次按下 Pin5/P3.0,通过 INT4 下降沿唤醒芯片;唤醒后重新初始化 GPIO、PWM、Timer0 和 INT4。 - STOP 电流会受到电源、下载器、RGB 外接电路、按键漏电和 PCB 走线影响,目标电流必须用实际硬件和电流表测量。 ## 四、编程思路 1. Timer0 每 500 us 进入一次中断,使用 `pwm_phase` 完成三路软件 PWM。 2. 每 10 ms 更新一次灯效状态机;颜色、亮度、闪烁节奏和随机状态都由状态变量维护。 3. 统一使用 `set_rgb(R, G, B)`,内部把 0~255 的亮度转换成 5 位 PWM 占空比。 4. 按键由 P3.0/INT4 捕获按下事件,Timer0 中断确认持续时间,实现短按和长按区分。 5. 模式切换时重置效果状态,避免上一模式的计时状态带入下一模式。 6. 进入 STOP 前先关闭所有不需要的模拟功能,避免 LVD/比较器自动开启参考源导致额外功耗。 ## 五、编译方法 本工程使用 SDCC,不使用 Keil。需要电脑上已经安装 SDCC,并且 `build.ps1` 中配置的路径可用。 在 VSCode 终端进入 `software` 目录后执行: ```powershell powershell -ExecutionPolicy Bypass -File .\software\build.ps1 ``` 编译输出: - `software\build\led.hex`:给 STC-ISP 使用的 Intel HEX 文件 - `software\build\led.ihx`:SDCC 中间输出文件 测试源码契约: ```powershell powershell -ExecutionPolicy Bypass -File .\software\tests\test_source_contract.ps1 ``` ## 六、烧写注意事项 1. 在 STC-ISP 中选择准确型号 `STC8G1K08A`,不要随意选择相近型号。 2. 选择本工程生成的 `software\build\led.hex`。 3. 确认 VCC、GND、RST 和下载串口连接正确,下载器与目标板必须共地。 4. RGB 负载和限流电阻不要影响下载接口;必要时先断开大电流负载。 5. 下载参数以实际芯片和 STC-ISP 识别结果为准;本工程不自动执行烧写。 6. 烧写完成后断电重启,观察上电默认模式是否从模式 1 开始。 ## 七、运行注意事项 - 共阳极 LED 是低电平点亮,若接成共阴极,灯效逻辑会相反。 - 按键必须接 Pin5/P3.0 与 GND,不能接到 RGB 通道。 - 长按时间约 1.5 秒,短按后 500 ms 白色反馈属于设计行为。 - 如果颜色明显偏亮、偏暗或某一路不亮,优先检查 RGB 公共阳极、限流电阻、焊点和 P3.1/P3.2/P3.3 映射。 - 修改 `FOSC_HZ` 或时钟配置后,需要重新计算 Timer0 重装值,否则 PWM 和按键时间会不准确。 - STOP 功耗测试时应断开下载器、串口模块和其他可能漏电的外设。 ## 八、文件说明 - `software/src/main.c`:13 种灯效、按键处理、PWM、STOP/唤醒主程序 - `software/inc/STC8G1K08A.h`:本工程使用的 SFR 和位定义 - `software/build.ps1`:SDCC 编译脚本 - `software/tests/test_source_contract.ps1`:源码配置检查 - `software/build/led.hex`:已编译的烧写文件 - `hardware/SCH_任素汐-主板_2026-08-30.pdf`:主板原理图 - `hardware/PCB_任素汐-主板_2026-08-30.pdf`:主板 PCB 装配图 烧写工具例如 STC-ISP 不属于本项目源码,建议从 STC 官方渠道下载,不纳入 Git 仓库。