久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27889|回復: 34
打印 上一主題 下一主題
收起左側

單片機+WS2812B簡單三色切換流水程序+視頻分享

  [復制鏈接]
跳轉到指定樓層
#
采用STC15W204S最小系統板,采用P1.0口做輸出接燈板DIN,編譯時需要加入stc15.h頭文件
制作出來的實物圖如下:


視頻演示:


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

  3. sbit WS2812 = P1^0;
  4. #define numLEDs 22   //燈的個數
  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.    //復位延時
  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.           //經過邏輯分析儀調試的的延時
  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.           //經過邏輯分析儀調試的的延時
  43.                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();  
  44.                 WS2812 = 0;
  45. }

  46. //發送24位數據
  47. void Send_2812_24bits(unsigned char G8,unsigned char R8,unsigned char B8)
  48. {
  49.                    unsigned int n = 0;
  50.                    //發送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.                   //發送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.                         //發送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. //復位碼
  91. void RGB_Rst()
  92. {
  93.             WS2812 = 0;
  94.           Delay50us();
  95. }
  96. //把24位數據GRB碼轉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]);//發送顯示
  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]);//發送顯示

  124.            }
  125. }

  126. //顏色交換24位不拆分發

  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. //復位
  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黑下載附件…………
復制代碼

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


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

34#
ID:345426 發表于 2025-1-8 11:31 | 只看該作者
不錯我用這個成功 22.1184
回復

使用道具 舉報

33#
ID:504289 發表于 2022-8-26 11:08 | 只看該作者
33M晶振可以使用嗎
回復

使用道具 舉報

32#
ID:284050 發表于 2022-6-27 21:52 | 只看該作者
為什么colorWipe(255*32*1024,1000)是紅色呢
回復

使用道具 舉報

31#
ID:962202 發表于 2022-1-14 10:57 | 只看該作者
謝樓主分享了,拿下參考參考!
回復

使用道具 舉報

30#
ID:399179 發表于 2021-12-14 21:59 來自手機 | 只看該作者
3486635230 發表于 2021-6-30 13:57
樓主,要具體的第幾個燈亮什么顏色怎么操作?

同問!我也在研究這個問題,怎奈全是自學的,研究不透啊!
回復

使用道具 舉報

29#
ID:856401 發表于 2021-6-30 13:57 來自手機 | 只看該作者
樓主,要具體的第幾個燈亮什么顏色怎么操作?
回復

使用道具 舉報

28#
ID:856401 發表于 2021-6-29 20:32 來自手機 | 只看該作者
某一個寶上花了0.150元買了一個燈,搞一下
回復

使用道具 舉報

27#
ID:190075 發表于 2021-6-1 16:28 | 只看該作者
aking991 發表于 2019-1-28 11:16
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪

信號腳有沒有對上
回復

使用道具 舉報

26#
ID:190075 發表于 2021-5-30 11:23 | 只看該作者
有沒有顏色表?
回復

使用道具 舉報

25#
ID:156220 發表于 2021-2-26 15:42 | 只看該作者

樓主資料非常好,正在學習,謝謝!
回復

使用道具 舉報

24#
ID:823677 發表于 2021-2-25 09:52 | 只看該作者
很奇怪,藍色+綠色,紅+綠+藍=白色為什么顯示不出?
回復

使用道具 舉報

23#
ID:433219 發表于 2020-12-14 21:18 | 只看該作者
能不能把 視頻 和 c51工程分開啊,18MB附件,下載了幾次到15M左右就0kb下不了了
回復

使用道具 舉報

22#
ID:735961 發表于 2020-11-22 20:36 | 只看該作者
aigo13428149596 發表于 2020-11-20 09:54
非常實用值得學習,非常感謝

我復制源代碼編譯有錯誤

回復

使用道具 舉報

21#
ID:735961 發表于 2020-11-22 20:35 | 只看該作者
資料編譯錯誤幾處
回復

使用道具 舉報

20#
ID:103436 發表于 2020-11-20 09:54 | 只看該作者

