WS2812B程序控制

个人图书馆-hope图书馆hope

2023-06-26 14:15:54

: 脚位:


(资料图)

0码:高电平时间220ns-500ns 低电平时间750ns-2us

1码:高电平时间750ns-2us 低电平时间220ns-500ns

复位码:300us以上的低电平

由24位数据控制,高8bit控制绿灯,中8bit控制红灯,低8bit控制蓝灯。

二:STM32介绍

由于STM32时钟教学时钟配置72兆,按照计算纳秒延时应该是可以的,可是通过实际测试,

可能由于单条指令也会时间延时,所以延时达不到纳秒,所以只能通过单条指令循环的方法

来实现纳秒延时。延时程序如下:

void delay_ns(u32 nus){

while(nus--);

}

以下为控制6个灯不同颜色的程序:

uint8_t rgb_data[18] =

{0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x7F,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFF};

void delay_ns(u32 nus){ //延时程序n为1时大概延时时间为370ns左右

while(nus--);

}

void send_code(uint8_t * sdata){ //发送亮度数据

uint8_t i = 0,n = 0;

uint8_t x = 0,y = 0,z = 0;

for(x = 0;x < 18;x++){ //发送18字节数据;18 = 一个灯3字节数据*6个灯

n = sdata[x];

for(y = 0;y < 8;y++){

z = ((n<

if(z){

LED2 = 1; //灯的控制脚位设置为输出高

delay_ns(7);

LED2 = 0;

delay_ns(1); //灯的控制脚位设置为输出低

}else{

LED2 = 1;

delay_ns(1);

LED2 = 0;

delay_ns(7);

}

}

}

}

int main(void)

{

delay_init(); //延时函数初始化

LED_Init(); //初始化与LED连接的硬件接口

LED2 = 0;

delay_us(310); //发送数据前发送300us以上的复位数据

send_code(&rgb_data[0]);

delay_us(310);

send_code(&rgb_data[0]); //控制灯的数据发送两次以防其他影响

LED2 = 0;

delay_ms(310);

LED2 = 1;

while(1);

}

效果展示:

原文链接:https://blog.csdn.net/weixin_47869185/article/details/121718268

资讯

焦点

WS2812B程序控制

2023-06

为郑薇点赞!首节1暂停改攻防:杨力维3中3扭转战局 后三节收割|环球消息

2023-06

深圳通报百富兴大厦异响振动事件后续:房屋基础薄弱,将全面加固 每日快看

2023-06

全球今热点:国家铁路局就《铁路公益性运输监督管理办法》公开征求意见

2023-06

爱情公寓里有两个《海贼王》的剧情,注意到的都是骨灰级粉丝!

2023-06

美元兑日元汇率接近150水平 T.Rowe Price警告日本将再次干预 今头条

2023-06

霍州到太原的火车都有几点的_全球观速讯

2023-06

重庆秀山警方破获一贩卖大麻油电子烟案

2023-06