注:本程序已验证可用,但只对本店模块做过适配测试,其他模块我们没法保证一定能用
实物参考链接 直戳跳转
一、资源说明
二、基本参数
这里用的是8X8 WS2812B RGB灯模块,其他WS2812B 一位,两位,四位灯均一样,
其他具体可以看下手册 ,主要参数是引脚定义和时序。
三、通信协议说明
因为直接引脚输出很难做到WS2812时序要求,这里用SPI通信来做数据输出.当RESET时间小于280us时会继续第一个周期,大于280us时才会重新开始新的周期。
WS2812时序:
代码:
//发一位0
void SPI_WS2812_Send_0()
{
SPI_SendByte(0XE0);
}
//发一位1
void SPI_WS2812_Send_1()
{
SPI_SendByte(0XFC);
}
//发送一个字节
void SPI_WS2812_SendByte(u8 byte)
{
u8 i;
for(i=0;i<8;i++)
{
if (byte>>7)
{
SPI_WS2812_Send_1();
}
else
{
SPI_WS2812_Send_0();
}
byte=byte<<1;
}
}
逻辑分析仪抓取图片分析,符合WS2812时序
四、部分代码说明
1、引脚定义
//这里直接接SPI的MOSI引脚,其他引脚可以不配置,但是SPI要配置
//MOSI引脚
#define WS2812_SPI_MOSI_APBxClock_FUN RCC_APB2PeriphClockCmd
#define WS2812_SPI_MOSI_CLK RCC_APB2Periph_GPIOA
#define WS2812_SPI_MOSI_PORT GPIOA
#define WS2812_SPI_MOSI_PIN GPIO_Pin_7
2、主函数
/*
* 函数名:main
* 描述 :主函数
*/
int main(void)
{
uint8_t i=0,Num=0;
DelayInit();
/* 8M串行flash W25Q64初始化 */
SPI_WS2812_Init();
while(1)
{
if(Num>9)
{
Num=0;
}
DIS_Num(Num,RGB_Buf[i%12]);
i++;
Num++;
DelayMs(500);
}
}
五、相关资料链接
STC89C52RC程序下载 直戳跳转
STM32F103C8T6程序下载
串口下载 直戳跳转
ST-LINK下载 直戳跳转
J-LINK下载 直戳跳转
DAP-LINK下载 直戳跳转
字符软件使用 直戳跳转
六、数字提取格式
文字格式:共阴——逐列式——逆向——C51,其他默认
提取字符:新建图像——输入点阵大小——输入字符图形——生成字模——复制数据到程序数组
七、视频效果展示与资料获取
实物参考链接 直戳跳转
八、注意事项
VCC GND请勿接反,接反易烧
显示异常时,排除接线接触不良
同程序换开发板不断电直接接其他同类模块建议按单片机复位
同WS2812B模块灯个数不一样的程序都通用
下载后显示如果有异常的时候可以重新上电复位下
九、接线说明
可参考程序main.c最上面接线说明