基于STM32的WS2812B炫彩灯光控制系统

基于STM32的WS2812B炫彩灯光控制系统

这个项目是一个高效稳定的WS2812B RGB LED灯带驱动库,专为STM32F103系列微控制器设计。通过PWM和DMA技术实现精确的时序控制,支持多达60个LED灯珠,提供了丰富的灯光效果和灵活的配置选项。

效果图

(只拍摄了部分效果)

在这里插入图片描述

核心功能亮点

  1. 专业级硬件驱动

    • 零等待DMA传输技术
    • 自动生成WS2812B协议波形(800kHz)
    • 精确的复位信号控制(>50μs低电平)
  2. 11种炫彩特效

    // 彩虹波浪效果
    Effect_RainbowWave(8, 3);
    // 呼吸灯效果
    Effect_Breathe(COLOR_BLUE, 50, 5);
    // 奔跑光带
    Effect_RunningLights(COLOR_GREEN, 25, 80, 5);
    // 音乐频谱效果
    Effect_SingleMusicBar(COLOR_RED, 75, 500);
    
  3. 卓越的性能优化

    • 呼吸灯查表算法替代浮点运算
    • HSV转RGB快速转换函数
    • 内存占用优化(双缓冲设计)
    • 动态延时控制技术

技术架构

DMA通道
精确波形
GRB格式
STM32F10x
TIM2_PWM
WS2812B_LED
Driver
Color_Processing
HSV_RGB_Converter
Effects_Engine
Dynamic_Delay

关键特性

  • 物理层

    • 工作电压:灯珠5V,信号线电压3.3V既可。
    • 信号频率:800kHz ±150ppm
    • 支持灯珠数:60个(可配置)
  • 色彩系统

    • GRB 24位真色彩
    • HSV色彩空间支持
    • 预定义常用颜色常量
      #define COLOR_RED   0x00FF00
      #define COLOR_PURPLE 0x00FF80
      
  • 控制接口

    • 速度参数:1-100可调
    • 循环次数:0=永久运行
    • 亮度控制:0-255级

使用示例

while(1) {
   
   
    // 彩虹波浪效果
    Effect_RainbowWave(8, 3);
    
    // 音乐频谱效果
    Effect_SingleMusicBar(COLOR_RED, 75, 500);
    
    // 双向流水灯
    Effect_BidirectionalFlow(COLOR_CYAN, 70, 3);
    
    // 清屏暂停
    WS2812B_Clear();
    Delay_ms(1000);
}

应用场景

  1. 智能家居氛围照明
  2. 音乐可视化系统
  3. 节日装饰灯光
  4. 汽车氛围灯
  5. 游戏设备RGB灯效

该项目以卓越的性能和丰富的灯光效果,为嵌入式开发者提供了开箱即用的WS2812B解决方案。所有代码采用模块化设计,方便移植到各种STM32平台,并通过详尽的注释确保可维护性。

下面是全部的代码(粘贴既可使用)

主函数代码(main.c)

#include "stm32f10x.h"
#include "HDL_WS2812B.h"
#include "Delay.h"

int main(void)
{
   
   
    // 系统时钟初始化 (根据实际配置)
    SystemInit();
    
   
    
    // WS2812B初始化
    PWM_WS2812B_Init(WS2812B_ARR);
    WS2812B_Clear();
    
    while (1) {
   
   
			
			
				// 0.显示  x色频谱条,中等速度,运行  次
				Effect_SingleMusicBar(COLOR_RED, 75, 500);


			
			
        // 1. 彩虹波浪效果
        Effect_RainbowWave(8, 3); // 中等速度,运行3个循环
        
        // 2. 呼吸灯效果 (蓝色)
        Effect_Breathe(COLOR_BLUE, 50, 5); // 蓝色,中等速度,5次呼吸循环
        
        // 3. 颜色循环效果
        Effect_ColorCycle(30, 10); // 较慢速度,运行3个循环
        
        // 4. 奔跑光带效果 (绿色)
        Effect_RunningLights(COLOR_GREEN, 25, 80, 5); // 绿色,宽度6,慢速,运行5个循环
        
        // 5. 快速闪烁效果 (红色/绿色交替)
        Effect_Flash(COLOR_RED, COLOR_GREEN, 70, 10); // 红绿色交替,快速,闪烁10次
        
        // 6. 白色渐变效果
        Effect_WhiteFade(200, 60, 3); // 最大亮度200,慢速,3次渐变循环
        
        // 7. 随机闪烁效果
        Effect_RandomTwinkle(70, 20); // 中等速度,闪烁20次
        
        // 8. 跳动条效果 (紫色)
        Effect_JumpingBar(COLOR_PURPLE, 4, 5, 10, 10); // 紫色,条长4,间隔5,慢速,运行10个循环
        
        // 9. 单向流水灯效果 (青色)
        Effect_WaterFlow(COLOR_CYAN, 80, 3); // 青色,慢速,3次流水
//        
        // 10. 双向流水灯效果 (紫色)
        Effect_BidirectionalFlow(COLOR_PURPLE, 70, 3); // 白色,中等速度,运行3个循环
//        
        // 短暂停顿
        WS2812B_Clear();
        Delay_ms(1000);
    }
}

HDL_WS2812B.c文件

/*******************************************************************************
  * @file  HDL_WS2812B.c
  * @author  
  * @version  V1.0
  * @date  2025
  * @brief  Improved WS2812B driver with multiple effects
  ******************************************************************************/
#include "HDL_WS2812B.h"
#include "Delay.h"
#include "stdlib.h"  // For random effects

/* 单个灯珠的编码对应的比较值数组 */
uint16_t Single_LED_Buffer[DATA_SIZE * LED_NUM];

/* 存储所有灯珠的颜色数据 (GRB格式) */
uint32_t LED_Color[LED_NUM];

// HSV转RGB函数
static uint32_t HSVtoRGB(uint16_t h, uint8_t s, uint8_t v);

/*
* 初始化函数
* 参数:arr:自动重装值
*/
void PWM_WS2812B_Init(uint16_t arr)
{
   
   
    //结构体变量
	GPIO_InitTypeDef  GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	DMA_InitTypeDef DMA_InitStructure;
	
	//使能RCC时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//使能PORTA时钟	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值