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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

關(guān)于51內(nèi)核單片機(jī)對(duì)WS2811的RGB彩燈控制程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:271759 發(fā)表于 2019-3-30 13:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本程序基于stm32的ws2811例程修改,細(xì)節(jié)在于T1H與T1L的間隔時(shí)間

單片機(jī)源程序如下:
  1. /****************************************************************************************
  2. * WS2811 彩燈驅(qū)動(dòng)函數(shù)
  3. *
  4. * 調(diào)用方法:
  5. *        修改宏定義: #define nWs 1        // 有多少顆WS2811級(jí)聯(lián)
  6. *        WS_Init();        // IO初始化
  7. *        WsDat[0] = 0x808080;//顯存賦值
  8. *        WS_SetAll();  // 發(fā)送數(shù)據(jù)
  9. *        ColorToColor(unsigned long color0, unsigned long color1);// 顏色漸變算法
  10. *
  11. * 作者:星希望(已校驗(yàn))
  12. * 日期:2015年6月24日
  13. ****************************************************************************************/
  14. #include <STC8.H>
  15. #include "WS2811.h"
  16. #include "delay.h"
  17. #include <intrins.h>
  18. #define u32 unsigned long
  19. #define        DAT_OUT_h    P1M0=0X00;DAT_OUT=1
  20. #define        DAT_OUT_l    P1M0=0X00;DAT_OUT=0
  21. sbit DAT_OUT=P1^0;
  22. /* 顯存 */
  23. unsigned long WsDat[nWs];

  24. /**************************************************************************************
  25. * IO初始化(移植時(shí)請(qǐng)修改)
  26. **************************************************************************************/
  27. void WS_Init()
  28. {
  29.     P1M1=0X00;
  30.           P1PU=0XFF;
  31. }

  32. /**************************
  33. * 內(nèi)部延時(shí)
  34. ***************************/
  35. void delay2us()
  36. {
  37.         unsigned char i;

  38.         i = 14;
  39.         while (--i);
  40. }
  41. void delay05us()
  42. {
  43.         unsigned char i;

  44.         i = 2;
  45.         while (--i);
  46. }
  47. void delay1_2us()
  48. {
  49.         unsigned char i;

  50.         i = 8;
  51.         while (--i);
  52. }
  53. void delay1_3us()
  54. {
  55.         unsigned char i;

  56.         i = 9;
  57.         while (--i);
  58. }
  59. /***************************
  60. * 發(fā)送一比特
  61. ****************************/
  62. void TX0()          { DAT_OUT_h; delay05us(); DAT_OUT_l; delay2us(); } // 發(fā)送0
  63. void TX1()          { DAT_OUT_h; delay1_2us();  DAT_OUT_l; delay1_3us(); } // 發(fā)送1
  64. void WS_Reset() { DAT_OUT_l; delay_us(60);  DAT_OUT_h; DAT_OUT_l; }

  65. /**************************************************************************************
  66. * 發(fā)送一字節(jié)
  67. **************************************************************************************/
  68. void WS_Set1(unsigned long dat)
  69. {
  70.         unsigned char i;
  71.        
  72.         for(i=0; i<24; i++)
  73.         {
  74.                 if(0x800000 == (dat & 0x800000) )        TX1();
  75.                 else                                                                TX0();
  76.                 dat<<=1;                                                        //左移一位
  77.         }
  78. }

  79. /**************************************************************************************
  80. * 發(fā)送所有字節(jié)
  81. **************************************************************************************/
  82. void WS_SetAll()
  83. {
  84.         unsigned char j;
  85.        
  86.         for(j=0; j<nWs; j++)
  87.         {
  88.                 WS_Set1(WsDat[0]);  // j / 0
  89.         }
  90.         WS_Reset();
  91. }
  92. void WS_SET(unsigned long color,unsigned char num)
  93. {
  94.      unsigned char j;
  95.            for(j=0;j<nWs;j++)
  96.            {
  97.                      if(j<num)
  98.                                  {
  99.                                          WS_Set1(color);
  100.                                  }
  101.          else
  102.          {
  103.            WS_Set1(Black);                         
  104.                                  }                                         
  105.                  }         
  106.      WS_Reset();
  107. }
  108. void WS_SET_Water_lamp(unsigned long color,unsigned int time)
  109. {
  110.      unsigned char j,x;
  111.            for(x=0;x<nWs;x++)
  112.            {
  113.                            for(j=0;j<nWs;j++)
  114.                      {
  115.                                           if(j==x)
  116.                                                 {
  117.                                                   WS_Set1(color);
  118.                                                 }
  119.                                                 else
  120.                                                 {
  121.                                                   WS_Set1(Black);                         
  122.                                                 }       
  123.                                  }
  124.         WS_Reset();                                  
  125.         delay_ms(time);                                 
  126.                  }          
  127. }
  128. void WS_SET_Water_lamp_two(unsigned long color,unsigned int time)
  129. {
  130.      unsigned char j,x;
  131.            for(x=0;x<nWs;x++)
  132.            {
  133.                            for(j=0;j<nWs;j++)
  134.                      {
  135.                                           if(j<x)
  136.                                                 {
  137.                                                   WS_Set1(color);
  138.                                                 }
  139.                                                 else
  140.                                                 {
  141.                                                   WS_Set1(Black);                         
  142.                                                 }       
  143.                                  }
  144.         WS_Reset();                                  
  145.         delay_ms(time);                                 
  146.                  }          
  147. }
  148. void Breathing_lamp(unsigned long color,unsigned int time)
  149. {
  150.      unsigned char j,x,r,g,b,move;
  151.           unsigned long color0,color1;
  152.            r=color>>8;
  153.            g=color;
  154.            b=color>>16;
  155.            if(r!=0)
  156.                  {
  157.                          color0=r;move=8;
  158.      }
  159.                  if(g!=0)
  160.                  {
  161.                          color0=g;move=0;
  162.                  }         
  163.                  if(b!=0)       
  164.      {
  165.                          color0=b;move=16;                 
  166.      }
  167.                  for(x=0;x<127;x++)
  168.            {
  169.                            color1=color0<<move;
  170.                            for(j=0;j<nWs;j++)
  171.                      {
  172.                                           WS_Set1(color1);
  173.                                             
  174.                                  }
  175.                                  color0=color0-2;
  176.         WS_Reset();                                  
  177.         delay_ms(time);                                 
  178.                  }
  179.                  for(x=0;x<127;x++)
  180.            {
  181.                            color1=color0<<move;
  182.                            for(j=0;j<nWs;j++)
  183.                      {
  184.                                           WS_Set1(color1);
  185.                                             
  186.                                  }
  187.                                  color0=color0+2;
  188.         WS_Reset();                                  
  189.         delay_ms(time);                                 
  190.                  }
  191. }
  192. void Breathing_lamp_Alternate(unsigned int time)
  193. {
  194.             unsigned char j,x,num,move;
  195.             unsigned long color0,color1;
  196.             for(num=0;num<3;num++)
  197.             {
  198.                                   color0=0;
  199.           move=8*num;                                                
  200.                                         for(x=0;x<127;x++)
  201.                                         {
  202.                                                   color1=color0<<move;
  203.                                                         for(j=0;j<nWs;j++)
  204.                                                         {
  205.                                                                 WS_Set1(color1);
  206.                                                         }
  207.                                                         color0=color0+2;
  208.                                                         WS_Reset();                                  
  209.                                                         delay_ms(time);                                 
  210.                                         }
  211.                                          for(x=0;x<127;x++)
  212.                                          {
  213.                                                    color1=color0<<move;
  214.                                                          for(j=0;j<nWs;j++)
  215.                                                          {
  216.                                                                         WS_Set1(color1);
  217.                                                                                
  218.                                                          }
  219.                                                          color0=color0-2;
  220.                                                         WS_Reset();                                  
  221.                                                         delay_ms(time);                                 
  222.                                          }
  223.                   }                                         
  224. }



  225. /********************************************
  226. * 求絕對(duì)值
  227. ********************************************/
  228. unsigned char abs0(int num)
  229. {
  230.         if(num<0)
  231.            num = -num;
  232.         return (unsigned char) num;
  233. }

  234. /***********************************************************************************
  235. * 顏色漸變算法
  236. * 誤差 <= 2
  237. ************************************************************************************/
  238. u32 ColorToColor(unsigned long color0, unsigned long color1,unsigned int time)
  239. {
  240.         unsigned char Red0, Green0, Blue0;  // 起始三原色
  241.         unsigned char Red1, Green1, Blue1;  // 結(jié)果三原色
  242.         int                          RedMinus, GreenMinus, BlueMinus;        // 顏色差(color1 - color0)
  243.         unsigned char NStep;                                                         // 需要幾步
  244.         float                  RedStep, GreenStep, BlueStep;                // 各色步進(jìn)值
  245.         unsigned long color;                                                        // 結(jié)果色
  246.         unsigned char i;
  247.        
  248.         // 綠 紅 藍(lán) 三原色分解
  249.         Red0   = color0>>8;
  250.         Green0 = color0>>16;
  251.         Blue0  = color0;
  252.        
  253.         Red1   = color1>>8;
  254.         Green1 = color1>>16;
  255.         Blue1  = color1;
  256.        
  257.         // 計(jì)算需要多少步(取差值的最大值)
  258.         RedMinus   = Red1 - Red0;
  259.         GreenMinus = Green1 - Green0;
  260.         BlueMinus  = Blue1 - Blue0;
  261.        
  262.         if(( abs0(RedMinus) > abs0(GreenMinus) ))
  263.                 NStep=abs0(RedMinus);
  264.         else
  265.                 NStep=abs0(GreenMinus);
  266.         if(( NStep < abs0(BlueMinus) ))
  267.                 NStep=abs0(BlueMinus);
  268.        
  269.         // 計(jì)算出各色步進(jìn)值
  270.         RedStep   = (float)RedMinus   / NStep;
  271.         GreenStep = (float)GreenMinus / NStep;
  272.         BlueStep  = (float)BlueMinus  / NStep;
  273.        
  274.         // 漸變開始
  275.         for(i=0; i<NStep; i++)
  276.         {
  277.                 Red1   = Red0   + (int)(RedStep   * i);
  278.                 Green1 = Green0 + (int)(GreenStep * i);
  279.                 Blue1  = Blue0  + (int)(BlueStep  * i);
  280.                
  281.                 color  = Green1<<16|Red1<<8|Blue1;         // 合成  綠紅藍(lán)
  282.                 WsDat[0] = color;
  283.                 WS_SetAll();                                                        // 輸出
  284.                 delay_ms(time);                                                // 漸變速度
  285.         }
  286.         // 漸變結(jié)束
  287.        
  288.         return color;
  289. }
