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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10899|回復: 15
收起左側

STC8系列單片機WS2812驅動程序

  [復制鏈接]
ID:290373 發(fā)表于 2021-1-11 23:02 | 顯示全部樓層 |閱讀模式
依照STC-Y6指令集編寫,編譯時Keil優(yōu)化選項默認,理論上STC8全系列通用。
只需配置IO口和系統工作時鐘即可使用,系統時鐘目前適配范圍為5.5296-48MHz。
STC8H8K64S4U@12.0MHz驅動效果如下圖:
(分別點亮三個燈,顏色為B,G,R)
51hei圖片20210111230033.jpg

主要使用的單字節(jié)數據發(fā)送函數如下:

  1. #include "ws2812.h"

  2. void WS2812_SendByte(unsigned char dat)
  3. {
  4.     unsigned char i = 8;
  5.     dat <<= 1;
  6.     while (i)
  7.     {
  8.         WS2812_IO = 1;

  9.         //5.5296 - 6.8
  10.         #if SYS_FREQ < 55296 || SYS_FREQ > 480000
  11.         #error 頻率未適配, 不在 5.5296-48MHz
  12.         #else
  13.         _nop_();
  14.         #endif

  15.         //6.8 - 10.8
  16.         #if SYS_FREQ >= 68000
  17.         _nop_();
  18.         #endif

  19.         //10.8 – 21.4
  20.         #if SYS_FREQ >= 108000
  21.         _nop_();
  22.         _nop_();
  23.         #endif

  24.         //21.4 – 29.5
  25.         #if SYS_FREQ >= 214000
  26.         _nop_();
  27.         _nop_();
  28.         #endif

  29.         //29.5 – 35.0
  30.         #if SYS_FREQ >= 295000
  31.         _nop_();
  32.         _nop_();
  33.         #endif

  34.         //35.0 – 40.7
  35.         #if SYS_FREQ >= 350000
  36.         _nop_();
  37.         _nop_();
  38.         #endif

  39.         //40.7 – 46.8
  40.         #if SYS_FREQ >= 407000
  41.         _nop_();
  42.         _nop_();
  43.         #endif

  44.         //46.8 – 48
  45.         #if SYS_FREQ >= 468000
  46.         _nop_();
  47.         _nop_();
  48.         #endif

  49.         WS2812_IO = CY;
  50.         //5.5296 - 6.8
  51.         #if SYS_FREQ < 55296 || SYS_FREQ > 480000
  52.         #error 頻率未適配
  53.         #else
  54.         _nop_();
  55.         #endif

  56.         //6.8 - 10.8
  57.         #if SYS_FREQ >= 68000
  58.         _nop_();
  59.         #endif

  60.         //10.8 – 21.4
  61.         #if SYS_FREQ >= 108000
  62.         _nop_();
  63.         _nop_();
  64.         #endif

  65.         //21.4 – 29.5
  66.         #if SYS_FREQ >= 214000
  67.         _nop_();
  68.         _nop_();
  69.         #endif

  70.         //29.5 – 35.0
  71.         #if SYS_FREQ >= 295000
  72.         _nop_();
  73.         _nop_();
  74.         #endif

  75.         //35.0 – 40.7
  76.         #if SYS_FREQ >= 350000
  77.         _nop_();
  78.         _nop_();
  79.         #endif

  80.         //40.7 – 46.8
  81.         #if SYS_FREQ >= 407000
  82.         _nop_();
  83.         _nop_();
  84.         #endif

  85.         //46.8 – 48
  86.         #if SYS_FREQ >= 468000
  87.         _nop_();
  88.         _nop_();
  89.         #endif
  90.         WS2812_IO = 0;
  91.         dat <<= 1;
  92.         i--;
  93.     }
  94. }

  95. void Send_WS2812RGB(unsigned char r, unsigned char g, unsigned char b)
  96. {
  97.     WS2812_SendByte(g);
  98.     WS2812_SendByte(r);
  99.     WS2812_SendByte(b);
  100. }

  101. void Send_WS2812(unsigned long dat)
  102. {
  103.     WS2812_SendByte(dat >> 8 & 0xff);
  104.     WS2812_SendByte(dat >> 16 & 0xff);
  105.     WS2812_SendByte(dat & 0xff);
  106. }
復制代碼
附測試樣例:
WS2812.zip (18.51 KB, 下載次數: 268)

評分

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

查看全部評分

回復

使用道具 舉報

ID:836437 發(fā)表于 2021-1-12 12:49 | 顯示全部樓層
方式不錯
回復

使用道具 舉報

ID:390416 發(fā)表于 2021-1-15 20:58 | 顯示全部樓層
一開始就移位了,你確定這樣數據不出錯嗎?
回復

