关于
WS2812B
我就不多说了,规格说明书讲的很详细。
目前网上分享的
2812
驱动比较少,而且说明不详,使用起来不是很方便,
本着共同进步的精神在这里和大家分享一下我的调试经验。
MCU
:
STC12C5A08S2
晶振:
24M
//
经验:
2812
时序要求还是比较严,对传统
51
来说实现真的有难度,之前
网上共享的
STC89C52
的驱动,即使真的点亮了灯带,估计也达不到我们的控制
要求。因为
1T
的
51
加上
24M
的晶振,我在调试时也有点勉强,一次
IO
的翻转
就要
300ns
。
下面是灯带的驱动程序,可直接用:
sbitDin
=P3^2;
uint8bdataLED_DAT;//
可位操作的数据发送暂存变量声明
sbitbit0=LED_DAT^0;//
被发送的数据各位定义
sbitbit1=LED_DAT^1;
sbitbit2=LED_DAT^2;
sbitbit3=LED_DAT^3;
sbitbit4=LED_DAT^4;
sbitbit5=LED_DAT^5;
sbitbit6=LED_DAT^6;
sbitbit7=LED_DAT^7;
//
复位码
:
低电平
>50us
voidReset()
{
uint8i;
Din=0;
for(i=0;i
}
//================================================================
//
发送
RGB
数据
,
一个
nop
为
40ns,
刷新一次
32*24*1.25us=960us
//================================================================
//1
码
高电平
850ns,
低电平
400ns
实测
863,424
#defineCODE1
{Din=1;_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();
\
Din=0;_nop_();_nop_();\
}
//
0
码
高电平
400ns,
低电平
850ns
实测
343,704
#defineCODE0
{Din=1;_nop_();_nop_();_nop_();_nop_();
\
Din=0;_nop_();_nop_();_nop_();_nop_();_nop_();\