STC89C51驱动WS2812实例(12MHz不行,40Mhz方案)

开发前的准备
在驱动WS2812前需要了解

  1. STC89C516Rd+的性能潜力
    重点关注单片机的工作周期长度,为后边计算准确的延时做准备!在这里插入图片描述
    可以发现该型号支持0到80Mhz的工作频率,但是
    在这里插入图片描述
    所以12T模式下,最快的时间是1秒/1200000012=1微秒,可能还会 有人想到6T模式,很遗憾,6T模式下执行一条nop也要0.5微秒,而ws2812的最小单位时序是320纳秒,所以该型号的12Mhz方案是不可以的,这是我们可以考虑一下40M(直插式最大)。
    40M的工作频率下的单位机器周期1/40000000
    12=0.3微秒!!!!有戏,已经满足ws2812的最小单位时序。

  2. 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)
未完…

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值