之前網上找的WS2812驅動很少并且代碼很混亂。國慶閑來無事,自己寫了一下WS2812的驅動程序,不多說什么,反正好用;我這總共驅動的是兩條一米60燈再加1個環形8燈共128燈完全沒毛病,速度還是非常快的,下圖為證。單片機是STC15的,試了很多型號都沒毛病,1T的單片機似乎都可以,其實個人認為WS2812的時序并沒有手冊上說的那么嚴格,實際使用時也很輕松就實現了!分享給有需要的朋友,只是簡單的驅動測試,喜歡什么花樣還請自由發揮,哈哈!
制作出來的實物圖如下:
IMG_20191003_125202.jpg (4.38 MB, 下載次數: 205)
下載附件
2019-10-6 16:08 上傳
IMG_20191003_124230.jpg (4.55 MB, 下載次數: 206)
下載附件
2019-10-6 16:06 上傳
IMG_20191006_152029.jpg (5.86 MB, 下載次數: 192)
下載附件
2019-10-6 16:08 上傳
/***WS2812驅動程序***/
/*作者:YUAN HUA FEI*/
#include<STC15.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define num 128//燈泡個數
sbit DO=P3^2;//數據輸出口口
void delay1us()
{
unsigned char a;
for(a=3;a>0;a--);
}
void delays(uint m)
{
uchar i,j;
while(--m)
{
for(i=6;i>0;i--)
for(j=250;j>0;j--);
}
}
/**目前測試STC15系列9~30MHz整得成**/
/**適當調整_NOP_(),最低8MHz也整得成***/
/*調整Re、Gr、Bl的比例可搭配出各種顏色*/
/********0~255,共256級亮度 *********/
/*****調整數字大小可調整色調及亮度*****/
//括號內分別代表(紅、綠、藍)數據
void WS2812WR(uchar Re,uchar Gr,uchar Bl)
{
uchar color=3,dat,i=8;
DO=0;
//依次輸出24bit GRB數據
while(color--)
{
if(color==2)dat=Gr;
if(color==1)dat=Re;
if(color==0)dat=Bl;
while(i--)
{
if(dat & 0X80)//寫1
{
DO=1;delay1us();
DO=0;_nop_();
}
else //寫0
{
DO=1;_nop_();
DO=0;delay1us();
}
dat <<= 1;
}
i=8;
}
}
余下可下載附件查看。。。
0.png (11.12 KB, 下載次數: 207)
下載附件
2019-10-6 16:56 上傳
全部資料51hei下載地址:
WS2812.zip
(32.67 KB, 下載次數: 1118)
2019-10-6 16:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|