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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 20444|回復(fù): 25
收起左側(cè)

炫酷ws2812流水燈好看又簡(jiǎn)單 附單片機(jī)源碼

  [復(fù)制鏈接]
ID:237567 發(fā)表于 2018-9-24 04:32 | 顯示全部樓層 |閱讀模式
STC15W204是8PIN的寬電壓版,驅(qū)動(dòng)WS2812的時(shí)候單片機(jī)可以用5V電壓,也可以用3.3V的電源。
RGB燈條的電源應(yīng)該是4-7V之間,目前驅(qū)動(dòng)的是8顆粒的燈條,原則上應(yīng)該可以驅(qū)動(dòng)更多顆粒的,不過(guò)手頭沒(méi)有那么長(zhǎng)的,沒(méi)試過(guò),有興趣的朋友可以自己試驗(yàn),看看最多可以驅(qū)動(dòng)多少個(gè)。按理論來(lái)講驅(qū)動(dòng)8顆和80顆應(yīng)該是一樣的。
硬件環(huán)境:
單片機(jī):STC15W204S(SOP8)
燈帶:WS2812(8顆粒)
非必需品:開(kāi)關(guān),USB轉(zhuǎn)接板,面包板,跳線若干。
使用片內(nèi)R/C振蕩器,連外部晶振都不需要,工作頻率為11.0592MHz
STC15W204S可以用其他其他STC 1T的MCU。
代碼也非常簡(jiǎn)單,只用到1個(gè)IO口,不需要進(jìn)行任何初始化。
如果使用其他工作頻率時(shí),請(qǐng)相應(yīng)調(diào)整DELAY_LONG和DELAY_SHORT的宏定義,適當(dāng)增減_nop()_的個(gè)數(shù),直到能正確驅(qū)動(dòng)燈條為止。

