开发前的准备
在驱动WS2812前需要了解
-
STC89C516Rd+的性能潜力
重点关注单片机的工作周期长度,为后边计算准确的延时做准备!
可以发现该型号支持0到80Mhz的工作频率,但是
所以12T模式下,最快的时间是1秒/1200000012=1微秒,可能还会 有人想到6T模式,很遗憾,6T模式下执行一条nop也要0.5微秒,而ws2812的最小单位时序是320纳秒,所以该型号的12Mhz方案是不可以的,这是我们可以考虑一下40M(直插式最大)。
40M的工作频率下的单位机器周期1/4000000012=0.3微秒!!!!有戏,已经满足ws2812的最小单位时序。 -
WS2812数据手册中的工作时序
电量WS2812 需要了解工作时序原理,不能机械的b
软件上的准备
keil2安装好了么?
硬件上的准备
准备一块STC89C516Rd+最小系统板
经过一段时间的调试之后,可以发现一些重要的规律
1:110(三个机器周期)
0:100(三个机器周期)
需要注意的是要保证机器周期内的1的连续性
可以简单编写一些代码
#include<reg52.h>
#define unit unsigned int
unit row;
code unsigned char color[][24]={{1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
sbit out=P1^0;
void delayres1()
{
unit x;
for(x=0;x<3600;x++);
}
void output(unsigned char input[][24])
{
unsigned int x,y,z;
for(z=0;z<row;z++)
{
for(x=0;x<20;x++)
{
for(y=0;y<24;y++)
{
if(input[z][y])
{
out=1;
out=1;
}
else
{
out=1;
out=0;
}
out=0;
}
}
delayres1();
}
}
void main()
{
while(1)
{
output(color);
}
}
可以实现几个颜色的演示,接下来需要按照RGB的常规定义方法定义(255,255,255)
未完…