标题:
WS2812灯珠驱动程序
[打印本页]
作者:
16516
时间:
2019-12-3 10:07
标题:
WS2812灯珠驱动程序
本启动方案MCU采用的是STC8 24M晶振 驱动的 需要挪用需要修改延时函数
#ifndef WS2812_Drive //如果其他文件已经做了这个记号,那么不执行#define.
#define WS2812_Drive //如果其他文件没有这个标记,那么就需要新做一个记号(唯一的)。
#define Pixel_Data_Num 36 //定义缓存空间一颗灯珠3个缓存一共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];//调用数组
void WS2812_Init()
{
WS2812_Data=1;
}
void WS2812B_Write_Data(u8 *chr,u8 len)//驱动程序
{
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++;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1