單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. // 使用的IO口,無(wú)需初始化
  4. sbit        DOUT = P3^3;

  5. #define        DELAY_LONG        {_nop_();_nop_();_nop_();}
  6. #define DELAY_SHORT        {_nop_();_nop_();}

  7. #define SEND_1        {DOUT=1;DELAY_LONG;DOUT=0;DELAY_SHORT;}
  8. #define SEND_0        {DOUT=1;DELAY_SHORT;DOUT=0;DELAY_LONG;}
  9. #define SEND_BIT(x) {if(x) {SEND_1;} else {SEND_0;}}

  10. // WS2812燈帶顆粒數(shù)
  11. #define        PIXEL_CNT                (8)

  12. // RGB顆粒結(jié)構(gòu)
  13. typedef struct {
  14.         unsigned int        next_pixel;                // 下一顆粒的index
  15.         unsigned char green;                                // 綠色值
  16.         unsigned char red;                                        // 紅色值
  17.         unsigned char blue;                                        // 藍(lán)色值
  18.         unsigned char brightness;                // 亮度值
  19. } Pixel;

  20. void send_p(Pixel _p);                                // 發(fā)送1個(gè)顆粒的值
  21. void send_pixels(Pixel *_p_list, unsigned int _start, unsigned int _cnt);                // 發(fā)送所有顆粒的值

  22. // 各顆粒值的初始值
  23. Pixel pixels[PIXEL_CNT] = {
  24. {1, 31, 255, 127, 255},
  25. {2, 31, 255, 127, 127},
  26. {3, 31, 255, 127, 31},
  27. {4, 31, 255, 127, 7},
  28. {5, 31, 255, 127, 1},
  29. {6, 31, 255, 127, 0},
  30. {7, 31, 255, 127, 0},
  31. {0, 31, 255, 127, 0},
  32. };

  33. // 通用計(jì)數(shù)器
  34. unsigned int cnt = 0;

  35. // 指定毫秒數(shù)Delay
  36. void delay_ms(unsigned int x)                //@11.0592MHz
  37. {
  38.         unsigned char i, j;

  39.         do {
  40.                 _nop_();
  41.                 _nop_();
  42.                 _nop_();
  43.                 i = 11;
  44.                 j = 190;
  45.                 do
  46.                 {
  47.                         while (--j);
  48.                 } while (--i);
  49.         } while (--x);
  50. }

  51. // 主函數(shù)
  52. void main() {
  53.         // 初始化段
  54.         
  55.         // 循環(huán)處理段
  56.         while(1) {
  57.                 // 等待50ms
  58.                 delay_ms(50);
  59.                 cnt %= 0x100;
  60.                 send_pixels(pixels, cnt % PIXEL_CNT, PIXEL_CNT);
  61.                 cnt++;
  62.         }        
  63. }

  64. void Delay50us()                //@11.0592MHz
  65. {
  66.         unsigned char i, j;

  67.         _nop_();
  68.         i = 1;
  69.         j = 134;
  70.         do
  71.         {
  72.                 while (--j);
  73.         } while (--i);
  74. }

  75. // RESET信號(hào)
  76. void reset() {
  77.         DOUT = 0;
  78.         Delay50us();
  79. }

  80. void send_p(Pixel _p) {
  81.         unsigned char p_v;
  82.         p_v = (_p.green * _p.brightness) >> 8;
  83.         SEND_BIT(p_v & 0x80);
  84.         SEND_BIT(p_v & 0x40);
  85.         SEND_BIT(p_v & 0x20);
  86.         SEND_BIT(p_v & 0x10);
  87.         SEND_BIT(p_v & 0x08);
  88.         SEND_BIT(p_v & 0x04);
  89.         SEND_BIT(p_v & 0x02);
  90.         SEND_BIT(p_v & 0x01);
  91.         p_v = (_p.red * _p.brightness) >> 8;
  92.         SEND_BIT(p_v & 0x80);
  93.         SEND_BIT(p_v & 0x40);
  94.         SEND_BIT(p_v & 0x20);
  95.         SEND_BIT(p_v & 0x10);
  96.         SEND_BIT(p_v & 0x08);
  97.         SEND_BIT(p_v & 0x04);
  98.         SEND_BIT(p_v & 0x02);
  99.         SEND_BIT(p_v & 0x01);
  100.         p_v = (_p.blue * _p.brightness) >> 8;
  101.         SEND_BIT(p_v & 0x80);
  102.         SEND_BIT(p_v & 0x40);
  103.         SEND_BIT(p_v & 0x20);
  104.         SEND_BIT(p_v & 0x10);
  105.         SEND_BIT(p_v & 0x08);
  106.         SEND_BIT(p_v & 0x04);
  107.         SEND_BIT(p_v & 0x02);
  108.         SEND_BIT(p_v & 0x01);
  109. }

  110. void send_pixels(Pixel *_p_list, unsigned int _start, unsigned int _cnt) {
  111.         Pixel *_p = &_p_list[_start % _cnt];
  112.         reset();
  113.         while(_cnt--) {
  114.                 send_p(*_p);
  115. ……………………

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

所有資料51hei提供下載:
WS2812B.zipWS2812B.zip (29.26 KB, 下載次數(shù): 493)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:86020 發(fā)表于 2018-9-27 21:11 | 顯示全部樓層
謝謝分享,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:324847 發(fā)表于 2018-10-8 16:16 | 顯示全部樓層
是不是不能用12T單片機(jī)
回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2018-10-8 19:34 來(lái)自觸屏版 | 顯示全部樓層
謝謝樓主分享!!!
回復(fù)

使用道具 舉報(bào)

ID:348669 發(fā)表于 2018-10-19 17:25 | 顯示全部樓層
感謝感謝
回復(fù)

使用道具 舉報(bào)

ID:413997 發(fā)表于 2018-10-23 13:49 | 顯示全部樓層
這個(gè)怎么用的
回復(fù)

使用道具 舉報(bào)

ID:413997 發(fā)表于 2018-10-23 13:50 | 顯示全部樓層
感謝樓主,能詳細(xì)點(diǎn)嗎
回復(fù)

使用道具 舉報(bào)

ID:373838 發(fā)表于 2018-11-16 11:02 | 顯示全部樓層
你試過(guò)這個(gè)程序沒(méi)有
我試了,完全不受控制 只是亮了
回復(fù)

使用道具 舉報(bào)

ID:439460 發(fā)表于 2018-12-5 20:56 | 顯示全部樓層
這個(gè)程序只能點(diǎn)亮8個(gè)燈,不能實(shí)現(xiàn)流水切換顏色的嗎?
回復(fù)

使用道具 舉報(bào)

ID:439460 發(fā)表于 2018-12-6 14:41 來(lái)自觸屏版 | 顯示全部樓層
這個(gè)程序要怎么調(diào)才能切換顏色啊?
回復(fù)

使用道具 舉報(bào)

ID:439460 發(fā)表于 2018-12-6 14:51 來(lái)自觸屏版 | 顯示全部樓層
多多只能點(diǎn)亮17個(gè)燈,所有燈還不受控制啊
回復(fù)

使用道具 舉報(bào)

ID:586577 發(fā)表于 2019-7-18 20:18 | 顯示全部樓層
新手看看
回復(fù)

使用道具 舉報(bào)

ID:299054 發(fā)表于 2019-9-17 18:07 | 顯示全部樓層
謝謝分享,學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:444661 發(fā)表于 2019-10-31 07:38 | 顯示全部樓層
就是看看 。。。。達(dá)到
回復(fù)

使用道具 舉報(bào)

ID:632514 發(fā)表于 2019-10-31 10:50 | 顯示全部樓層

謝謝樓主分享!!!想下載新手沒(méi)有幣
回復(fù)

使用道具 舉報(bào)

ID:243748 發(fā)表于 2019-12-13 13:45 來(lái)自觸屏版 | 顯示全部樓層
我也說(shuō)一句想整個(gè)車(chē)燈
回復(fù)

使用道具 舉報(bào)

ID:610004 發(fā)表于 2020-3-15 16:45 | 顯示全部樓層
調(diào)節(jié)亮度的那個(gè)函數(shù),怎么理解?
回復(fù)

使用道具 舉報(bào)

ID:150532 發(fā)表于 2020-4-30 15:01 | 顯示全部樓層
謝謝,剛好可以用來(lái)做設(shè)計(jì)
回復(fù)

使用道具 舉報(bào)

ID:830745 發(fā)表于 2020-10-16 16:10 | 顯示全部樓層
最近在用這個(gè)RGB燈,剛好找到這里,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:947624 發(fā)表于 2021-7-1 08:54 | 顯示全部樓層
亮度值你是怎么增減的?
回復(fù)

使用道具 舉報(bào)

ID:88256 發(fā)表于 2021-9-4 00:20 | 顯示全部樓層
下載一個(gè)撿現(xiàn)成的程序
回復(fù)

使用道具 舉報(bào)

ID:1126908 發(fā)表于 2024-6-25 19:28 | 顯示全部樓層
你這個(gè)不能流水變色啊
回復(fù)

使用道具 舉報(bào)

ID:612920 發(fā)表于 2024-10-17 14:10 | 顯示全部樓層
人才啊,用一個(gè)fastled庫(kù)代碼要省很多
回復(fù)

使用道具 舉報(bào)

ID:103436 發(fā)表于 2024-11-19 22:38 | 顯示全部樓層
謝謝分享,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:433219 發(fā)表于 2024-11-25 17:27 | 顯示全部樓層
類(lèi)似2812燈珠 的還有好多種
回復(fù)

使用道具 舉報(bào)

ID:6467 發(fā)表于 2024-12-24 23:04 | 顯示全部樓層
近在用這個(gè)RGB燈,剛好找到這里,謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线观看国产 | 国产成人免费视频 | 一区二区三区亚洲 | 国产午夜精品一区二区三区嫩草 | 精品一区二区三区四区五区 | 国产综合视频 | 国产成人av电影 | 国产精彩视频一区 | 欧美黄色绿像 | 久久国产精品久久久久 | 国产91丝袜在线18 | 精品久久久久一区二区国产 | 亚洲一区二区免费视频 | 1000部精品久久久久久久久 | 亚洲精选久久 | 韩日精品视频 | 丝袜美腿av | 亚洲欧美中文日韩在线 | 理伦毛片| 色视频www在线播放国产人成 | 亚洲国产精品99久久久久久久久 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 黄视频网址 | 欧美不卡视频 | 久久久精品一区 | 国产日韩欧美 | 99综合在线 | 天天天操 | 亚洲国产成人精品在线 | 精品少妇v888av | 国产探花在线观看视频 | 亚洲中字在线 | 中文字幕一区二区三区在线视频 | 久草视频在线播放 | 日本中文字幕一区 | 盗摄精品av一区二区三区 | 亚洲福利网站 | 日韩免费福利视频 | 国产精品一区二区三区在线 | avtt国产 | 国产一区久久久 |