標(biāo)題: 51單片機(jī)WS2812B RGB LED驅(qū)動(dòng)程序 可以控制200個(gè)RGB [打印本頁(yè)]

作者: NASA999    時(shí)間: 2019-2-28 11:25
標(biāo)題: 51單片機(jī)WS2812B RGB LED驅(qū)動(dòng)程序 可以控制200個(gè)RGB
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)



作者: zxq9781    時(shí)間: 2019-3-7 22:14
好資料收藏學(xué)習(xí),謝謝
作者: zhengchong60    時(shí)間: 2019-3-8 16:49
52單片機(jī)應(yīng)該跟不上,這玩意最少要24M的,宏晶其他型號(hào)可以
作者: wuxishun    時(shí)間: 2019-3-9 21:12
有電路圖嗎
作者: wanli2018    時(shí)間: 2019-3-17 20:54
這程序不行試了沒(méi)有效果
作者: jmkl128    時(shí)間: 2019-3-18 06:58
好,。謝,回來(lái)看看
作者: wuxishun    時(shí)間: 2019-8-2 20:46
明天試一下
作者: pxh316    時(shí)間: 2019-9-5 17:04
謝謝分享!
作者: 32654153    時(shí)間: 2019-12-4 13:56
穩(wěn)定嗎

作者: luojie111    時(shí)間: 2020-1-1 15:57
正好想用WS2812B做一個(gè)燈,好資料收藏學(xué)習(xí),謝謝
作者: 倪麗青風(fēng)    時(shí)間: 2020-3-5 17:22
有電路圖共參考嗎?
51單片機(jī)真的可以實(shí)現(xiàn)嗎?
作者: temp-tp    時(shí)間: 2020-3-18 17:10
謝謝樓主
作者: King23    時(shí)間: 2020-11-6 20:21
樓主資料非常好,值得收藏,謝謝!
作者: King23    時(shí)間: 2020-11-7 20:11

樓主資料非常好,值得收藏,謝謝!
作者: faridzled    時(shí)間: 2020-11-8 17:48
thanks for sharing
作者: xo520    時(shí)間: 2022-1-9 18:32
請(qǐng)問(wèn)樓主,為什么我的第一顆燈是白色的特別亮
作者: lazygoat    時(shí)間: 2022-2-12 22:47
200個(gè)。。。。出錯(cuò)了是不是就都不好使了
作者: 3花木城    時(shí)間: 2022-2-21 11:25
xo520 發(fā)表于 2022-1-9 18:32
請(qǐng)問(wèn)樓主,為什么我的第一顆燈是白色的特別亮

白光,說(shuō)明頻率不夠。要增大主頻
作者: gzpylyf    時(shí)間: 2022-8-25 08:40
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。
作者: 龍小白    時(shí)間: 2022-8-28 10:22
謝謝分享,以后有機(jī)會(huì)試試
作者: Dawn_Calm    時(shí)間: 2023-4-26 00:24
gzpylyf 發(fā)表于 2022-8-25 08:40
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。

請(qǐng)問(wèn)是怎么做到的
作者: real8799190    時(shí)間: 2023-4-28 09:19
不知道行不行,先下載研究,,感謝樓主分享
作者: 珠與淚的結(jié)合    時(shí)間: 2023-10-22 15:04
試過(guò)了,的確可以點(diǎn)亮,謝謝樓主
作者: 珠與淚的結(jié)合    時(shí)間: 2023-10-22 15:05
謝謝樓主,試過(guò)了,的確可以點(diǎn)亮,現(xiàn)在在樓主的程序上做動(dòng)態(tài)變化,謝謝樓主
作者: maijinzhi    時(shí)間: 2023-11-22 09:21
好資料收藏學(xué)習(xí),謝謝
作者: 吳俊權(quán)    時(shí)間: 2023-12-3 20:38
為什么我移植到STC8G2K32S4燈亮不了
作者: wkman    時(shí)間: 2023-12-4 09:05
具體要說(shuō)下,哪個(gè)型號(hào)和IRC頻率
作者: tamadeji303    時(shí)間: 2024-1-5 17:25
感謝分享,主要學(xué)習(xí)漸變色算法
作者: VECENT_LIN    時(shí)間: 2024-2-2 10:27
STC輕松驅(qū)動(dòng)1000個(gè)WS2812
作者: xieqinfu    時(shí)間: 2024-4-28 22:05
感謝分享,主要學(xué)習(xí)漸變色算法
作者: 初夏a    時(shí)間: 2025-5-12 15:29
gzpylyf 發(fā)表于 2022-8-25 08:40
我微改了一下程序,11.0592M的單片機(jī)都可以適應(yīng)。

你是咋做的,有源代碼提供參考嗎?





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1