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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機驅動WS2811彩燈源程序和實物圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:175516 發表于 2017-3-20 19:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
WS2811是一款可以級聯的RGB三色LED燈。只需要一根數據線就可以控制多顆LED,F在發上來整理的庫函數,可以直接調用顯示函數。


WS2811.h
  1. #ifndef __WS2811_H
  2. #define __WS2811_H         
  3. #include "sys.h"


  4. #define White       0xFFFFFF  // 白色
  5. #define Black       0x000000  // 黑色
  6. #define Red         0x00ff00  // 紅色
  7. #define Green       0xff0000  // 綠色
  8. #define Blue        0x0000ff  // 藍色


  9. #define nWs 16                // 有多少顆WS2811級聯

  10. extern unsigned long WsDat[];

  11. extern void WS_Init(void);
  12. extern void WS_SetAll(void);
  13. extern u32 ColorToColor(unsigned long color0, unsigned long color1);

  14.                                                      
  15. #endif

復制代碼
  1. /****************************************************************************************
  2. * WS2811 彩燈驅動函數
  3. *
  4. * 調用方法:
  5. *        修改宏定義: #define nWs 1        // 有多少顆WS2811級聯
  6. *        WS_Init();        // IO初始化
  7. *        WsDat[0] = 0x808080;//顯存賦值
  8. *        WS_SetAll();  // 發送數據
  9. *        ColorToColor(unsigned long color0, unsigned long color1);// 顏色漸變算法
  10. *
  11. * 作者:星希望(已校驗)
  12. * 日期:2015年6月24日
  13. ****************************************************************************************/
  14. #include "sys.h"
  15. #include <stm32f10x.h>
  16. #include "WS2811.h"
  17. #include "delay.h"
  18.        
  19. /* 顯存 */
  20. unsigned long WsDat[nWs];


  21. /**************************************************************************************
  22. * IO初始化(移植時請修改)
  23. **************************************************************************************/
  24. void WS_Init()
  25. {
  26.         GPIO_InitTypeDef  GPIO_InitStructure;       
  27.        
  28.         //端口時鐘,使能
  29.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );         

  30.         // 端口配置
  31.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                // PIN
  32.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 // 推挽輸出
  33.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                // IO口速度為50MHz
  34.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                        // 根據設定參數初始化
  35. }

  36. /**************************
  37. * 內部延時
  38. ***************************/
  39. void delay2us()
  40. {
  41.         unsigned char i;
  42.         for(i=0; i<12; i++);
  43. }
  44. void delay05us()
  45. {
  46.         unsigned char i;
  47.         for(i=0; i<1; i++);
  48. }

  49. /***************************
  50. * 發送一比特
  51. ****************************/
  52. void TX0()          { PAout(0) = 1; delay05us(); PAout(0) = 0; delay2us(); } // 發送0
  53. void TX1()          { PAout(0) = 1; delay2us();  PAout(0) = 0; delay05us(); } // 發送1
  54. void WS_Reset() { PAout(0) = 0; delay_us(60);  PAout(0) = 1; PAout(0) = 0; }

  55. /**************************************************************************************
  56. * 發送一字節
  57. **************************************************************************************/
  58. void WS_Set1(unsigned long dat)
  59. {
  60.         unsigned char i;
  61.        
  62.         for(i=0; i<24; i++)
  63.         {
  64.                 if(0x800000 == (dat & 0x800000) )        TX1();
  65.                 else                                                                TX0();
  66.                 dat<<=1;                                                        //左移一位
  67.         }
  68. }

  69. /**************************************************************************************
  70. * 發送所有字節
  71. **************************************************************************************/
  72. void WS_SetAll()
  73. {
  74.         unsigned char j;
  75.        
  76.         for(j=0; j<nWs; j++)
  77.         {
  78.                 WS_Set1(WsDat[0]);  // j / 0
  79.         }
  80.         WS_Reset();
  81. }









  82. /********************************************
  83. * 求絕對值
  84. ********************************************/
  85. unsigned char abs0(int num)
  86. {
  87.         if(num>0) return num;
  88.        
  89.         num = -num;
  90.         return (unsigned char) num;
  91. }

  92. /***********************************************************************************
  93. * 顏色漸變算法
  94. * 誤差 <= 2
  95. ************************************************************************************/
  96. u32 ColorToColor(unsigned long color0, unsigned long color1)
  97. {
  98.         unsigned char Red0, Green0, Blue0;  // 起始三原色
  99.         unsigned char Red1, Green1, Blue1;  // 結果三原色
  100.         int                          RedMinus, GreenMinus, BlueMinus;        // 顏色差(color1 - color0)
  101.         unsigned char NStep;                                                         // 需要幾步
  102.         float                  RedStep, GreenStep, BlueStep;                // 各色步進值
  103.         unsigned long color;                                                        // 結果色
  104.         unsigned char i;
  105.        
  106.         // 綠 紅 藍 三原色分解
  107.         Red0   = color0>>8;
  108.         Green0 = color0>>16;
  109.         Blue0  = color0;
  110.        
  111.         Red1   = color1>>8;
  112.         Green1 = color1>>16;
  113.         Blue1  = color1;
  114.        
  115.         // 計算需要多少步(取差值的最大值)
  116.         RedMinus   = Red1 - Red0;
  117.         GreenMinus = Green1 - Green0;
  118.         BlueMinus  = Blue1 - Blue0;
  119.        
  120.         NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);
  121.         NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);
  122.        
  123.         // 計算出各色步進值
  124.         RedStep   = (float)RedMinus   / NStep;
  125.         GreenStep = (float)GreenMinus / NStep;
  126.         BlueStep  = (float)BlueMinus  / NStep;
  127.        
  128.         // 漸變開始
  129.         for(i=0; i<NStep; i++)
  130.         {
  131.                 Red1   = Red0   + (int)(RedStep   * i);
  132.                 Green1 = Green0 + (int)(GreenStep * i);
  133.                 Blue1  = Blue0  + (int)(BlueStep  * i);
  134.                
  135.                 color  = Green1<<16 | Red1<<8 | Blue1;         // 合成  綠紅藍
  136.                 WsDat[0] = color;
  137.                 WS_SetAll();                                                        // 輸出
  138.                 delay_ms(1);                                                // 漸變速度
  139.         }
  140.         // 漸變結束
  141.        
  142.         return color;
  143. }
