控制WS2812B实例代码

1.  控制方式

        WS2812B数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。

 2. 输入码型

        每一次传数据前,需要先给个复位信号,如下图所示。

        然后依次是每个灯的24bit数据,且写入24bit位数据的排序方式为:G -> R -> B ,如下图所示。

        而每个 bit 位的表示方式为:(高电平+低电平)时间,如下图所示。


3. 典型电路

4. 部分代码

完整单片机代码:https://download.csdn.net/download/qq_26043945/87598150

#define Num					10			//渐变色分频数
#define LED_Num 			4			//灯珠的数量
#define DIN_Port	GPIOB				//控制端口
#define DIN_PIN		GPIO_PIN_11	        //控制引脚
#define Set_PIN(X)	HAL_GPIO_WritePin(DIN_Port,DIN_PIN,X)uint32_t num_GRB=0;				//缓存的1位灯珠(24bit)的颜色值
uint32_t GRB_Buffer[256]={0};	//缓存的颜色值数组/**********************************************
*	1bit位数据位延时函数
*********************************************/
void WS2812_delay( uint8_t num_time ){while(num_time--);
}/**********************************************
*	对一个灯珠的24bit数据位进行输出
*********************************************/
void WS2812B_Run_24bit( uint32_t buff ){for(uint8_t zz=0;zz<24;zz++){//缓存的1位灯珠(24bit)的颜色值进行输出if((buff&0x800000)==0x800000){Set_PIN(GPIO_PIN_SET);WS2812_delay(5);Set_PIN(GPIO_PIN_RESET);WS2812_delay(2);}else{Set_PIN(GPIO_PIN_SET);WS2812_delay(2);Set_PIN(GPIO_PIN_RESET);WS2812_delay(5);}buff=buff<<1;}
}/**********************************************
*	NUM_num:	显示的灯珠数量
*********************************************/
void WS2812B_Run_All( uint16_t num ){for(uint16_t x=0;x

 5.  视频展示

单片机控制WS2812B视频展示


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部