51系列驱动WS2812

 

51驱动WS2812B三色流水灯

WS2812简介

WS2812B-5050是一个集控制电路与发光电路于一体的智能外控LED光源;其外型采用最新的molding封装工艺,将IC与发光芯片封装在一个5050的封装尺寸中,每个元件即为一个像素点;像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。下图为我所采用的25位的WS2812B RGB LED开发板。

请添加图片描述

点击图片购买

模组选型

主控方面选择STC15系列的STC15W204S,这是一款只有8个引脚的高性能单片机,相对于传统的8051他的时钟速度更快,外围电路不需要太多内部集成了ICR晶振可供选择,在下载时勾选上就好,在驱动WS2812的过程中普通的12T单片机不是很好做到精准控制时序,所以选择次单片机IO口虽然小但是功能够用就好。具体图片如下图所示:

请添加图片描述

点击图片购买

关于WS2812的时序解析

在这里插入图片描述
由此可以看的出来WS2812对时序还是要求比较严格的,需要到ns级别,我们也可以看到发0码的时序和发1码的时序是刚好相反的。

发送数据格式解析

在这里插入图片描述
上图中我们可以知道在发送数据时是按照GRB的顺序高位先发的。

部分代码

发送 0,1码时序,此时序由逻辑分析仪拉波形得出,时间上准确无误。
void WS2812_bit(bit data_bit)
{
	if(data_bit)
	{
		LED=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		LED=0;	
	}
	else
	{
		LED=1;
		_nop_();_nop_();_nop_();_nop_();
		LED=0;
		_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();
	}
}
发送24位数据分开解析,封装此函数,能更容易移植改变灯的颜色直接根据RGB值设置就好
void WS2812_rand_color(unsigned char R,unsigned char G,unsigned char B)
{
	WS2812_bit(G&0X80);WS2812_bit(G&0X40);WS2812_bit(G&0X20);WS2812_bit(G&0X10);
	WS2812_bit(G&0X08);WS2812_bit(G&0X04);WS2812_bit(G&0X02);WS2812_bit(G&0X01);
	
	WS2812_bit(R&0X80);WS2812_bit(R&0X40);WS2812_bit(R&0X20);WS2812_bit(R&0X10);
	WS2812_bit(R&0X08);WS2812_bit(R&0X04);WS2812_bit(R&0X02);WS2812_bit(R&0X01);
	
	WS2812_bit(B&0X80);WS2812_bit(B&0X40);WS2812_bit(B&0X20);WS2812_bit(B&0X10);
	WS2812_bit(B&0X08);WS2812_bit(B&0X04);WS2812_bit(B&0X02);WS2812_bit(B&0X01);
}

功能现象

可以参考下图亮灯效果:
在这里插入图片描述

总结

长期发布此类文章,谢谢大家的关注与喜欢,代码有需求的留言再评论区邮箱获取哦。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

热门文章

收藏
浏览量:0
创建时间:2022-06-10 15:47