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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15094|回復: 16
收起左側

單片機驅動WS2812B燈演示程序

  [復制鏈接]
ID:885138 發表于 2021-2-20 16:07 | 顯示全部樓層 |閱讀模式
示例采用HC89S003F4單片機和7燈Ws2812燈帶。HC89S003F4是1T增強型51單片機,如用其他51單片機,需調整晶振頻率。示例僅進行7燈的單次驅動,可在聲明和數組中改變燈珠數量和數據,主函數中修改后可實現流水燈效果。
/*
*HC89S003F4驅動WS2812彩燈演示(7只Led)
*CPU:HC89S003F4 16K bytes flash ROM, 256+256 bytes data RAM
*HC89S003F4是1T增強型51單片機,如用普通51單片機,晶振頻率需增大
*/

  1. #define ALLOCATE_EXTERN
  2. #include "HC89S003F4.h"
  3. #include <intrins.h>

  4. #define WS2812_IO P2_2   //定義驅動引腳
  5. //xdata unsigned char col[21];
  6. //7只LED,共21個數據,每組GRB排列
  7. const unsigned char col[21] = {0x22,0x00,0x00,
  8.                                                            0x00,0x22,0x00,
  9.                                                            0x00,0x00,0x22,
  10.                                                            0x22,0x22,0x00,
  11.                                                            0x00,0x22,0x22,
  12.                                                            0x22,0x00,0x22,
  13.                                                            0x22,0x22,0x22,
  14.                                                            };


  15. void ws2812_rst(void)
  16. {        
  17.         u8 i;         //
  18.         WS2812_IO = 1;
  19.         i = 100; //           如果主頻較高適當增加
  20.         while(i--);
  21.         WS2812_IO = 0;
  22.     i = 100; //           如果主頻較高適當增加
  23.         while(i--);
  24. }

  25. void ws2812_write_byte( u8 dat)
  26. {        
  27.         u8 i = 8;
  28.         dat <<= 1;         //最高位進入CY
  29.         while(i)
  30.         {
  31.                  //高電平時間小于0.45uS為邏輯0,大于時為邏輯1
  32.                 WS2812_IO = 1;
  33.                 //如果主頻較高可在此處適當增加_nop_();
  34.                 WS2812_IO = CY;
  35.                 //如果主頻較高可在此處適當增加_nop_();
  36.                 _nop_();
  37.         WS2812_IO = 0;
  38.                 dat <<= 1;         //最高位進入CY
  39.                 i--;                        
  40.         }
  41. }

  42. /**************************************************************************************
  43. void main()
  44. {
  45.         unsigned char i;

  46. /************************************系統初始化****************************************/
  47.         WDTCCR = 0x00;                                                //關閉看門狗
  48.                                                 //本例程為方便測試關閉看門狗,實際使用中,建議客戶打開看門狗,詳見WDT復位例程
  49.         CLKSWR = 0x53;                                                //選擇內部高頻RC為系統時鐘,內部高頻RC 8分頻,Fosc=4MHz
  50.         CLKDIV = 0x01;                                                //Fosc 1分頻得到Fcpu,Fcpu=4MHz

  51.         P2M1 = P2M1&0xF0|0x08;                                //P22設置為推挽輸出
  52.         
  53. /****以上為HC89S003F4單片機專用的SFR,普通單片機不用設置,但需提高晶振頻率*****/

  54.         ws2812_rst();
  55.         for( i= 0; i< 21 ;i++)
  56.         {
  57.                 ws2812_write_byte( col[i]);
  58.         }
  59.         while(1){} ;
  60. }
復制代碼

評分

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

查看全部評分

回復

使用道具 舉報

ID:885138 發表于 2021-2-20 16:38 來自手機 | 顯示全部樓層
效果圖
JPEG_20210220_163457_.jpg
JPEG_20210220_163708_.jpg

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:885138 發表于 2021-2-21 18:28 來自手機 | 顯示全部樓層
轉發網友實驗總結的WS2812B時序要求,供大家參考。
Screenshot_20210221-164434.jpg

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:390416 發表于 2021-2-22 20:05 | 顯示全部樓層
回復

使用道具 舉報

ID:885879 發表于 2021-2-23 16:22 | 顯示全部樓層
樓主你好,新手求教,燈帶和單片機的接口該怎么連接呢?
回復

使用道具 舉報

ID:390416 發表于 2021-2-23 16:55 | 顯示全部樓層
Levent 發表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機的接口該怎么連接呢?

普通IO口 串聯100歐電阻 連過去就行了  必須能夠輸出5V電平。不能3.3V
回復

使用道具 舉報

ID:885138 發表于 2021-2-24 00:07 來自手機 | 顯示全部樓層
Levent 發表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機的接口該怎么連接呢?

如圖中實物連有三條線,兩條是電源VCC GND,另一條是數據線。
電源可與單片機共用,燈珠數量多時最好單獨供電,但要與單片機共地,電壓5V(USB)至3.7V(鋰電池)都可以,3.3V有點閃。每個(或每兩個)燈珠的電源處要并一個小電容(0.1uF)。
單片機IO上拉輸出或推挽輸出,與燈帶數據輸入(DIN)間最好加一個小電阻(100歐)防沖擊,實驗時不加也可以。燈帶還有個輸出線DOUT,可以級聯下一燈帶的DIN。
單總線方式,驅動較簡單,兩種狀態:復位(較長時間的低電平)或位傳送。位0或位1取決于高電平脈寬,低電平寬度要求不高,小于復位就行。(三樓有具體說明)
應用挺方便的,動手試試。需要注意的是,因位傳送時高電平的脈寬均在uS級以下,單片機頻率要適當提高些。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:885138 發表于 2021-2-25 08:31 來自手機 | 顯示全部樓層
Levent 發表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機的接口該怎么連接呢?

