WS2812资料包(含51单片机,arduino平台与stm32的各种控制源码):
WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。LED具有低电压驱动,环保节能,亮度高,散射角度大,一致性好,超低功率,超长寿命等优点。将控制电路集成于LED上面,电路变得更加简单,体积小,安装更加简便。
●控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
●内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
●内置上电复位和掉电复位电路。
●每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于
400Hz/s。
●串行级联接口,能通过一根信号线完成数据的接收与解码。
●任意两点传传输距离在不超过5米时无需增加任何电路。
●当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式不小于1024点。
●数据发送速度可达800Kbps。
●光的颜色高度一致,性价比高。
WS2812引脚图与数据手册(51hei附件可下载)
电路原理图如下:
源码:
RGB LED Cycle Test
RGB LED Cycle 七彩切换效果程序
RGB LED Cycle 七彩渐变效果程序
RGB LED Cycle 七彩覆盖效果程序
RGB LED Cycle 三色循环效果程序
RGB LED Cycle 三色覆盖效果程序
RGB LED Cycle 单个红色旋转效果程序
RGB LED Cycle 双色渐变彩带旋转效果程序
RGB LED Cycle 红绿蓝三色旋转效果程序
RGB LED Cycle 红绿蓝三色旋转效果程序2
WS2812B数据驱动
带单片机8位全彩流水灯程序模板V1.0
带单片机8位全彩流水灯程序模板V1.1
stm32
3步打造stm32驱动的ws2812智能灯.zip
NucleoL496智能灯数据点.zip
51单片机源程序如下:
- /*----------------------------------------------------------------------------
- * 项目名称:
- RGB LED驱动程序
- * 功能描述:
- 1、将整个数组的数据发送得到LED进行显示
- 2、从指定像素开始将整个数组的数据发送到LED显示
- 3、发送复位信号
- * 版权信息:
- (c) 飞翼电子, 2014.
- * 历史版本:
- 2014-03-15:
- - 初始版本 V1.0.0;
- * 配置说明:
- MCU: STC15W204S
- 晶振: 内部晶振:33MHz
- 扩展模块: -
- 软件: Keil.C51.V9.01
- * 备注:
- ------------------------------------------------------------------------------*/
- #include "STC15W.h"
- #include <intrins.h>
- #include "ws2812.h"
- //-------------------------------------------------------------------------------
- //子程序名称:IO_Init(void)
- //功能:端口初始化
- //-------------------------------------------------------------------------------
- void IO_Init(void)
- {
- ;
- }
- //-------------------------------------------------------------------------------
- //子程序名称:ResetDateFlow(void)
- //功能:复位,为下一次发送做准备,
- //说明:将DI置位为0后,延时约65us
- //-------------------------------------------------------------------------------
- void ResetDataFlow(void)
- {
- unsigned char i,j;
- DI=0; //DI置为0后,延时50us以上,实现帧复位
- for(i=0;i<15;i++) //此处33Mhz时延时65us
- {
- for(j=0;j<20;j++)
- {
- ;
- }
- }
- }
- //-------------------------------------------------------------------------------
- //子程序名称:SendOnePix(unsigned char *ptr)
- //功能:发送一个像素点的24bit数据
- //参数:接收的参数是一个指针,此函数会将此指针指向的地址的连续的三个Byte的数据发送
- //说明:在主函数中直接调用此函数时,在整个帧发送开始前需要先执行 ResetDataFlow()
- // 数据是按归零码的方式发送,速率为800KBPS
- //-------------------------------------------------------------------------------
- void SendOnePix(unsigned char *ptr)
- {
- unsigned char i,j;
- unsigned char temp;
- for(j=0;j<3;j++)
- {
- temp=ptr[j];
- for(i=0;i<8;i++)
- {
- if(temp&0x80) //从高位开始发送
- {
- DI=1; //发送“1”码
- _nop_(); //不可省略的nop(),延时指定时间作用,晶振频率33MHz
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- DI=0;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- else //发送“0”码
- {
- DI=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- DI=0;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- temp=(temp<<1); //左移位
- }
- }
- }
- //-------------------------------------------------------------------------------
- //子程序名称:SendOneFrame(unsigned char *ptr)
- //功能:发送一帧数据(即发送整个数组的数据)
- //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整个数组的数据发送
- //-------------------------------------------------------------------------------
- void SendOneFrame(unsigned char *ptr)
- {
- unsigned char k;
- ResetDataFlow(); //发送帧复位信号
- for(k=0;k<SNUM;k++) //发送一帧数据,SNUM是板子LED的个数
- {
- SendOnePix(&ptr[(3*k)]);
- }
- ResetDataFlow(); //发送帧复位信号
- }
- //-------------------------------------------------------------------------------
- //子程序名称:SendSameColor(unsigned char *ptr,unsigned char cnt)
- //功能:相同颜色的点发送cnt次
- //参数:接收的参数是一个指针,指向像素点颜色数组,cnt传递发送个数
- //-------------------------------------------------------------------------------
- void SendSameColor(unsigned char *ptr,unsigned char cnt)
- {
- unsigned char k;
- ResetDataFlow(); //发送帧复位信号
- for(k=0;k<cnt;k++) //发送一帧数据,SNUM是板子LED的个数
- {
- SendOnePix(&ptr[0]);
- }
- ResetDataFlow(); //发送帧复位信号
- }
- //-------------------------------------------------------------------------------
- //子程序名称:SendOneFrameFrom(unsigned char i,unsigned char *ptr)
- //功能:从指定的像素点开始发送一帧数据(即发送整个数组的数据)
- //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整帧数据发送
- // i:把数组的第0个像素数据发送到第i个像素点(第0个像素是板上标号为01的像素)
- //说明:即原本对应第一个像素的数据会发送到第i个像素点(LED)上
- //-------------------------------------------------------------------------------
- void SendOneFrameFrom(unsigned char i,unsigned char *ptr)
- {
- unsigned char k;
- ResetDataFlow(); //发送帧复位信号
- for(k=(SNUM-i);k<SNUM;k++) //发送一帧数据
- {
- SendOnePix(&ptr[(3*k)]);
- }
- for(k=0;k<(SNUM-i);k++)
- {
- SendOnePix(&ptr[(3*k)]);
- }
- ResetDataFlow(); //发送帧复位信号
- }
- //-------------------------------------------------------------------------------
- //子程序名称:SendOneFrameSince(unsigned char i,unsigned char *ptr)
- //功能:从第i个像素点的数据开始发送一帧数据(即发送整个数组的数据)
- //参数:接收的参数是一个指针,此函数会将此指针指向的地址的整帧数据发送
- // i:把数组的第i个像素数据发送到第1个像素点
- //说明:即原本对应第i像素的数据会发送到第1个像素点(LED)上,第i+1个像素点的数据
- // 发送到第2个像素上
- //-------------------------------------------------------------------------------
- void SendOneFrameSince(unsigned char i,unsigned char *ptr)
- {
- unsigned char k;
- ResetDataFlow(); //发送帧复位信号
- for(k=i;k<SNUM;k++) //发送一帧数据
- {
- SendOnePix(&ptr[(3*k)]);
- }
- for(k=0;k<i;k++)
- {
- SendOnePix(&ptr[(3*k)]);
- }
- ResetDataFlow(); //发送帧复位信号
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
ws2812B模块资料.rar
(12.02 MB, 下载次数: 1180)
|