使用道具 舉報

ID:877820 發(fā)表于 2021-1-20 17:54 | 顯示全部樓層
如何點亮單個燈呢
回復

使用道具 舉報

ID:290373 發(fā)表于 2021-1-21 17:22 | 顯示全部樓層
人人學會單片機 發(fā)表于 2021-1-15 20:58
一開始就移位了,你確定這樣數據不出錯嗎?

數據是完整的,用了CY位存儲的位移結果,其他運算在數據傳輸的循環(huán)里也不會影響CY。
這是傳送了一字節(jié)的0x55的波形:
未標題-1.png
回復

使用道具 舉報

ID:290373 發(fā)表于 2021-1-21 17:23 | 顯示全部樓層

送幾個數據點幾個燈
回復

使用道具 舉報

ID:325642 發(fā)表于 2021-1-24 21:06 | 顯示全部樓層
這樣的LED在顏色不變時,亮度怎么調呢
回復

使用道具 舉報

ID:718536 發(fā)表于 2021-3-4 01:19 | 顯示全部樓層
冬天的野狼 發(fā)表于 2021-1-24 21:06
這樣的LED在顏色不變時,亮度怎么調呢

RGB顏色 0-255級別亮度。0就是不亮。0,0,0就是三個顏色都滅了。
回復

使用道具 舉報

ID:973749 發(fā)表于 2021-11-1 17:19 | 顯示全部樓層
冬天的野狼 發(fā)表于 2021-1-24 21:06
這樣的LED在顏色不變時,亮度怎么調呢

按樓主程序,比如開始你是綠色最亮:
  1. Send_WS2812RGB(255,0,0);
復制代碼

調整到一半亮度就是255/2=128:
  1. Send_WS2812RGB(128,0,0);
復制代碼
回復

使用道具 舉報

ID:1015077 發(fā)表于 2022-4-19 14:54 | 顯示全部樓層
eastwife 發(fā)表于 2021-11-1 17:19
按樓主程序,比如開始你是綠色最亮:

調整到一半亮度就是255/2=128:

可是例如RGB(255,255,255)的白色調到一半(128,128,128)變成了灰色,它顏色改變了呀,請問可以不改變顏色只改變亮度嗎
回復

使用道具 舉報

ID:99525 發(fā)表于 2022-5-31 07:30 | 顯示全部樓層
Berri 發(fā)表于 2022-4-19 14:54
可是例如RGB(255,255,255)的白色調到一半(128,128,128)變成了灰色,它顏色改變了呀,請問可以不 ...

白色變暗,那不就是灰色嗎?
回復

使用道具 舉報

ID:136485 發(fā)表于 2022-5-31 08:48 | 顯示全部樓層
剛好前段時間也有弄這個,下載下來參考參考
回復

使用道具 舉報

ID:399179 發(fā)表于 2023-4-10 21:15 來自觸屏版 | 顯示全部樓層
真在研究這個,謝謝!
回復

使用道具 舉報

ID:398094 發(fā)表于 2023-11-22 09:19 | 顯示全部樓層
如何點亮單個燈呢
回復

使用道具 舉報

ID:373976 發(fā)表于 2023-11-26 10:12 | 顯示全部樓層
想法不錯,一會兒測試一下
回復

使用道具 舉報

ID:1104147 發(fā)表于 2023-12-13 17:18 | 顯示全部樓層
這是IO口點的?
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费在线观看 | 国产黄a三级三级三级看三级男男 | 毛片中文字幕 | 亚洲免费在线观看 | 日韩视频在线免费观看 | 欧美日韩视频在线 | 一区二区三区国产精品 | 亚洲一区国产 | 国产精品久久久久久久成人午夜 | 欧美一级黄色大片 | www.日本在线观看 | 国产在线不卡视频 | 波多野吉衣一二三区乱码 | 日韩毛片网站 | 午夜国产在线 | 深夜福利网站 | 四虎精品视频 | 成人免费看片98欧美 | 超碰人人网 | 日韩视频在线观看 | 日本三级一区 | 日本欧美久久久久免费播放网 | 国产日韩欧美视频 | 夜夜操夜夜 | 亚洲精品免费在线观看 | 久久黄色免费视频 | 欧美日韩中文字幕在线观看 | 久草成人 | 美女毛片视频 | 精品国产欧美一区二区三区成人 | 国产精品tv| 极品新婚夜少妇真紧 | 亚洲精品美女 | www.国产精品.com | 一级黄色免费视频 | 伊人黄色 | www.粉色视频在线观看 | 国产吃瓜黑料一区二区 | 欧美在线免费观看 | 欧美一二| 黄色高潮视频 |