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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)驅(qū)動WS2812B燈演示程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:885138 發(fā)表于 2021-2-20 16:07 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
示例采用HC89S003F4單片機(jī)和7燈Ws2812燈帶。HC89S003F4是1T增強(qiáng)型51單片機(jī),如用其他51單片機(jī),需調(diào)整晶振頻率。示例僅進(jìn)行7燈的單次驅(qū)動,可在聲明和數(shù)組中改變燈珠數(shù)量和數(shù)據(jù),主函數(shù)中修改后可實現(xiàn)流水燈效果。
/*
*HC89S003F4驅(qū)動WS2812彩燈演示(7只Led)
*CPU:HC89S003F4 16K bytes flash ROM, 256+256 bytes data RAM
*HC89S003F4是1T增強(qiáng)型51單片機(jī),如用普通51單片機(jī),晶振頻率需增大
*/

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

  4. #define WS2812_IO P2_2   //定義驅(qū)動引腳
  5. //xdata unsigned char col[21];
  6. //7只LED,共21個數(shù)據(jù),每組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; //           如果主頻較高適當(dāng)增加
  20.         while(i--);
  21.         WS2812_IO = 0;
  22.     i = 100; //           如果主頻較高適當(dāng)增加
  23.         while(i--);
  24. }

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

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

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

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

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

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:885138 發(fā)表于 2021-2-20 16:38 來自觸屏版 | 只看該作者
效果圖

JPEG_20210220_163457_.jpg (1.17 MB, 下載次數(shù): 170)

JPEG_20210220_163457_.jpg

JPEG_20210220_163708_.jpg (705.44 KB, 下載次數(shù): 170)

JPEG_20210220_163708_.jpg

評分

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

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:885138 發(fā)表于 2021-2-21 18:28 來自觸屏版 | 只看該作者
轉(zhuǎn)發(fā)網(wǎng)友實驗總結(jié)的WS2812B時序要求,供大家參考。

Screenshot_20210221-164434.jpg (257.48 KB, 下載次數(shù): 186)

Screenshot_20210221-164434.jpg

評分

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

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:390416 發(fā)表于 2021-2-22 20:05 | 只看該作者
回復(fù)

使用道具 舉報

5#
ID:885879 發(fā)表于 2021-2-23 16:22 | 只看該作者
樓主你好,新手求教,燈帶和單片機(jī)的接口該怎么連接呢?
回復(fù)

使用道具 舉報

6#
ID:390416 發(fā)表于 2021-2-23 16:55 | 只看該作者
Levent 發(fā)表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機(jī)的接口該怎么連接呢?

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

使用道具 舉報

7#
ID:885138 發(fā)表于 2021-2-24 00:07 來自觸屏版 | 只看該作者
Levent 發(fā)表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機(jī)的接口該怎么連接呢?

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

評分

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

查看全部評分

回復(fù)

使用道具 舉報

8#
ID:885138 發(fā)表于 2021-2-25 08:31 來自觸屏版 | 只看該作者
Levent 發(fā)表于 2021-2-23 16:22
樓主你好,新手求教,燈帶和單片機(jī)的接口該怎么連接呢?

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

使用道具 舉報

9#
ID:611155 發(fā)表于 2021-3-30 00:40 | 只看該作者
你的CY定義在哪里? 還有ws2812_write_byte 函數(shù)中 data<1逐個發(fā)送過程中,在while(i)里面怎么區(qū)分data的0,1? 如果是0,那么時間要小于0.45us,如果是1要大于0.45,這在函數(shù)中沒有體現(xiàn)?
回復(fù)

使用道具 舉報

10#
ID:885138 發(fā)表于 2021-3-30 09:20 來自觸屏版 | 只看該作者
johnspen 發(fā)表于 2021-3-30 00:40
你的CY定義在哪里? 還有ws2812_write_byte 函數(shù)中 data

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

使用道具 舉報

11#
ID:611155 發(fā)表于 2021-3-30 14:20 | 只看該作者
xxd0708 發(fā)表于 2021-3-30 09:20
1,CY就是進(jìn)位標(biāo)志C,51單片機(jī)頭文件中有定義,在C語言中用CY直接調(diào)用;
2,左移data后,最高位移入CY; ...

哦,這個單片機(jī)沒用過
回復(fù)

使用道具 舉報

12#
ID:611155 發(fā)表于 2021-3-30 14:28 | 只看該作者
xxd0708 發(fā)表于 2021-3-30 09:20
1,CY就是進(jìn)位標(biāo)志C,51單片機(jī)頭文件中有定義,在C語言中用CY直接調(diào)用;
2,左移data后,最高位移入CY; ...

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

使用道具 舉報

13#
ID:920224 發(fā)表于 2021-5-12 19:16 | 只看該作者
8M4T的片子有方法驅(qū)動嗎?樓主可以提供一下思路嗎謝謝。
回復(fù)

使用道具 舉報

14#
ID:885138 發(fā)表于 2021-5-13 07:00 來自觸屏版 | 只看該作者
tungkin 發(fā)表于 2021-5-12 19:16
8M4T的片子有方法驅(qū)動嗎?樓主可以提供一下思路嗎謝謝。

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

使用道具 舉報

15#
ID:885138 發(fā)表于 2021-5-13 07:01 來自觸屏版 | 只看該作者
xxd0708 發(fā)表于 2021-5-13 07:00
8M4T每個指令周期0.5uS,置位或清零引腳為2個指令周期即1uS,顯然不能直接驅(qū)動。但可以用RC電路延時解決 ...

搜索“51單片機(jī)(12MHz@12T)驅(qū)動WS2812B”
回復(fù)

使用道具 舉報

16#
ID:920224 發(fā)表于 2021-5-13 09:15 | 只看該作者
xxd0708 發(fā)表于 2021-5-13 07:01
搜索“51單片機(jī)(12MHz@12T)驅(qū)動WS2812B”

好的謝謝作者!
回復(fù)

使用道具 舉報

17#
ID:991413 發(fā)表于 2021-12-12 21:20 | 只看該作者
xdata那里我用的時候他總說前面少了個分號,咋回事
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区免费观看 | 国产高清视频 | 欧美成人综合 | 7777在线| 色噜噜色综合 | 欧美二区在线 | 人人干人人草 | 九九精品在线 | 国产亚洲一区二区在线观看 | 精品一区二区在线观看 | 一二三在线视频 | 91影院在线观看 | 午夜激情一区 | 成人性生交a做片 | 粉嫩粉嫩芽的虎白女18在线视频 | 在线日韩| 91精品国产乱码久久久久久久久 | 91久久久久久 | 午夜看看 | 国产精品日韩高清伦字幕搜索 | 91久久久久久久久 | 欧美一级在线 | 免费h在线| 久久久毛片 | 免费视频99| 欧美八区| 中文字幕精品一区 | 亚洲视频一区在线观看 | 国产精品精品视频一区二区三区 | 男人av在线播放 | 日日碰狠狠躁久久躁96avv | 欧美在线观看一区 | 成人一区二区视频 | 激情a| 男人影音 | 成人在线免费观看视频 | 国产成人在线播放 | 成人综合视频在线 | 91污在线 | 嫩草网 | 日韩成人影院在线观看 |