欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機+WS2812B簡單三色切換流水程序+視頻分享 [打印本頁]

作者: yuren1984    時間: 2018-12-9 19:31
標(biāo)題: 單片機+WS2812B簡單三色切換流水程序+視頻分享
采用STC15W204S最小系統(tǒng)板,采用P1.0口做輸出接燈板DIN,編譯時需要加入stc15.h頭文件
制作出來的實物圖如下:


視頻演示:


單片機源碼:
  1. #include<stc15.h>
  2. #include"intrins.h"

  3. sbit WS2812 = P1^0;
  4. #define numLEDs 22   //燈的個數(shù)
  5. unsigned char buf_R[numLEDs] = {0};//顏色緩存
  6. unsigned char buf_G[numLEDs] = {0};
  7. unsigned char buf_B[numLEDs] = {0};

  8. void RGB_Set_Up();  //送0碼
  9. void RGB_Set_Down(); //送1碼

  10. void HAL_Delay(unsigned int t)
  11. {
  12.                   unsigned int x,y;
  13.                   for(x=114;x>0;x--)
  14.           for(y=t;y>0;y--);
  15. }

  16.    //復(fù)位延時
  17. void Delay50us()                //@22.1184MHz
  18. {
  19.         unsigned char i, j;

  20.         _nop_();
  21.         _nop_();
  22.         i = 2;
  23.         j = 15;
  24.         do
  25.         {
  26.                 while (--j);
  27.         } while (--i);
  28. }
  29. //1碼,高電平850ns 低電平400ns 誤差正負150ns
  30. void RGB_Set_Up()
  31. {
  32.                 WS2812 = 1;
  33.           //經(jīng)過邏輯分析儀調(diào)試的的延時
  34.                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  35.           _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  36.                 WS2812 = 0;
  37. }
  38. //1碼,高電平400ns 低電平850ns 誤差正負150ns
  39. void RGB_Set_Down()
  40. {
  41.    WS2812 = 1;
  42.           //經(jīng)過邏輯分析儀調(diào)試的的延時
  43.                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();  
  44.                 WS2812 = 0;
  45. }

  46. //發(fā)送24位數(shù)據(jù)
  47. void Send_2812_24bits(unsigned char G8,unsigned char R8,unsigned char B8)
  48. {
  49.                    unsigned int n = 0;
  50.                    //發(fā)送G8位
  51.                   for(n=0;n<8;n++)
  52.                   {
  53.                       G8<<=n;
  54.                           if(G8&0x80 == 0x80)
  55.                           {
  56.                              RGB_Set_Up();
  57.                           }
  58.                           else
  59.                           {
  60.                             RGB_Set_Down();
  61.                           }
  62.                   }
  63.                   //發(fā)送R8位
  64.                   for(n=0;n<8;n++)
  65.                   {
  66.                       R8<<=n;
  67.                           if(R8&0x80 == 0x80)
  68.                           {
  69.                              RGB_Set_Up();
  70.                           }
  71.                           else
  72.                           {
  73.                             RGB_Set_Down();
  74.                           }
  75.                   }
  76.                         //發(fā)送B8位
  77.                     for(n=0;n<8;n++)
  78.                   {
  79.                       B8<<=n;
  80.                           if(B8&0x80 == 0x80)
  81.                           {
  82.                              RGB_Set_Up();
  83.                           }
  84.                           else
  85.                           {
  86.                             RGB_Set_Down();
  87.                            }
  88.                   }
  89. }                 
  90. //復(fù)位碼
  91. void RGB_Rst()
  92. {
  93.             WS2812 = 0;
  94.           Delay50us();
  95. }
  96. //把24位數(shù)據(jù)GRB碼轉(zhuǎn)RGB
  97. void Set_Colour(unsigned char r,unsigned char g,unsigned char b)
  98. {
  99.             unsigned char i;
  100.           for(i=0;i<numLEDs;i++)
  101.           {
  102.              buf_R[i] = r; //緩沖
  103.                  buf_G[i] = g;
  104.                  buf_B[i] = b;
  105.           }
  106.            for(i=0;i<numLEDs;i++)
  107.            {
  108.               Send_2812_24bits(buf_G[i],buf_R[i],buf_B[i]);//發(fā)送顯示
  109.            }
  110. }
  111. //某一個點顯示的顏色
  112. void SetPointColour(unsigned int num,unsigned char r,unsigned char g,unsigned char b)
  113. {
  114.             unsigned char i;
  115.            for(i=0;i<numLEDs;i++)
  116.            {
  117.               buf_R[num] = r;//緩沖
  118.                    buf_G[num] = g;
  119.                    buf_B[num] = b;
  120.            }
  121.        for(i=0;i<numLEDs;i++)
  122.            {
  123.               Send_2812_24bits(buf_G[i],buf_R[i],buf_B[i]);//發(fā)送顯示

  124.            }
  125. }

  126. //顏色交換24位不拆分發(fā)

  127. void SetPixelColor(unsigned char num,unsigned long c)
  128. {
  129.            unsigned char i;
  130.        for(i=0;i<numLEDs;i++)
  131.            {
  132.               buf_R[num] = (unsigned char)(c>>16);
  133.                           buf_G[num] = (unsigned char)(c>>8);
  134.                           buf_B[num] = (unsigned char)(c);
  135.            }

  136.                  for(i=0;i<numLEDs;i++)
  137.                 {
  138.                         Send_2812_24bits(buf_G[i],buf_R[i],buf_B[i]);
  139.                 }

  140. }

  141. //復(fù)位
  142. void PixelUpdate()
  143. {
  144.         RGB_Rst();
  145. }


  146. // Fill the dots one after the other with a color
  147. //用一種顏色填充這些圓點
  148. void colorWipe(unsigned long c, unsigned int wait)
  149. {
  150.   unsigned int i=0;
  151.   for( i=0; i<numLEDs; i++)
  152.         {
  153.     SetPixelColor(i, c);
  154.     PixelUpdate();
  155.     HAL_Delay(wait);
  156.   }

  157. }

  158. void main()
  159. {
  160.                 while(1)
  161.                 {         
  162.                         
  163.                               colorWipe(255*32*1024,1000);//紅色
  164.                                    colorWipe(0,1000);
  165.                                   colorWipe(255*16,1000);         //綠色
  166.                                         colorWipe(0,1000);
  167.                                   colorWipe(255,1000);//藍色
  168.                                    colorWipe(0,1000);
  169.                                    colorWipe(255*32*1024+255*16,1000);//紅色+綠色
  170.                                    colorWipe(0,1000);
  171.                                    colorWipe(255*32*1024+255,1000);//紅色+藍色
  172.                                    colorWipe(0,1000);
  173.                                    colorWipe(255*16+255,1000);        //綠色+藍色
  174.                                         colorWipe(0,1000);
  175.                                         colorWipe(255*32*1024+255*16+255,1000);        //紅色+綠色+藍色
  176.                                         colorWipe(0,1000);
  177.                                         colorWipe(255*32*1024,100);        //紅色
  178.                                          HAL_Delay(10000);
  179.                                         colorWipe(255*16,100);         //綠色
  180.                                         HAL_Delay(10000);
  181.                                         colorWipe(255,100);//藍色
  182.                                         HAL_Delay(10000);
  183.                                    colorWipe(255*32*1024+255*16,100);//紅色+綠色
  184.                                    HAL_Delay(10000);
  185. …………
  186. …………
  187. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

全部資料51hei下載地址:
ws2812三色切換.rar (18.4 MB, 下載次數(shù): 691)



作者: dhii1234    時間: 2018-12-24 22:03
謝謝分享
作者: dhii1234    時間: 2018-12-24 22:04
謝謝分享
作者: LitteR0517    時間: 2018-12-25 17:13
學(xué)習(xí)下,感謝分享
作者: aking991    時間: 2019-1-28 11:16
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪
作者: 索隆333    時間: 2019-4-1 08:53
剛試了,代碼沒問題,注意燈的信號方向
作者: 525215455    時間: 2019-4-28 15:09
學(xué)習(xí)下,感謝分享
作者: wuxishun    時間: 2019-4-29 05:02
準(zhǔn)備做一個玩下
作者: ytyt100    時間: 2019-5-15 16:05
謝謝分享,拿來學(xué)習(xí)一下
作者: lukeyou    時間: 2019-7-13 09:45
學(xué)習(xí)一下,謝謝
作者: quest_smt    時間: 2019-7-13 11:25
謝謝分享,學(xué)習(xí)學(xué)習(xí)
作者: pxh316    時間: 2019-9-17 18:01
學(xué)習(xí)下,感謝分享
作者: shenyuqiu    時間: 2019-9-28 10:25
有個地方?jīng)]搞明白,綠色255*16 =4080 ,轉(zhuǎn)換二進制就是111111110000,右移8位就是1111了,不因該是1111111100000000才對嗎?
作者: widkzdwitm    時間: 2019-11-17 23:28
記號,過幾天研究一下
作者: luojie111    時間: 2020-1-1 15:52
正好想用WS2812B,學(xué)習(xí)一下。
作者: pkwong    時間: 2020-1-23 14:21
謝謝分享
作者: 張明211    時間: 2020-2-16 21:45
謝謝分享!!!
作者: xuelilin    時間: 2020-5-27 20:35
不錯啊
作者: q15577909642    時間: 2020-11-1 13:45
學(xué)習(xí)了 感謝大佬出的教程
作者: King23    時間: 2020-11-9 10:39
樓主資料非常好,值得收藏,謝謝!
作者: aigo13428149596    時間: 2020-11-20 09:54

