找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机WS2812B RGB LED驱动程序 可以控制200个RGB

  [复制链接]
跳转到指定楼层
楼主
ID:481908 发表于 2019-2-28 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机WS2812BRGB

可以控制200个RGB

单片机源程序如下:
  1.           #include<reg52.h>
  2. #include<intrins.h>

  3.                 //单片机为15系列  晶振内部27M  分频为0X02
  4.                 //可以控制1024 个RGB


  5.         #define uchar unsigned char
  6.          sfr PLC=0X97;
  7.          sbit Send_Dat=P3^5;
  8.          unsigned char RGB_BUF[24];

  9.                  void delay();

  10.                  void RGBA(); //流动效果
  11.                   void RGBB(        unsigned int w);//静态显示全彩
  12.                   void RGBC ();          //全体变色效果

  13.                          uchar  n;
  14.                         uchar r;

  15.                           unsigned char *p;


  16.          


  17.                  uchar a []={ 0xff,0x00,0x00} ;         //绿
  18.                  uchar b []={ 0x00,0xff,0x00} ;         //红
  19.                  uchar c []={ 0x00,0x00,0xff} ;         //蓝
  20.                  uchar d []={ 0xff,0xff,0x00} ;         //黄
  21.                  uchar e []={ 0xff,0x00,0xff} ;         //青
  22.                  uchar f []={ 0x00,0xff,0xff} ;         //紫
  23.                  uchar g []={ 0xff,0xff,0xff} ;         //白
  24.                  uchar h []={ 0x00,0x00,0x00} ;
  25.                                                                                 

  26.                          uchar shuzud [8] [3]={  

  27.             { 0xff,0x00,0x00},           //绿
  28.                 { 0x00,0xff,0x00} ,           //红
  29.                 { 0x00,0x00,0xff} ,           //蓝
  30.                 { 0xff,0xff,0x00} ,           //黄
  31.                 { 0xff,0x00,0xff} ,           //青
  32.                 { 0x00,0xff,0xff} ,           //紫
  33.                 { 0xff,0xff,0xff} ,           //白
  34.                 { 0x00,0x00,0x00} ,


  35.                                                 };




  36.                    sfr P3M1 = 0xb1;
  37. sfr P3M0 = 0xb2;
  38.                  
  39. struct shuzu
  40.                    {

  41.                           uchar a [3];
  42.                           uchar b[3] ;
  43.                                 

  44.         };        
  45.                         struct        shuzu;





  46. void delays(uchar t);

  47.         




  48.                 void Send_A_bit(uchar v)
  49. {
  50. //   
  51.        if (v==1)
  52.        {
  53.    
  54.               Send_Dat=1;
  55.               _nop_();
  56.             
  57.               Send_Dat=0;         
  58.            
  59.        }
  60.        else
  61.        {
  62.               Send_Dat=1;
  63.             
  64.               Send_Dat=0;           
  65.               _nop_();
  66.       
  67.        }           
  68.       
  69. }


  70.                  void Send_192bits( uchar *p1,uchar z)                     
  71. {
  72.        unsigned int i=0;        uchar s; uchar x; unsigned char k;
  73.                      
  74.                                          s=8;
  75.                          x=0;

  76.          //    1                 

  77.                         

  78.                                                 
  79.                         
  80.                                 
  81.                                     
  82.            for   (i=x;i<s;i++)
  83.        {
  84.               RGB_BUF[i]=p1[0]>>(i-x)&0x01;                          //转化R_VAL
  85.        }

  86.                                            s=s+8;
  87.                                            x=x+8;
  88.                                                         

  89.               for   (i=x;i<s;i++)
  90.        {
  91.               RGB_BUF[i]=p1[1]>>(i-x)&0x01;               //转化G_VAL
  92.        }                        
  93.            
  94.                                        s=s+8;
  95.                                            x=x+8;
  96.                                                                         
  97.                                            for   (i=x;i<s;i++)
  98.        {
  99.               RGB_BUF[i]=p1[2]>>(i-x)&0x01;
  100.                           
  101.                                                     //转化R_VAL
  102.        }
  103.                                 
  104.                         
  105.                         
  106.                                                     s=s+8;
  107.                                            x=x+8;
  108.                
  109.                
  110.                                                 
  111.                                                          
  112.                                     
  113.                                                    
  114.                                             
  115.                                         for (k=0;k<z;k++)          //循环RGB数量
  116.                                   {
  117.                                                         
  118.                         
  119.                                        
  120.                                                          
  121.                         
  122.                          for (i=0;i<24;i++)
  123.       {
  124.               Send_A_bit(RGB_BUF[i]);
  125.        }
  126.                         
  127.                         
  128.                         
  129.                         
  130.                         
  131.                                   }
  132.                         
  133.                         
  134.                         
  135.                         
  136.                                  
  137.                                           }

  138.                   
  139.                                 
  140.                                          




  141.                 void main()


  142.                 {
  143.                                  P3M0 = 0x00;
  144.     P3M1 = 0x00;

  145.                                 PLC=0X02;
  146.                         while(1)
  147.                            {
  148.                         
  149.                         
  150.                                  
  151.                                 RGBB(65000);  //全体静态显示全彩效果
  152.                                  
  153.                                  delays(10 );

  154.                                 RGBA();//全体流动效果
  155.                                                  delays(5);

  156.                                 RGBC();//全体变色效果

  157.                                                     delays(5);



  158.                            
  159.                            }
  160. }
  161.                
  162.                

  163.           void RGBA()                         // 流动效果
  164.           {
  165.                                    
  166.                                          Send_192bits(shuzud[0],9);
  167.                                     delays(1);
  168.                                    


  169.                                                 for (n=0;n<10;n++)

  170.                                              {

  171.                            
  172.                                              Send_192bits(shuzud[1],n);
  173.                                     delays(1);
  174.                                    
  175.                             }


  176.                                                                   for (n=0;n<10;n++)

  177.                                              {

  178.                            
  179.                                              Send_192bits(shuzud[2],n);
  180.                                     delays(1);      
  181.                                           }















  182.                                            }





  183.                         void          RGBB(         unsigned int w         )          //全体静态显示全彩效果



  184.           {                                
  185.                                                                    unsigned int t;

  186.                                                                           for (t=0;t<        w;t++);
  187.          
  188.                                                    Send_192bits(shuzud[2],9);
  189.                                                                     for (t=0;t<        w;w++);
  190.                                                                            


  191.                                                                   Send_192bits(shuzud[1],8);
  192.                                                                                          for (t=0;t<        w;t++);

  193.                                                                     Send_192bits(shuzud[0],7);
  194.                                    
  195.                                                                                          for (t=0;t<        w;t++);
  196.                                                                    Send_192bits(shuzud[5],6);
  197.                                    
  198.                                                                                          for (t=0;t<        w;t++);
  199.                                                                       Send_192bits(shuzud[4],5);
  200.                                    
  201.                                                                                          for (t=0;t<        w;t++);
  202.          
  203.                                                                       Send_192bits(shuzud[3],4);
  204.                                    
  205.                                                                                          for (t=0;t<        w;t++);
  206.                                                                              Send_192bits(shuzud[2],3);
  207.                                    
  208.                                                                                          for (t=0;t<        w;t++);

  209.                                                                                    Send_192bits(shuzud[1],2);
  210.                                    
  211.                                                                                          for (t=0;t<        w;t++);

  212.                                                                                    
  213.                                                                                    Send_192bits(shuzud[0],1);
  214.                                    
  215.                                                                                          for (t=0;t<        w;t++);
  216.                                                               



  217.                          }





  218.       void RGBC()           //全体变色效果


  219.           {

  220.                                  Send_192bits(shuzud[0],9);
  221.                                     delays(5);

  222.                                    Send_192bits(shuzud[1],9);
  223.                                     delays(5);

  224.                                   Send_192bits(shuzud[2],9);
  225.                                     delays(5);

  226.                                    Send_192bits(shuzud[3],9);
  227.                                     delays(5);

  228.                                    Send_192bits(shuzud[4],9);
  229.                                     delays(5);

  230.                                    Send_192bits(shuzud[5],9);
  231.                                     delays(5);


  232.                                   }




  233.                
  234.         void delay()
  235. {
  236. unsigned int i,j;
  237.        for (i=0;i<250;i++)
  238.        {
  239.               for (j=0;j<200;j++);
  240.        }
  241. }


  242. /*大延时函数*/
  243. /*十几秒*/
  244. void delays(uchar t)
  245. {
  246.                    uchar p;


  247.          for (p=0; p<t;p++)
  248.            {
  249.        delay();
  250.               
  251.                                         }
  252.       
  253. }
