找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10256|回复: 7
打印 上一主题 下一主题
收起左侧

基于WS2812B幻彩灯带全彩流水跑马LED灯的STM32控制程序

  [复制链接]
跳转到指定楼层
楼主
夜间看着树上挂的那种流星灯,感觉很有兴趣,于是乎就想自己自制一个,笔者在某宝上买了一条两米的WS2812B幻彩灯带,当时是购买了一个控制器,回到家接上之后,感觉效果还可以,但是他的花样不是很丰富,而且是一个短暂的循环,感觉不是很好看,没有流星灯的那种效果,就想自己写一个程序来控制,但是查阅了一下ws 2812的相关资料,发现对时钟的要求很高,于是就选择了用stm32作为主控,我没有用定时器,定时器不能有这么短的时间,他一般都是在450nS,我选择用延时——nop_();



单片机源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "led.h"
  4. #include "timer.h"
  5. #include "stm32f10x_flash.h"
  6. extern u8  Rda,Gda,Bda;
  7. u8  Table_Color[TM1804_IC][3]={0};//显示缓存数组
  8. //配置系统时钟,使能各外设时钟
  9. void RCC_Configuration(void)
  10. {
  11.         RCC_DeInit();        //复位系统时钟
  12.         RCC_HSEConfig(RCC_HSE_ON);    //开启HSE
  13.         if(RCC_WaitForHSEStartUp() == SUCCESS)//等待HSE起振
  14.         {

  15.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);  //选择HCLK时钟源为SYSCLK1分频
  16.                 RCC_PCLK2Config(RCC_HCLK_Div1);   //选择PCLK2的时钟源为HCLK1分频
  17.                 RCC_PCLK1Config(RCC_HCLK_Div2);     //选择PCLK1的时钟源为HCLK2分频

  18.                 FLASH_SetLatency(FLASH_Latency_2);
  19.                 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  20.                
  21.                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_12);        //选择PLL时钟源为HSE1分频,10倍频
  22.                 RCC_PLLCmd(ENABLE);           //使能PLL
  23.                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);   //等待PLL输出稳定
  24.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   //系统时钟为PLL
  25.                 while(RCC_GetSYSCLKSource() != 0x08);   //等待PLL为系统时钟源
  26.         }
  27. }


  28. int main(void)
  29. {
  30.         u8 i=0,IC,n=1,HD,LD;
  31.         RCC_Configuration();
  32.         delay_init();                     //延时函数初始化          
  33.         NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  34.         LED_Init();                             //LED端口初始化
  35.         LED_Reset();
  36.         Rda=0x0,Gda=0x0,Bda=0xff;
  37.         while(1)
  38.         {       
  39.                 for(IC=TM1804_IC;IC>0;IC--)
  40.                 {
  41.                         LED_send_px(60,20,255,IC);
  42.                         delay_ms(50);
  43.                 }
  44.                           for(IC=0;IC<TM1804_IC;IC++)
  45.                 {
  46.                         LED_send_px(40,255,77,IC);
  47.                         delay_ms(50);
  48.                 }
  49. //                for(n=0;n<255;n+=13)
  50. //                {
  51. //                        for(IC=TM1804_IC;IC>0;IC--)
  52. //                        {
  53. //                                LED_Meteor_rain_light(0x12-n,0x20+n,0x77+n,IC,10);
  54. //                                LED_Meteor_rain_light(0xff,0xff,0xff,IC,20);
  55. //                                delay_ms(70);
  56. //                        }
  57. //                }       
  58.         }
  59. }       
复制代码

所有资料51hei提供下载:
32程序WS2812B.7z (179.54 KB, 下载次数: 359)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:585349 发表于 2020-12-30 11:11 | 只看该作者
程序的延时函数应该有点小问题
回复

使用道具 举报

板凳
ID:876149 发表于 2021-1-12 11:23 来自手机 | 只看该作者
只有程序没控制板吗?
回复

使用道具 举报

地板
ID:610005 发表于 2021-1-14 17:47 | 只看该作者
可以使用SPI方式或者DMA+tim方式
回复

使用道具 举报

5#
ID:387856 发表于 2021-5-4 11:38 | 只看该作者
有遥控器控制灯带的例程吗?,我写的遥控器控制这灯带的程序,在按遥控器时,灯带会乱闪一下。就是在解码的时候把灯的数据时序打乱了导致的。
回复

使用道具 举报

6#
ID:67791 发表于 2023-12-20 17:51 | 只看该作者
看看咋样,能用不能
回复

使用道具 举报

7#
ID:103436 发表于 2024-11-19 22:43 | 只看该作者
有流星灯的效果吗
回复

使用道具 举报

8#
ID:86065 发表于 2024-12-6 12:41 | 只看该作者
可以试试使用stm32spi的mosi引脚接led灯,使用spi的dma功能,spi模拟时序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表