找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 17473|回復(fù): 30
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)WS2812B RGB LED驅(qū)動(dòng)程序 可以控制200個(gè)RGB

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:481908 發(fā)表于 2019-2-28 11:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51單片機(jī)WS2812BRGB

可以控制200個(gè)RGB

單片機(jī)源程序如下:
  1.           #include<reg52.h>
  2. #include<intrins.h>

  3.                 //單片機(jī)為15系列  晶振內(nèi)部27M  分頻為0X02
  4.                 //可以控制1024 個(gè)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(); //流動(dòng)效果
  11.                   void RGBB(        unsigned int w);//靜態(tài)顯示全彩
  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} ;         //藍(lán)
  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} ,           //藍(lán)
  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;                          //轉(zhuǎn)化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;               //轉(zhuǎn)化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.                                                     //轉(zhuǎn)化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++)          //循環(huán)RGB數(shù)量
  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);  //全體靜態(tài)顯示全彩效果
  152.                                  
  153.                                  delays(10 );

  154.                                 RGBA();//全體流動(dòng)效果
  155.                                                  delays(5);

  156.                                 RGBC();//全體變色效果

  157.                                                     delays(5);



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

  163.           void RGBA()                         // 流動(dòng)效果
  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         )          //全體靜態(tài)顯示全彩效果



  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. /*大延時(shí)函數(shù)*/
  243. /*十幾秒*/
  244. void delays(uchar t)
  245. {
  246.                    uchar p;


  247.          for (p=0; p<t;p++)
  248.            {
  249.        delay();
  250.               
  251.                                         }
  252.       
  253. }
復(fù)制代碼

所有資料51hei提供下載:
優(yōu)化RGB.rar (25.16 KB, 下載次數(shù): 583)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏29 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:60656 發(fā)表于 2019-3-7 22:14 | 只看該作者
好資料收藏學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:473186 發(fā)表于 2019-3-8 16:49 | 只看該作者
52單片機(jī)應(yīng)該跟不上,這玩意最少要24M的,宏晶其他型號(hào)可以
回復(fù)

使用道具 舉報(bào)

地板
ID:243748 發(fā)表于 2019-3-9 21:12 來(lái)自手機(jī) | 只看該作者
有電路圖嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:265485 發(fā)表于 2019-3-17 20:54 | 只看該作者
這程序不行試了沒(méi)有效果
回復(fù)

使用道具 舉報(bào)

6#
ID:67356 發(fā)表于 2019-3-18 06:58 來(lái)自手機(jī) | 只看該作者
好,。謝,回來(lái)看看
回復(fù)

使用道具 舉報(bào)

7#
ID:243748 發(fā)表于 2019-8-2 20:46 來(lái)自手機(jī) | 只看該作者
明天試一下
回復(fù)

使用道具 舉報(bào)

8#
ID:299054 發(fā)表于 2019-9-5 17:04 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

9#
ID:358797 發(fā)表于 2019-12-4 13:56 | 只看該作者
穩(wěn)定嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:652686 發(fā)表于 2020-1-1 15:57 | 只看該作者
正好想用WS2812B做一個(gè)燈,好資料收藏學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

11#
ID:690219 發(fā)表于 2020-3-5 17:22 | 只看該作者
有電路圖共參考嗎?
51單片機(jī)真的可以實(shí)現(xiàn)嗎?
回復(fù)

使用道具 舉報(bào)

12#
ID:686314 發(fā)表于 2020-3-18 17:10 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

13#
ID:791100 發(fā)表于 2020-11-6 20:21 | 只看該作者
樓主資料非常好,值得收藏,謝謝!
回復(fù)

使用道具 舉報(bào)

14#
ID:791100 發(fā)表于 2020-11-7 20:11 | 只看該作者

樓主資料非常好,值得收藏,謝謝!
回復(fù)

使用道具 舉報(bào)

15#
ID:89286 發(fā)表于 2020-11-8 17:48 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報(bào)

16#
ID:845476 發(fā)表于 2022-1-9 18:32 | 只看該作者
請(qǐng)問(wèn)樓主,為什么我的第一顆燈是白色的特別亮
回復(fù)

使用道具 舉報(bào)

17#
ID:1003871 發(fā)表于 2022-2-12 22:47 | 只看該作者
200個(gè)。。。。出錯(cuò)了是不是就都不好使了
回復(fù)

使用道具 舉報(bào)

18#
ID:977804 發(fā)表于 2022-2-21 11:25 來(lái)自手機(jī) | 只看該作者
xo520 發(fā)表于 2022-1-9 18:32
請(qǐng)問(wèn)樓主,為什么我的第一顆燈是白色的特別亮

白光,說(shuō)明頻率不夠。要增大主頻
回復(fù)

使用道具 舉報(bào)

19#
ID:583681 發(fā)表于 2022-8-25 08:40 | 只看該作者
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。
回復(fù)

使用道具 舉報(bào)

20#
ID:1013588 發(fā)表于 2022-8-28 10:22 | 只看該作者
謝謝分享,以后有機(jī)會(huì)試試
回復(fù)

使用道具 舉報(bào)

21#
ID:1062369 發(fā)表于 2023-4-26 00:24 來(lái)自手機(jī) | 只看該作者
gzpylyf 發(fā)表于 2022-8-25 08:40
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。

請(qǐng)問(wèn)是怎么做到的
回復(fù)

使用道具 舉報(bào)

22#
ID:1053359 發(fā)表于 2023-4-28 09:19 | 只看該作者
不知道行不行,先下載研究,,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

23#
ID:1096871 發(fā)表于 2023-10-22 15:04 | 只看該作者
試過(guò)了,的確可以點(diǎn)亮,謝謝樓主
回復(fù)

使用道具 舉報(bào)

24#
ID:1096871 發(fā)表于 2023-10-22 15:05 | 只看該作者
謝謝樓主,試過(guò)了,的確可以點(diǎn)亮,現(xiàn)在在樓主的程序上做動(dòng)態(tài)變化,謝謝樓主
回復(fù)

使用道具 舉報(bào)

25#
ID:398094 發(fā)表于 2023-11-22 09:21 | 只看該作者
好資料收藏學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

26#
ID:1068132 發(fā)表于 2023-12-3 20:38 | 只看該作者
為什么我移植到STC8G2K32S4燈亮不了
回復(fù)

使用道具 舉報(bào)

27#
ID:433219 發(fā)表于 2023-12-4 09:05 | 只看該作者
具體要說(shuō)下,哪個(gè)型號(hào)和IRC頻率
回復(fù)

使用道具 舉報(bào)

28#
ID:31514 發(fā)表于 2024-1-5 17:25 | 只看該作者
感謝分享,主要學(xué)習(xí)漸變色算法
回復(fù)

使用道具 舉報(bào)

29#
ID:72224 發(fā)表于 2024-2-2 10:27 | 只看該作者
STC輕松驅(qū)動(dòng)1000個(gè)WS2812
回復(fù)

使用道具 舉報(bào)

30#
ID:807361 發(fā)表于 2024-4-28 22:05 | 只看該作者
感謝分享,主要學(xué)習(xí)漸變色算法
回復(fù)

使用道具 舉報(bào)

31#
ID:1069621 發(fā)表于 2025-5-12 15:29 | 只看該作者
gzpylyf 發(fā)表于 2022-8-25 08:40
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。

你是咋做的,有源代碼提供參考嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表