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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27763|回復: 34
收起左側

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

  [復制鏈接]
ID:439460 發表于 2018-12-9 19:31 | 顯示全部樓層 |閱讀模式
采用STC15W204S最小系統板,采用P1.0口做輸出接燈板DIN,編譯時需要加入stc15.h頭文件
制作出來的實物圖如下:
0.jpg

視頻演示:
0.png 0.png

單片機源碼:
  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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:86020 發表于 2018-12-24 22:03 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:86020 發表于 2018-12-24 22:04 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:454600 發表于 2018-12-25 17:13 | 顯示全部樓層
學習下,感謝分享
回復

使用道具 舉報

ID:65956 發表于 2019-1-28 11:16 | 顯示全部樓層
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪
回復

使用道具 舉報

ID:253945 發表于 2019-4-1 08:53 | 顯示全部樓層
剛試了,代碼沒問題,注意燈的信號方向
回復

使用道具 舉報

ID:432307 發表于 2019-4-28 15:09 | 顯示全部樓層
學習下,感謝分享
回復

使用道具 舉報

ID:243748 發表于 2019-4-29 05:02 來自手機 | 顯示全部樓層
準備做一個玩下
回復

使用道具 舉報

ID:538984 發表于 2019-5-15 16:05 | 顯示全部樓層
謝謝分享,拿來學習一下
回復

使用道具 舉報

ID:157166 發表于 2019-7-13 09:45 | 顯示全部樓層
學習一下,謝謝
回復

使用道具 舉報

ID:196720 發表于 2019-7-13 11:25 | 顯示全部樓層
謝謝分享,學習學習
回復

使用道具 舉報

ID:299054 發表于 2019-9-17 18:01 | 顯示全部樓層
學習下,感謝分享
回復

使用道具 舉報

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

使用道具 舉報

ID:170835 發表于 2019-11-17 23:28 | 顯示全部樓層
記號,過幾天研究一下
回復

使用道具 舉報

ID:652686 發表于 2020-1-1 15:52 | 顯示全部樓層
正好想用WS2812B,學習一下。
回復

使用道具 舉報

ID:97300 發表于 2020-1-23 14:21 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:281113 發表于 2020-2-16 21:45 | 顯示全部樓層
謝謝分享!!!
回復

使用道具 舉報

ID:214947 發表于 2020-5-27 20:35 | 顯示全部樓層
不錯啊
回復

使用道具 舉報

ID:809905 發表于 2020-11-1 13:45 | 顯示全部樓層
學習了 感謝大佬出的教程
回復

使用道具 舉報

ID:791100 發表于 2020-11-9 10:39 | 顯示全部樓層
樓主資料非常好,值得收藏,謝謝!
回復

使用道具 舉報

ID:103436 發表于 2020-11-20 09:54 | 顯示全部樓層

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

使用道具 舉報

ID:735961 發表于 2020-11-22 20:35 | 顯示全部樓層
資料編譯錯誤幾處
回復

使用道具 舉報

ID:735961 發表于 2020-11-22 20:36 | 顯示全部樓層
aigo13428149596 發表于 2020-11-20 09:54
非常實用值得學習,非常感謝

我復制源代碼編譯有錯誤

回復

使用道具 舉報

ID:433219 發表于 2020-12-14 21:18 | 顯示全部樓層
能不能把 視頻 和 c51工程分開啊,18MB附件,下載了幾次到15M左右就0kb下不了了
回復

使用道具 舉報

ID:823677 發表于 2021-2-25 09:52 | 顯示全部樓層
很奇怪,藍色+綠色,紅+綠+藍=白色為什么顯示不出?
回復

使用道具 舉報

ID:156220 發表于 2021-2-26 15:42 | 顯示全部樓層

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

使用道具 舉報

ID:190075 發表于 2021-5-30 11:23 | 顯示全部樓層
有沒有顏色表?
回復

使用道具 舉報

ID:190075 發表于 2021-6-1 16:28 | 顯示全部樓層
aking991 發表于 2019-1-28 11:16
我沒點亮,不知道是什么原因,我用的單片機是15W4K56S4,晶振22.1184M,不知道錯在哪

信號腳有沒有對上
回復

使用道具 舉報

ID:856401 發表于 2021-6-29 20:32 來自手機 | 顯示全部樓層
某一個寶上花了0.150元買了一個燈,搞一下
回復

使用道具 舉報

ID:856401 發表于 2021-6-30 13:57 來自手機 | 顯示全部樓層
樓主,要具體的第幾個燈亮什么顏色怎么操作?
回復

使用道具 舉報

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

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

使用道具 舉報

ID:962202 發表于 2022-1-14 10:57 | 顯示全部樓層
謝樓主分享了,拿下參考參考!
回復

使用道具 舉報

ID:284050 發表于 2022-6-27 21:52 | 顯示全部樓層
為什么colorWipe(255*32*1024,1000)是紅色呢
回復

使用道具 舉報

ID:504289 發表于 2022-8-26 11:08 | 顯示全部樓層
33M晶振可以使用嗎
回復

使用道具 舉報

ID:345426 發表于 2025-1-8 11:31 | 顯示全部樓層
不錯我用這個成功 22.1184
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区三区在线观看 | 一区二区三区视频在线观看 | 亚洲欧洲成人 | 97福利在线 | www.久久99 | 91久久精品国产91久久 | 免费看国产片在线观看 | 91文字幕巨乱亚洲香蕉 | 亚洲精品一二三区 | 欧美精品中文字幕久久二区 | 羞羞色在线观看 | 91久久视频 | 特级特黄特色的免费大片 | 黄视频网站免费观看 | 午夜小影院 | 亚洲一二三在线观看 | av国产在线观看 | 国产精品污www一区二区三区 | 九九导航 | 三级成人在线 | 日韩激情一区 | 日韩精品亚洲专区在线观看 | 亚洲精品国产a久久久久久 午夜影院网站 | 91精品国产自产精品男人的天堂 | 亚州精品天堂中文字幕 | 国产精品免费在线 | 五月综合激情在线 | 91在线一区 | 中文字幕国产高清 | 色综合久久天天综合网 | 国产乱码精品一区二区三区忘忧草 | 91精品国产91久久久久久吃药 | 亚洲国产欧美国产综合一区 | 91精品国产91久久久久久 | 国产在线一区二区三区 | 亚洲精品免费在线 | 99久久婷婷国产亚洲终合精品 | 一级a爱片性色毛片免费 | 成人国产精品 | heyzo在线 | 欧美精品久久久久久久久老牛影院 |