標(biāo)題:
WS2812燈珠驅(qū)動(dòng)程序
[打印本頁]
作者:
16516
時(shí)間:
2019-12-3 10:07
標(biāo)題:
WS2812燈珠驅(qū)動(dòng)程序
本啟動(dòng)方案MCU采用的是STC8 24M晶振 驅(qū)動(dòng)的 需要挪用需要修改延時(shí)函數(shù)
#ifndef WS2812_Drive //如果其他文件已經(jīng)做了這個(gè)記號(hào),那么不執(zhí)行#define.
#define WS2812_Drive //如果其他文件沒有這個(gè)標(biāo)記,那么就需要新做一個(gè)記號(hào)(唯一的)。
#define Pixel_Data_Num 36 //定義緩存空間一顆燈珠3個(gè)緩存一共12顆燈珠
sbit WS2812_Data=P3^2;
extern void WS2812_Init();
extern u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
extern void WS2812B_Display_Drive();
#endif
文件中的u8 和u16 u32分別如下:
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
#include "all.h"
u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];//調(diào)用數(shù)組
void WS2812_Init()
{
WS2812_Data=1;
}
void WS2812B_Write_Data(u8 *chr,u8 len)//驅(qū)動(dòng)程序
{
u8 idata i,j,k,value;
for(i=0;i<len;i++)
{
value=*chr;
for(j=0;j<3;j++)
{
switch(j)
{
case 0:value=*(chr+1);break;
case 1:value=*(chr+0);break;
case 2:value=*(chr+2);break;
}
for(k=0;k<8;k++)
{
if((value&0x80)==0x80)
{
WS2812_Data=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
value<<=1;
WS2812_Data=0;
_nop_();
}
else
{
WS2812_Data=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
WS2812_Data=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
value<<=1;
}
}
}
chr+=3;
}
}
void WS2812B_Display_Drive()//顯示程序
{
static xdata u8 count=0;
switch(count)
{
case 0 :WS2812_Data=0;break;
case 100 :
EA=0;
WS2812B_Write_Data(WS2812_Write_Buffer+1,12);
EA=1;break;
case 101 :WS2812_Data=1;break;
}
count++;
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1