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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 22154|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

STC15W204S單片機(jī)control ws2812B七彩流水燈程序(36燈)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:439460 發(fā)表于 2019-1-5 14:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
STC15W204S-SOP16郔苤炵苀啣-v1.0萇繚芞.pdf (23.23 KB, 下載次數(shù): 234) 上次程序更新后,STC15W204s控制ws2812B七彩流水燈,發(fā)現(xiàn)一個問題,就是keil C編譯時,燈數(shù)調(diào)整為37時,一直報錯說內(nèi)存超出,希望高手能指點迷津,現(xiàn)在將36燈程序分享給大家:

單片機(jī)源碼:
  1. #include<stc15.h>
  2. #include"intrins.h"
  3. sbit WS2812 = P1^0;
  4. #define numLEDs 36  //燈的個數(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 long 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()  [url=]//@22.1184MHz[/url]
  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 誤差正負(fù)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 誤差正負(fù)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位不拆分發(fā)
  97. void SetPixelColor(unsigned char num,unsigned long c)
  98. {
  99.     unsigned char i;
  100.        for(i=0;i<numLEDs;i++)
  101.     {
  102.        buf_R[num] = (unsigned char)(c>>16);
  103.      buf_G[num] = (unsigned char)(c>>8);
  104.      buf_B[num] = (unsigned char)(c);
  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. //復(fù)位
  112. void PixelUpdate()
  113. {
  114. RGB_Rst();
  115. }

  116. // Fill the dots one after the other with a color
  117. //用一種顏色填充這些圓點
  118. void colorWipe(unsigned long c, unsigned int wait)
  119. {
  120.   unsigned char i=0;
  121.   for( i=0; i<numLEDs; i++)
  122. {
  123.     SetPixelColor(i, c);
  124.     PixelUpdate();
  125.     HAL_Delay(wait*5);
  126.   }
  127. }
  128. //單燈流水
  129. void Watercolor(unsigned long c, unsigned int wait)
  130. {
  131.   unsigned char i=0;
  132.   for( i=0; i<numLEDs; i++)
  133. {
  134.     SetPixelColor(i, c);
  135.   PixelUpdate();
  136.     HAL_Delay(wait*5);
  137. SetPixelColor(i, 0);
  138.    PixelUpdate();
  139.     HAL_Delay(wait);
  140.   }
  141. }


  142. void main()
  143. {
  144.   while(1)
  145.   {   
  146.    
  147.       
  148.        colorWipe(0xff0000,1); //紅色全亮
  149.       HAL_Delay(10000);
  150.        colorWipe(0xff00,1);  //綠色全亮
  151.      HAL_Delay(10000);
  152.        colorWipe(0xff,1);//藍(lán)色全亮
  153.      HAL_Delay(10000);
  154.        colorWipe(0xffff00,1); //黃色全亮
  155.       HAL_Delay(10000);
  156.        colorWipe(0xffff,1); //青色全亮
  157.       HAL_Delay(10000);
  158.        colorWipe(0xff00ff,1); //紫色全亮
  159.       HAL_Delay(10000);
  160.        colorWipe(0xffffff,1); //白色全亮
  161.       HAL_Delay(10000);
  162.        colorWipe(0x00,1); //off
  163.       HAL_Delay(10000);
  164.         Watercolor(0xff0000, 100);//紅色單燈流水
  165.       HAL_Delay(1000);
  166.      Watercolor(0xff00, 100);//綠色單燈流水
  167.       HAL_Delay(1000);
  168.      Watercolor(0xff, 100);//藍(lán)色單燈流水
  169.       HAL_Delay(1000);
  170.      Watercolor(0xffff00, 100); //黃色單燈流水
  171.       HAL_Delay(1000);
  172.      Watercolor(0xffff, 100);//青色單燈流水
  173.       HAL_Delay(1000);
  174.      Watercolor(0xff00ff, 100); //紫色單燈流水
  175.       HAL_Delay(1000);
  176.      Watercolor(0xffffff, 100); //白色單燈流水
  177.       HAL_Delay(1000);
  178.       
  179.      colorWipe(0x00,1); //off
  180.       HAL_Delay(10000);
  181.      colorWipe(0xff0000,100); //紅色逐個點亮
  182.       HAL_Delay(1000);
  183.      colorWipe(0x00,100); //0ff
  184.       HAL_Delay(1000);
  185.      colorWipe(0xff00,100);  //綠色逐個點亮
  186.       HAL_Delay(1000);
  187.      colorWipe(0x00,100); //0ff
  188.       HAL_Delay(1000);
  189.      colorWipe(0xff,100);//藍(lán)色逐個點亮
  190.       HAL_Delay(1000);
  191.         colorWipe(0x00,100); //0ff
  192.       HAL_Delay(1000);
  193.         colorWipe(0xffff00,100); //黃色逐個點亮
  194.       HAL_Delay(1000);
  195.      colorWipe(0x00,100); //0ff
  196.       HAL_Delay(1000);
  197.      colorWipe(0xffff,100); //青色逐個點亮
  198.       HAL_Delay(1000);
  199.      colorWipe(0x00,100); //0ff
  200.       HAL_Delay(1000);
  201.      colorWipe(0xff00ff,100); //紫色逐個點亮
  202.       HAL_Delay(1000);
  203.       colorWipe(0x00,100); //0ff
  204.       HAL_Delay(1000);
  205.         colorWipe(0xffffff,100); //白色逐個點亮
  206.       HAL_Delay(1000);
  207.      colorWipe(0x00,100); //0ff
  208.        HAL_Delay(1000);


  209.       
  210.   }
  211. }
復(fù)制代碼



setfrequence.jpg (247.03 KB, 下載次數(shù): 225)

下載時STCisp設(shè)置頻率

下載時STCisp設(shè)置頻率

frequence.jpg (79.32 KB, 下載次數(shù): 226)

keil設(shè)置頻率

keil設(shè)置頻率

fail.jpg (195.8 KB, 下載次數(shù): 217)

設(shè)置37燈內(nèi)存地址空間滿

設(shè)置37燈內(nèi)存地址空間滿

fenweideng.rar

34.1 KB, 下載次數(shù): 445, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:419125 發(fā)表于 2019-1-7 15:12 | 只看該作者
樓主 可以加個好友么  我也學(xué)STC15W204S
回復(fù)

使用道具 舉報

板凳
ID:88049 發(fā)表于 2019-1-8 10:05 | 只看該作者
keil設(shè)置target options------memory Model 選擇large:variables in XDATA再編譯一遍試試
回復(fù)

使用道具 舉報

地板
ID:439460 發(fā)表于 2019-1-10 05:23 來自觸屏版 | 只看該作者
已經(jīng)解unsigned char idata buf_R[numLEDs] = {0};//顏色緩存 unsigned char buf_G[numLEDs] = {0};//顏色緩unsigned char buf_B[numLEDs] = {0};//顏色緩存,這樣修改最多可以點78顆燈,有興趣的朋友可以試一試     
回復(fù)

使用道具 舉報

5#
ID:439460 發(fā)表于 2019-1-10 05:25 來自觸屏版 | 只看該作者
摯愛梅兒 發(fā)表于 2019-1-8 10:05
keil設(shè)置target options------memory Model 選擇large:variables in XDATA再編譯一遍試試

這樣編譯我試了,程序能編譯能通過,下載單片機(jī)里一個燈都不亮,百度了一下說要加外部RAM
回復(fù)

使用道具 舉報

6#
ID:439460 發(fā)表于 2019-1-10 05:26 來自觸屏版 | 只看該作者
June1210 發(fā)表于 2019-1-7 15:12
樓主 可以加個好友么  我也學(xué)STC15W204S

可以啊,加我QQ 176492137
回復(fù)

使用道具 舉報

7#
ID:238749 發(fā)表于 2019-2-20 12:51 | 只看該作者
你好,我發(fā)現(xiàn)這個程序只能亮ff的顏色,其余0-254的顏色無法顯示哎
回復(fù)

使用道具 舉報

8#
ID:375313 發(fā)表于 2019-2-21 21:33 | 只看該作者
陳小手43970 發(fā)表于 2019-2-20 12:51
你好,我發(fā)現(xiàn)這個程序只能亮ff的顏色,其余0-254的顏色無法顯示哎

你的是不是也只亮白色
回復(fù)

使用道具 舉報

9#
ID:406128 發(fā)表于 2019-3-28 11:25 | 只看該作者
老兄,你的頭文件是對的,我的改了頭文件就報錯
回復(fù)

使用道具 舉報

10#
ID:398994 發(fā)表于 2020-3-25 10:01 | 只看該作者
好東西
回復(fù)

使用道具 舉報

11#
ID:311419 發(fā)表于 2020-3-25 10:57 | 只看該作者
晶振頻率太低,要33M,我的可以用
回復(fù)

使用道具 舉報

12#
ID:712612 發(fā)表于 2020-4-2 09:35 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報

13#
ID:578423 發(fā)表于 2020-5-1 15:42 | 只看該作者
試程序要以用
回復(fù)

使用道具 舉報

14#
ID:578423 發(fā)表于 2020-5-3 18:11 | 只看該作者
樓主,如果第一個燈亮后保持到第二個亮后也保持,第三個亮后也保持,這個怎寫?太感謝了
回復(fù)

使用道具 舉報

15#
ID:436758 發(fā)表于 2020-5-22 20:52 | 只看該作者
我都用臺系類PIC的,16M 2T 一樣的可以做到完美時序
回復(fù)

使用道具 舉報

16#
ID:828768 發(fā)表于 2020-10-20 17:25 | 只看該作者
將idata改為xdata,可以128燈,我用STC15W4K32S4仿真可以成功

#define numLEDs 128  //燈的個數(shù)
unsigned char xdata buf_R[numLEDs] = {0};//顏色緩存
unsigned char xdata buf_G[numLEDs] = {0};
unsigned char xdata buf_B[numLEDs] = {0};

回復(fù)

使用道具 舉報

17#
ID:79544 發(fā)表于 2021-3-23 09:59 | 只看該作者
yuren1984 發(fā)表于 2019-1-10 05:23
已經(jīng)解unsigned char idata buf_R[numLEDs] = {0};//顏色緩存 unsigned char buf_G[numLEDs] = {0};//顏色 ...

感謝分享,學(xué)習(xí)啦。這樣修改的確可以驅(qū)動60個燈珠
回復(fù)

使用道具 舉報

18#
ID:79544 發(fā)表于 2021-3-23 11:35 | 只看該作者
bababibu 發(fā)表于 2020-10-20 17:25
將idata改為xdata,可以128燈,我用STC15W4K32S4仿真可以成功

#define numLEDs 128  //燈的個數(shù)
...

牛人。。。。。。。。。。。。。。!
回復(fù)

使用道具 舉報

19#
ID:468169 發(fā)表于 2021-6-16 18:54 來自觸屏版 | 只看該作者
bababibu 發(fā)表于 2020-10-20 17:25
將idata改為xdata,可以128燈,我用STC15W4K32S4仿真可以成功

#define numLEDs 128  //燈的個數(shù)
...

如果要驅(qū)動1024個像素點呢?就時候1024個燈,市場上的可以做到,怎么修改……。
回復(fù)

使用道具 舉報

20#
ID:509408 發(fā)表于 2021-7-10 14:02 | 只看該作者
nanyexin 發(fā)表于 2021-6-16 18:54
如果要驅(qū)動1024個像素點呢?就時候1024個燈,市場上的可以做到,怎么修改……。

算一下理論時間,數(shù)據(jù)手冊上發(fā)送一個bit需要1.25us左右,一個RGB像素點24bit。共需要時間 1024*1.25*24 = 30720us,即光驅(qū)動這1024顆燈需要30ms以上,這個時間已經(jīng)很長了。發(fā)送過程中還不能被其他任務(wù)打斷。然后你的ram資源要足夠 (1024*3個byte,即3kb以上,想實現(xiàn)復(fù)雜花樣效果就要考慮算法、硬件設(shè)計,全亮這電源起碼都60安的電流了) ,
回復(fù)

使用道具 舉報

21#
ID:613016 發(fā)表于 2022-9-29 13:31 | 只看該作者
非常感謝,正好需要,我目前控制30燈珠
回復(fù)

使用道具 舉報

22#
ID:688008 發(fā)表于 2022-10-3 14:14 | 只看該作者
mark一下,后面玩的時候再來看看
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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