复制代码

所有资料51hei提供下载:
优化RGB.rar (25.16 KB, 下载次数: 549)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:60656 发表于 2019-3-7 22:14 | 只看该作者
好资料收藏学习,谢谢
回复

使用道具 举报

板凳
ID:473186 发表于 2019-3-8 16:49 | 只看该作者
52单片机应该跟不上,这玩意最少要24M的,宏晶其他型号可以
回复

使用道具 举报

地板
ID:243748 发表于 2019-3-9 21:12 来自手机 | 只看该作者
有电路图吗
回复

使用道具 举报

5#
ID:265485 发表于 2019-3-17 20:54 | 只看该作者
这程序不行试了没有效果
回复

使用道具 举报

6#
ID:67356 发表于 2019-3-18 06:58 来自手机 | 只看该作者
好,。谢,回来看看
回复

使用道具 举报

7#
ID:243748 发表于 2019-8-2 20:46 来自手机 | 只看该作者
明天试一下
回复

使用道具 举报

8#
ID:299054 发表于 2019-9-5 17:04 | 只看该作者
谢谢分享!
回复

使用道具 举报

9#
ID:358797 发表于 2019-12-4 13:56 | 只看该作者
稳定吗
回复

使用道具 举报

10#
ID:652686 发表于 2020-1-1 15:57 | 只看该作者
正好想用WS2812B做一个灯,好资料收藏学习,谢谢
回复

