找回密码
 注册
查看: 422|回复: 5
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-29 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机WS2812BRGB
, m" o  e! i2 ]8 _( G: a) d. U
, U3 [% k0 [. P7 w可以控制200个RGB/ S% E- p6 l+ T. \9 Y

0 ?0 ~+ g" Z; d0 H: L; ~单片机源程序如下:
1 F+ ]  ~, K; j) l
  •           #include<reg52.h>
  • #include<intrins.h>
  •                 //单片机为15系列  晶振内部27M  分频为0X02
  •                 //可以控制1024 个RGB
  •         #define uchar unsigned char
  •          sfr PLC=0X97;
  •          sbit Send_Dat=P3^5;
  •          unsigned char RGB_BUF[24];
  •                  void delay();
  •                  void RGBA(); //流动效果
  •                   void RGBB(        unsigned int w);//静态显示全彩
  •                   void RGBC ();          //全体变色效果
  •                          uchar  n;
  •                         uchar r;
  •                           unsigned char *p;
  •                  uchar a []={ 0xff,0x00,0x00} ;         //绿
  •                  uchar b []={ 0x00,0xff,0x00} ;         //红
  •                  uchar c []={ 0x00,0x00,0xff} ;         //蓝
  •                  uchar d []={ 0xff,0xff,0x00} ;         //黄
  •                  uchar e []={ 0xff,0x00,0xff} ;         //青
  •                  uchar f []={ 0x00,0xff,0xff} ;         //紫
  •                  uchar g []={ 0xff,0xff,0xff} ;         //白
  •                  uchar h []={ 0x00,0x00,0x00} ;
  •                          uchar shuzud [8] [3]={
  •             { 0xff,0x00,0x00},           //绿
  •                 { 0x00,0xff,0x00} ,           //红
  •                 { 0x00,0x00,0xff} ,           //蓝
  •                 { 0xff,0xff,0x00} ,           //黄
  •                 { 0xff,0x00,0xff} ,           //青
  •                 { 0x00,0xff,0xff} ,           //紫
  •                 { 0xff,0xff,0xff} ,           //白
  •                 { 0x00,0x00,0x00} ,
  •                                                 };
  •                    sfr P3M1 = 0xb1;
  • sfr P3M0 = 0xb2;
  • struct shuzu
  •                    {
  •                           uchar a [3];
  •                           uchar b[3] ;
  •         };
  •                         struct        shuzu;
  • void delays(uchar t);
  •                 void Send_A_bit(uchar v)
  • {
  • //
  •        if (v==1)
  •        {
  •               Send_Dat=1;
  •               _nop_();
  •               Send_Dat=0;
  •        }
  •        else
  •        {
  •               Send_Dat=1;
  •               Send_Dat=0;
  •               _nop_();
  •        }
  • }
  •                  void Send_192bits( uchar *p1,uchar z)
  • {
  •        unsigned int i=0;        uchar s; uchar x; unsigned char k;
  •                                          s=8;
  •                          x=0;
  •          //    1
  •            for   (i=x;i<s;i++)
  •        {
  •               RGB_BUF=p1[0]>>(i-x)&0x01;                          //转化R_VAL
  •        }
  •                                            s=s+8;
  •                                            x=x+8;
  •               for   (i=x;i<s;i++)
  •        {
  •               RGB_BUF=p1[1]>>(i-x)&0x01;               //转化G_VAL
  •        }
  •                                        s=s+8;
  •                                            x=x+8;
  •                                            for   (i=x;i<s;i++)
  •        {
  •               RGB_BUF=p1[2]>>(i-x)&0x01;
  •                                                     //转化R_VAL
  •        }
  •                                                     s=s+8;
  •                                            x=x+8;
  •                                         for (k=0;k<z;k++)          //循环RGB数量
  •                                   {
  •                          for (i=0;i<24;i++)
  •       {
  •               Send_A_bit(RGB_BUF);
  •        }
  •                                   }
  •                                           }
  •                 void main()
  •                 {
  •                                  P3M0 = 0x00;
  •     P3M1 = 0x00;
  •                                 PLC=0X02;
  •                         while(1)
  •                            {
  •                                 RGBB(65000);  //全体静态显示全彩效果
  •                                  delays(10 );
  •                                 RGBA();//全体流动效果
  •                                                  delays(5);
  •                                 RGBC();//全体变色效果
  •                                                     delays(5);
  •                            }
  • }
  •           void RGBA()                         // 流动效果
  •           {
  •                                          Send_192bits(shuzud[0],9);
  •                                     delays(1);
  •                                                 for (n=0;n<10;n++)
  •                                              {
  •                                              Send_192bits(shuzud[1],n);
  •                                     delays(1);
  •                             }
  •                                                                   for (n=0;n<10;n++)
  •                                              {
  •                                              Send_192bits(shuzud[2],n);
  •                                     delays(1);
  •                                           }
  •                                            }
  •                         void          RGBB(         unsigned int w         )          //全体静态显示全彩效果
  •           {
  •                                                                    unsigned int t;
  •                                                                           for (t=0;t<        w;t++);
  •                                                    Send_192bits(shuzud[2],9);
  •                                                                     for (t=0;t<        w;w++);
  •                                                                   Send_192bits(shuzud[1],8);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                     Send_192bits(shuzud[0],7);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                    Send_192bits(shuzud[5],6);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                       Send_192bits(shuzud[4],5);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                       Send_192bits(shuzud[3],4);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                              Send_192bits(shuzud[2],3);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                                    Send_192bits(shuzud[1],2);
  •                                                                                          for (t=0;t<        w;t++);
  •                                                                                    Send_192bits(shuzud[0],1);
  •                                                                                          for (t=0;t<        w;t++);
  •                          }
  •       void RGBC()           //全体变色效果
  •           {
  •                                  Send_192bits(shuzud[0],9);
  •                                     delays(5);
  •                                    Send_192bits(shuzud[1],9);
  •                                     delays(5);
  •                                   Send_192bits(shuzud[2],9);
  •                                     delays(5);
  •                                    Send_192bits(shuzud[3],9);
  •                                     delays(5);
  •                                    Send_192bits(shuzud[4],9);
  •                                     delays(5);
  •                                    Send_192bits(shuzud[5],9);
  •                                     delays(5);
  •                                   }
  •         void delay()
  • {
  • unsigned int i,j;
  •        for (i=0;i<250;i++)
  •        {
  •               for (j=0;j<200;j++);
  •        }
  • }
  • /*大延时函数*/
  • /*十几秒*/
  • void delays(uchar t)
  • {
  •                    uchar p;
  •          for (p=0; p<t;p++)
  •            {
  •        delay();
  •                                         }
  • }
  • : y7 K3 D9 S* V3 p9 M

, e0 k$ C! |4 m5 P2 f( Q: Z# `复制代码$ [5 J! w1 B$ n5 m' V0 e

; G) K1 v$ m+ H( S8 V

该用户从未签到

2#
发表于 2022-8-29 10:41 | 只看该作者
很好很好,值得学习!!!

该用户从未签到

3#
发表于 2022-8-29 13:10 | 只看该作者
谢谢楼主分享   

该用户从未签到

4#
发表于 2022-8-29 14:33 | 只看该作者
来看看,学习学习

该用户从未签到

5#
发表于 2022-11-13 07:48 | 只看该作者

该用户从未签到

6#
发表于 2022-11-16 10:24 | 只看该作者
RPG就是用PWM控制LED,三色自由组合可以形成多种颜色
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-28 22:03 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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