本启动方案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++;
- }
复制代码
|