我的另一個貼子里有普通51單片機驅動ws2812b的例子,對晶振頻率要求低一些。參看http://www.zg4o1577.cn/bbs/forum.php?mod=viewthread&tid=202899&extra=page%3D1&mobile=no
回復

使用道具 舉報

ID:611155 發表于 2021-3-30 00:40 | 顯示全部樓層
你的CY定義在哪里? 還有ws2812_write_byte 函數中 data<1逐個發送過程中,在while(i)里面怎么區分data的0,1? 如果是0,那么時間要小于0.45us,如果是1要大于0.45,這在函數中沒有體現?
回復

使用道具 舉報

ID:885138 發表于 2021-3-30 09:20 來自手機 | 顯示全部樓層
johnspen 發表于 2021-3-30 00:40
你的CY定義在哪里? 還有ws2812_write_byte 函數中 data

1,CY就是進位標志C,51單片機頭文件中有定義,在C語言中用CY直接調用;
2,左移data后,最高位移入CY;
3,函數中,將CY值寫至引腳的作用,CY=0比CY=1提前拉低,體現為高電平的脈寬變化。
回復

使用道具 舉報

ID:611155 發表于 2021-3-30 14:20 | 顯示全部樓層
xxd0708 發表于 2021-3-30 09:20
1,CY就是進位標志C,51單片機頭文件中有定義,在C語言中用CY直接調用;
2,左移data后,最高位移入CY; ...

哦,這個單片機沒用過
回復

使用道具 舉報

ID:611155 發表于 2021-3-30 14:28 | 顯示全部樓層
xxd0708 發表于 2021-3-30 09:20
1,CY就是進位標志C,51單片機頭文件中有定義,在C語言中用CY直接調用;
2,左移data后,最高位移入CY; ...

雖然這個單片機沒用過,我就大概猜一下邏輯,也就是說再while(i)里面,就先直接將IO口拉高,這里有一個時間,然后把CY(也就是左移后的高位給IO口),如果是1,那么就是高位持續了2個時間,如果是0,那么高位就持續了1個時間,如果WS2812_IO = 1;這個時間是0.45us,2個時間就是*2 =0.9us, 一個時間就是0.45us。
就是CY是1的話,就是高0.9us +_nop_();+WS2812_IO = 0;就是符合了W2812的時序
回復

使用道具 舉報

ID:920224 發表于 2021-5-12 19:16 | 顯示全部樓層
8M4T的片子有方法驅動嗎?樓主可以提供一下思路嗎謝謝。
回復

使用道具 舉報

ID:885138 發表于 2021-5-13 07:00 來自手機 | 顯示全部樓層
tungkin 發表于 2021-5-12 19:16
8M4T的片子有方法驅動嗎?樓主可以提供一下思路嗎謝謝。

8M4T每個指令周期0.5uS,置位或清零引腳為2個指令周期即1uS,顯然不能直接驅動。但可以用RC電路延時解決,參看我的另一個貼子
回復

使用道具 舉報

ID:885138 發表于 2021-5-13 07:01 來自手機 | 顯示全部樓層
xxd0708 發表于 2021-5-13 07:00
8M4T每個指令周期0.5uS,置位或清零引腳為2個指令周期即1uS,顯然不能直接驅動。但可以用RC電路延時解決 ...

搜索“51單片機(12MHz@12T)驅動WS2812B”
回復

使用道具 舉報

ID:920224 發表于 2021-5-13 09:15 | 顯示全部樓層
xxd0708 發表于 2021-5-13 07:01
搜索“51單片機(12MHz@12T)驅動WS2812B”

好的謝謝作者!
回復

使用道具 舉報

ID:991413 發表于 2021-12-12 21:20 | 顯示全部樓層
xdata那里我用的時候他總說前面少了個分號,咋回事
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区免费在线视频 | 欧美一区二区三区,视频 | 第四色播日韩第一页 | 九九精品久久久 | 蜜桃在线一区二区三区 | 日本免费一区二区三区四区 | 久久久噜噜噜www成人网 | 成人精品免费视频 | 91精品国产日韩91久久久久久 | 在线91| 日本啊v在线 | 久久亚洲国产精品日日av夜夜 | 色噜噜狠狠色综合中国 | 日韩中文电影 | 国产精品中文字幕一区二区三区 | 综合久久综合久久 | 亚洲毛片网站 | 成人午夜 | 亚洲一区二区三区福利 | 国精产品一品二品国精在线观看 | 国产亚洲一区二区三区在线 | 中文字幕在线一区二区三区 | 久久伦理电影 | 亚洲aⅴ精品 | 欧美精品二区三区 | 天堂在线www | 91美女在线观看 | 91网站在线播放 | 国产精品久久久久久久久久不蜜臀 | 国产一区二区在线播放 | 91中文字幕在线 | 日本特黄a级高清免费大片 特黄色一级毛片 | 成人免费影院 | 国产成人精品一区二区三区网站观看 | 视频一区二区三区中文字幕 | 久在线 | 中文字幕国产在线 | 福利精品在线观看 | 国产精品久久亚洲 | 久久精品男人的天堂 | 狠狠涩 |