復制代碼


評分

參與人數 2黑幣 +53 收起 理由
Eleven_1ing + 3 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:112074 發表于 2017-5-9 18:31 | 只看該作者
好東西  謝謝
回復

使用道具 舉報

板凳
ID:220245 發表于 2017-7-29 11:36 | 只看該作者
不錯,很好,借鑒了。
回復

使用道具 舉報

地板
ID:276559 發表于 2018-1-16 14:38 | 只看該作者
32的源碼,51的標題,,,樓主注意點嘛。。。
回復

使用道具 舉報

5#
ID:78170 發表于 2018-3-27 18:09 | 只看該作者
謝謝樓主分析 謝謝
回復

使用道具 舉報

6#
ID:287229 發表于 2018-3-27 18:50 | 只看該作者
謝樓主分析 謝謝
回復

使用道具 舉報

7#
ID:78170 發表于 2018-3-28 08:33 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

8#
ID:282431 發表于 2018-3-28 09:28 | 只看該作者
學習,謝謝樓主分享
回復

使用道具 舉報

9#
ID:309276 發表于 2018-4-16 15:13 | 只看該作者
你可真厲害
回復

使用道具 舉報

10#
ID:309276 發表于 2018-4-16 15:13 | 只看該作者
我想下載
回復

使用道具 舉報

11#
ID:161115 發表于 2018-4-18 13:22 | 只看該作者
正在需要,感謝樓主無私的分享!
回復

使用道具 舉報

12#
ID:338195 發表于 2018-5-25 17:32 | 只看該作者
我要借鑒一下
回復

使用道具 舉報

13#
ID:69489 發表于 2018-6-19 11:40 | 只看該作者
不完整啊,延時函數沒有,很多頭文件也沒有
回復

使用道具 舉報

14#
ID:359215 發表于 2018-6-28 19:30 | 只看該作者
不知道用STM8S003做驅動,能不能實現,內部晶振只有16M
回復

使用道具 舉報

15#
ID:359215 發表于 2018-6-28 19:31 | 只看該作者
用在STM8S003上面不行,頻率16M達不到
回復

使用道具 舉報

16#
ID:357395 發表于 2018-6-28 22:02 | 只看該作者
不錯,很好,借鑒了。
回復

使用道具 舉報

17#
ID:368867 發表于 2018-8-1 14:54 | 只看該作者
沒有delay的頭文件啊?
回復

使用道具 舉報

18#
ID:383463 發表于 2018-8-6 15:32 | 只看該作者
頂一個
回復

使用道具 舉報

19#
ID:411803 發表于 2018-10-18 16:56 | 只看該作者
很棒鴨
回復

使用道具 舉報

20#
ID:74848 發表于 2019-2-8 19:45 | 只看該作者
感謝分享,用89C51單片機可以嗎?
回復

使用道具 舉報

21#
ID:106417 發表于 2019-2-26 10:59 | 只看該作者
多謝分享,支持一下,這個燈看起來不錯
回復

使用道具 舉報

22#
ID:486017 發表于 2019-3-7 09:39 | 只看該作者
贊一個@!
回復

使用道具 舉報

23#
ID:489066 發表于 2019-3-12 10:35 | 只看該作者
怎么都是這么久遠的。。。
回復

使用道具 舉報

24#
ID:421823 發表于 2019-3-19 17:19 | 只看該作者
為什么網上代碼都一個樣
回復

使用道具 舉報

25#
ID:555240 發表于 2020-3-14 15:55 | 只看該作者
好東西,感謝分享
回復

使用道具 舉報

26#
ID:788346 發表于 2020-6-24 08:45 | 只看該作者
不錯,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久aaaa樱花 | 精品不卡 | 日韩视频高清 | 日本人做爰大片免费观看一老师 | 国产一区二区三区视频 | 国产高清一区二区三区 | 91热爆在线观看 | 蜜桃臀av一区二区三区 | 国产一区成人 | 国产成人精品高清久久 | 国产精品入口麻豆www | 欧美乱大交xxxxx另类电影 | 亚洲精品成人网 | 成人一区二区在线 | 狠狠操天天干 | 国产真实精品久久二三区 | 日韩在线免费 | 最新免费黄色网址 | 在线视频亚洲 | 蜜月aⅴ国产精品 | 欧美日韩精选 | 日日干天天操 | 亚洲男女视频在线观看 | 中文字幕一区二区三区四区五区 | 全免费a级毛片免费看视频免 | 成人精品免费视频 | 精品欧美一区二区精品久久 | 一区二区三区日本 | 国产乱码精品1区2区3区 | 亚洲精品一二区 | 国产一级视频免费播放 | 久久国产精品免费一区二区三区 | 国产美女自拍视频 | 国产乱码精品1区2区3区 | 不卡一区二区三区四区 | 黄色小视频入口 | 亚洲欧美自拍偷拍视频 | 精品无码三级在线观看视频 | 国产欧美一区二区精品忘忧草 | 久久精品91 | 国产精品.xx视频.xxtv |