非常實用值得學(xué)習(xí),非常感謝
作者: 中山-燈帶-曹    時間: 2020-11-22 20:35
資料編譯錯誤幾處
作者: 中山-燈帶-曹    時間: 2020-11-22 20:36
aigo13428149596 發(fā)表于 2020-11-20 09:54
非常實用值得學(xué)習(xí),非常感謝

我復(fù)制源代碼編譯有錯誤


作者: wkman    時間: 2020-12-14 21:18
能不能把 視頻 和 c51工程分開啊,18MB附件,下載了幾次到15M左右就0kb下不了了
作者: dpj888888    時間: 2021-2-25 09:52
很奇怪,藍色+綠色,紅+綠+藍=白色為什么顯示不出?
作者: 紫色的云    時間: 2021-2-26 15:42

樓主資料非常好,正在學(xué)習(xí),謝謝!
作者: a8619300    時間: 2021-5-30 11:23
有沒有顏色表?
作者: a8619300    時間: 2021-6-1 16:28
aking991 發(fā)表于 2019-1-28 11:16
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪

信號腳有沒有對上

作者: 3486635230    時間: 2021-6-29 20:32
某一個寶上花了0.150元買了一個燈,搞一下
作者: 3486635230    時間: 2021-6-30 13:57
樓主,要具體的第幾個燈亮什么顏色怎么操作?
作者: 快樂眼淚    時間: 2021-12-14 21:59
3486635230 發(fā)表于 2021-6-30 13:57
樓主,要具體的第幾個燈亮什么顏色怎么操作?

同問!我也在研究這個問題,怎奈全是自學(xué)的,研究不透啊!
作者: sd3114336    時間: 2022-1-14 10:57
謝樓主分享了,拿下參考參考!
作者: 川人在柳    時間: 2022-6-27 21:52
為什么colorWipe(255*32*1024,1000)是紅色呢
作者: FREEDOG    時間: 2022-8-26 11:08
33M晶振可以使用嗎
作者: dianzifashaoyou    時間: 2025-1-8 11:31
不錯我用這個成功 22.1184




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