使用道具 举报

11#
ID:690219 发表于 2020-3-5 17:22 | 只看该作者
有电路图共参考吗?
51单片机真的可以实现吗?
回复

使用道具 举报

12#
ID:686314 发表于 2020-3-18 17:10 | 只看该作者
谢谢楼主
回复

使用道具 举报

13#
ID:791100 发表于 2020-11-6 20:21 | 只看该作者
楼主资料非常好,值得收藏,谢谢!
回复

使用道具 举报

14#
ID:791100 发表于 2020-11-7 20:11 | 只看该作者

楼主资料非常好,值得收藏,谢谢!
回复

使用道具 举报

15#
ID:89286 发表于 2020-11-8 17:48 | 只看该作者
thanks for sharing
回复

使用道具 举报

16#
ID:845476 发表于 2022-1-9 18:32 | 只看该作者
请问楼主,为什么我的第一颗灯是白色的特别亮
回复

使用道具 举报

17#
ID:1003871 发表于 2022-2-12 22:47 | 只看该作者
200个。。。。出错了是不是就都不好使了
回复

使用道具 举报

18#
ID:977804 发表于 2022-2-21 11:25 来自手机 | 只看该作者
xo520 发表于 2022-1-9 18:32
请问楼主,为什么我的第一颗灯是白色的特别亮

白光,说明频率不够。要增大主频
回复

使用道具 举报

19#
ID:583681 发表于 2022-8-25 08:40 | 只看该作者
我微改了一下程序,11.0592M的单片机都可以适应。
回复

使用道具 举报

20#
ID:1013588 发表于 2022-8-28 10:22 | 只看该作者
谢谢分享,以后有机会试试
回复

使用道具 举报

21#
ID:1062369 发表于 2023-4-26 00:24 来自手机 | 只看该作者
gzpylyf 发表于 2022-8-25 08:40
我微改了一下程序,11.0592M的单片机都可以适应。

请问是怎么做到的
回复

使用道具 举报

22#
ID:1053359 发表于 2023-4-28 09:19 | 只看该作者
不知道行不行,先下载研究,,感谢楼主分享
回复

使用道具 举报

23#
ID:1096871 发表于 2023-10-22 15:04 | 只看该作者
试过了,的确可以点亮,谢谢楼主
回复

使用道具 举报

24#
ID:1096871 发表于 2023-10-22 15:05 | 只看该作者
谢谢楼主,试过了,的确可以点亮,现在在楼主的程序上做动态变化,谢谢楼主
回复

使用道具 举报

25#
ID:398094 发表于 2023-11-22 09:21 | 只看该作者
好资料收藏学习,谢谢
回复

使用道具 举报

26#
ID:1068132 发表于 2023-12-3 20:38 | 只看该作者
为什么我移植到STC8G2K32S4灯亮不了
回复

使用道具 举报

27#
ID:433219 发表于 2023-12-4 09:05 | 只看该作者
具体要说下,哪个型号和IRC频率
回复

使用道具 举报

28#
ID:31514 发表于 2024-1-5 17:25 | 只看该作者
感谢分享,主要学习渐变色算法
回复

使用道具 举报

29#
ID:72224 发表于 2024-2-2 10:27 | 只看该作者
STC轻松驱动1000个WS2812
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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