復(fù)制代碼

所有資料51hei提供下載:
RGB彩燈調(diào)試.zip (65.47 KB, 下載次數(shù): 202)


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2019-3-31 02:15 | 只看該作者
樓主能分享下源程序嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:271759 發(fā)表于 2019-4-2 13:56 | 只看該作者

源程序不是在附件里嘛?你看看
回復(fù)

使用道具 舉報(bào)

地板
ID:69115 發(fā)表于 2019-11-13 01:36 | 只看該作者
用STC8單片控制不錯(cuò).
回復(fù)

使用道具 舉報(bào)

5#
ID:659581 發(fā)表于 2019-12-9 16:37 | 只看該作者
兄弟 可不可以給我郵箱發(fā)個(gè)程序包啊 感謝大哥
我的郵箱 804551172@qq.com
有些定義我看的不太明白
回復(fù)

使用道具 舉報(bào)

6#
ID:686417 發(fā)表于 2020-3-16 16:21 | 只看該作者
用STC8單片控制不錯(cuò).
回復(fù)

使用道具 舉報(bào)

7#
ID:439460 發(fā)表于 2021-6-20 16:54 | 只看該作者
你這晶振頻率是多少啊?
回復(fù)

使用道具 舉報(bào)

8#
ID:958412 發(fā)表于 2021-8-2 19:06 | 只看該作者
非常不錯(cuò)的內(nèi)容,在學(xué)習(xí)中。。。。。。。。。。。。。。。。。。。。。。。!
回復(fù)

使用道具 舉報(bào)

9#
ID:72642 發(fā)表于 2021-11-24 15:11 | 只看該作者
親測(cè)可用,我呀,只會(huì)調(diào)用不會(huì)自己寫
回復(fù)

使用道具 舉報(bào)

10#
ID:140489 發(fā)表于 2022-5-11 11:14 | 只看該作者
yuren1984 發(fā)表于 2021-6-20 16:54
你這晶振頻率是多少啊?

void Delay1ms()                //@24.000MHz
{
        unsigned char i, j;

        _nop_();
        i = 32;
        j = 40;
        do
        {
                while (--j);
        } while (--i);
}
回復(fù)

使用道具 舉報(bào)

11#
ID:99525 發(fā)表于 2022-5-12 12:11 | 只看該作者
這是STC8系列的,學(xué)習(xí)下時(shí)序怎么控制的,60路燈帶看看能不能改成PWM的
回復(fù)

使用道具 舉報(bào)

12#
無效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

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