找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)控制WS2811 LED漸變色源碼,可以顯示16000K色

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:270677 發(fā)表于 2018-1-3 13:55 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
LED使用的5050分裝自帶WS2811.只需要一個IO口控制,可以顯示16777215 種顏色,附源代碼。


單片機(jī)源程序如下:
  1. #include "main.h"
  2. #include <STC/STC12C5A60S2.h>

  3. //#define MAIN_Fosc                24000000L        //定義主時鐘   
  4. #define WHITE       0xFFFFFF  // 白色
  5. #define BLACK       0x000000  // 黑色
  6. #define RED         0x00ff00  // 紅色
  7. #define GREEN       0xff0000  // 綠色
  8. #define BLUE        0x0000ff  // 藍(lán)色
  9. #define CHENG       0xff7f00  // 橙色
  10. #define DIAN                0xff00ff  //
  11. #define ZI                    0x00ffff

  12. #define LED_N  16   //LED的數(shù)量   


  13. //extern unsigned long WsDat[];
  14. unsigned long WsDat[];



  15. void main ()//主函數(shù)
  16. {

  17.   reset();
  18. //DisP_R_G_B(20);
  19. ColorToColor(0X000000,0XFF0000);
  20. ColorToColor(0XFF0000,0xFFFF00);
  21. ColorToColor(0xFFFF00,0Xffffff);
  22. ColorToColor(0Xffffff,0X00ffff);
  23. ColorToColor(0X00ffff,0X0000ff);
  24. ColorToColor(0X0000ff,0X000000);

  25. ColorToColor(0X000000,0X00FF00);
  26. ColorToColor(0X00FF00,0x0FFFF0);
  27. ColorToColor(0x0FFFF0,0Xffffff);
  28. ColorToColor(0Xffffff,0XFF00ff);
  29. ColorToColor(0XFF00ff,0XF0000f);
  30. ColorToColor(0XF0000f,0X000000);


  31. }

  32. void delay(unsigned int time)   //延時
  33. {  unsigned int i,j,k;
  34.    for(j=0;j<time;j++)
  35.            for(i=0;i<time;i++)
  36.        for(k=0;k<time;k++)
  37.           Delay();
  38.   
  39. }



  40. void Delay()                //@24.000MHz
  41. {
  42.         _nop_();
  43. }
  44. void reset(void)
  45. {
  46.    int i;
  47.    LED=0;
  48. for(i=0;i<50;i++)
  49. {Delay();
  50.    }  
  51. }
  52. void T0(void)
  53. {
  54.   LED=1;
  55.   LED=0;
  56.   Delay();
  57.            
  58. }


  59. void T1(void)
  60. {
  61.   LED=1;
  62.   Delay();
  63.   LED=0;

  64. }
  65. void DisP_Color(unsigned long dat)                                 //控制一個燈
  66. {          unsigned int i;
  67.          for(i=0;i<24;i++)
  68.                    {   if(0x800000 == (dat & 0x800000))  T1();
  69.                 else       T0();
  70.                 dat<<=1;                                                        //左移一位
  71.                    }

  72. }

  73. void DisP_ALLColor(unsigned long dat)         //控制所有燈         
  74. {int j;         
  75.    for(j=0;j<LED_N;j++) DisP_Color(dat);
  76.   reset();
  77. }


  78. void DisP_R_G_B(unsigned int j)                    //RGB漸變
  79. {  
  80.     unsigned long i=0;
  81.     while(i<0xffffff)
  82.          {
  83.          if(i<0xff)  DisP_ALLColor(i++);         
  84.                    else if(i<0xffff) {        i=i+0x100;DisP_ALLColor(i);        }
  85.                 else if(i<0xffffff)  {i=i+0x10000;DisP_ALLColor(i);        }
  86.               delay(j);
  87.          }                  
  88.         while(i>0)
  89.          {
  90.          if(i>0xffff00)  DisP_ALLColor(i--);         
  91.                    else if(i>0xff0000) {i=i-0x100;        DisP_ALLColor(i);}
  92.                 else if(i>0)  {i=i-0x10000;DisP_ALLColor(i);}
  93.                 delay(j);
  94.          }        
  95.         reset();
  96. }





  97. unsigned char abs0(int num)
  98. {
  99.         if(num>0) return num;
  100.         
  101.         num = -num;
  102.         return (unsigned char) num;
  103. }
  104.          
  105. unsigned long ColorToColor(unsigned long color0, unsigned long color1)
  106. {
  107.         unsigned char Red0, Green0, Blue0;  // 起始三原色
  108.         unsigned char Red1, Green1, Blue1;  // 結(jié)果三原色
  109.         int  RedMinus, GreenMinus, BlueMinus;        // 顏色差(color1 - color0)
  110.         unsigned char NStep;                                                         // 需要幾步
  111.         float    RedStep, GreenStep, BlueStep;                // 各色步進(jìn)值
  112.         unsigned long color;                                                        // 結(jié)果色
  113.         unsigned char i;
  114.         
  115.         // 綠 紅 藍(lán) 三原色分解
  116.         Red0   = color0>>8;
  117.         Green0 = color0>>16;
  118.         Blue0  = color0;
  119.         
  120.         Red1   = color1>>8;
  121.         Green1 = color1>>16;
  122.         Blue1  = color1;
  123.         
  124.         // 計算需要多少步(取差值的最大值)
  125.         RedMinus   = Red1 - Red0;
  126.         GreenMinus = Green1 - Green0;
  127.         BlueMinus  = Blue1 - Blue0;
  128.         
  129.         NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
  130.         NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
  131.         
  132.         // 計算出各色步進(jìn)值
  133.         RedStep   = (float)RedMinus   / NStep;
  134.         GreenStep = (float)GreenMinus / NStep;
  135. ……………………

  136. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

原理圖: 無
仿真: 無
代碼: LED漸變.7z (14.87 KB, 下載次數(shù): 394)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:318462 發(fā)表于 2018-5-15 12:29 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:92841 發(fā)表于 2018-7-15 00:00 | 只看該作者
很給力,謝謝分享

哪位大俠能發(fā)給我一個包,我積分不夠下載的。學(xué)習(xí)一下
回復(fù)

使用道具 舉報

地板
ID:430328 發(fā)表于 2018-11-21 08:31 | 只看該作者
看看順便學(xué)習(xí)下
回復(fù)

使用道具 舉報

5#
ID:74143 發(fā)表于 2018-11-23 16:16 | 只看該作者
好資料,謝謝分享。
回復(fù)

使用道具 舉報

6#
ID:399179 發(fā)表于 2018-11-23 20:56 來自手機(jī) | 只看該作者
感謝分享!
回復(fù)

使用道具 舉報

7#
ID:259149 發(fā)表于 2018-12-1 16:37 | 只看該作者
你好,我想問一下這個單片機(jī)里面 24MHZ 晶振下的_nop_移植到stm32應(yīng)該是多少,或者說這里面的時間是必須精確到_nop_這樣嗎
回復(fù)

使用道具 舉報

8#
ID:259149 發(fā)表于 2018-12-1 16:40 | 只看該作者
還有T1,T0的作用 能詳細(xì)說一下嗎。。
回復(fù)

使用道具 舉報

9#
ID:146045 發(fā)表于 2019-10-24 21:32 | 只看該作者
資料很好,值得學(xué)習(xí)
回復(fù)

使用道具 舉報

10#
ID:697723 發(fā)表于 2020-4-12 00:47 來自手機(jī) | 只看該作者
2811,有點復(fù)雜,
回復(fù)

使用道具 舉報

11#
ID:116743 發(fā)表于 2020-11-22 15:31 | 只看該作者
還有很多功能沒寫進(jìn)去
回復(fù)

使用道具 舉報

12#
ID:413986 發(fā)表于 2021-2-4 13:10 | 只看該作者
下載來試試看,我也寫了一個,總有毛病,參考下
回復(fù)

使用道具 舉報

13#
ID:79026 發(fā)表于 2021-2-21 16:21 | 只看該作者
這個不錯,很多場合需要調(diào)色和調(diào)亮度的
回復(fù)

使用道具 舉報

14#
ID:706963 發(fā)表于 2021-5-19 17:46 | 只看該作者
求教才能控制他在其中的某個位置亮起來呢?
回復(fù)

使用道具 舉報

15#
ID:706963 發(fā)表于 2021-5-19 17:47 | 只看該作者
有沒有硬件線路圖講解呢?
回復(fù)

使用道具 舉報

16#
ID:950218 發(fā)表于 2021-7-8 08:56 | 只看該作者
謝謝分享資料!
正需要顏色切換的代碼。
回復(fù)

使用道具 舉報

17#
ID:519089 發(fā)表于 2021-7-14 20:04 | 只看該作者
沒什么用,,灌水
回復(fù)

使用道具 舉報

18#
ID:856401 發(fā)表于 2021-7-16 21:48 來自手機(jī) | 只看該作者
好代碼
回復(fù)

使用道具 舉報

19#
ID:507641 發(fā)表于 2021-7-28 22:26 | 只看該作者
可否能做流水燈?
回復(fù)

使用道具 舉報

20#
ID:721169 發(fā)表于 2021-11-15 19:58 來自手機(jī) | 只看該作者
正需要找參考代碼
回復(fù)

使用道具 舉報

21#
ID:99525 發(fā)表于 2022-1-7 15:31 | 只看該作者
可以加藍(lán)牙芯片直接手機(jī)上用七彩圖控制燈帶了!
回復(fù)

使用道具 舉報

22#
ID:230500 發(fā)表于 2022-1-8 13:06 | 只看該作者
無私分享,值得贊賞,2811和2812 是否可以通用?
回復(fù)

使用道具 舉報

23#
ID:60656 發(fā)表于 2022-5-20 21:54 | 只看該作者
程序能跑起來嗎
回復(fù)

使用道具 舉報

24#
ID:653353 發(fā)表于 2024-3-17 15:38 來自手機(jī) | 只看該作者
很好玩的RGB彩燈
回復(fù)

使用道具 舉報

25#
ID:1045034 發(fā)表于 2024-3-29 09:45 | 只看該作者
兩個問號?NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);         NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
回復(fù)

使用道具 舉報

26#
ID:1045034 發(fā)表于 2024-3-29 09:46 | 只看該作者
        NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
        NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
       這兩個問號有問題
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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