非常實用值得學習,非常感謝
回復

使用道具 舉報

19#
ID:791100 發表于 2020-11-9 10:39 | 只看該作者
樓主資料非常好,值得收藏,謝謝!
回復

使用道具 舉報

18#
ID:809905 發表于 2020-11-1 13:45 | 只看該作者
學習了 感謝大佬出的教程
回復

使用道具 舉報

17#
ID:214947 發表于 2020-5-27 20:35 | 只看該作者
不錯啊
回復

使用道具 舉報

16#
ID:281113 發表于 2020-2-16 21:45 | 只看該作者
謝謝分享。!
回復

使用道具 舉報

15#
ID:97300 發表于 2020-1-23 14:21 | 只看該作者
謝謝分享
回復

使用道具 舉報

14#
ID:652686 發表于 2020-1-1 15:52 | 只看該作者
正好想用WS2812B,學習一下。
回復

使用道具 舉報

13#
ID:170835 發表于 2019-11-17 23:28 | 只看該作者
記號,過幾天研究一下
回復

使用道具 舉報

12#
ID:385637 發表于 2019-9-28 10:25 | 只看該作者
有個地方沒搞明白,綠色255*16 =4080 ,轉換二進制就是111111110000,右移8位就是1111了,不因該是1111111100000000才對嗎?
回復

使用道具 舉報

11#
ID:299054 發表于 2019-9-17 18:01 | 只看該作者
學習下,感謝分享
回復

使用道具 舉報

10#
ID:196720 發表于 2019-7-13 11:25 | 只看該作者
謝謝分享,學習學習
回復

使用道具 舉報

9#
ID:157166 發表于 2019-7-13 09:45 | 只看該作者
學習一下,謝謝
回復

使用道具 舉報

8#
ID:538984 發表于 2019-5-15 16:05 | 只看該作者
謝謝分享,拿來學習一下
回復

使用道具 舉報

7#
ID:243748 發表于 2019-4-29 05:02 來自手機 | 只看該作者
準備做一個玩下
回復

使用道具 舉報

6#
ID:432307 發表于 2019-4-28 15:09 | 只看該作者
學習下,感謝分享
回復

使用道具 舉報

5#
ID:253945 發表于 2019-4-1 08:53 | 只看該作者
剛試了,代碼沒問題,注意燈的信號方向
回復

使用道具 舉報

地板
ID:65956 發表于 2019-1-28 11:16 | 只看該作者
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪
回復

使用道具 舉報

板凳
ID:454600 發表于 2018-12-25 17:13 | 只看該作者
學習下,感謝分享
回復

使用道具 舉報

沙發
ID:86020 發表于 2018-12-24 22:04 | 只看該作者
謝謝分享
回復

使用道具 舉報

樓主
ID:86020 發表于 2018-12-24 22:03 | 只看該作者
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色综合久久天天综合网 | 一区二区日本 | 免费精品视频 | 色天天综合| 婷婷色国产偷v国产偷v小说 | 欧美一级二级三级视频 | 狠狠爱网址| 中文字幕视频在线免费 | 亚洲欧美中文日韩在线v日本 | 在线欧美日韩 | 欧美高清性xxxxhdvideosex | a欧美 | 99久久中文字幕三级久久日本 | 欧美一区 | 欧美a视频| 国产精品久久久久久久久久 | av黄色国产 | 国产99久久精品一区二区300 | 国产美女福利在线观看 | 精品伊人久久 | 成人国产精品免费观看 | 成年人在线视频 | 99精品国自产在线 | 涩爱av一区二区三区 | 亚洲一区二区中文字幕 | 91看片| 成人福利在线 | 日一日操一操 | 麻豆视频在线看 | 激情视频中文字幕 | 国产一级片在线观看视频 | 91私密视频 | 欧美综合国产精品久久丁香 | 国产一区二区三区免费 | 亚洲热在线视频 | 中文字幕在线视频免费观看 | 久久欧美精品 | 国产精品福利在线 | 日本午夜精品 | 免费视频99 | 亚洲不卡在线观看 |