当前位置: 首页 >  焦点 > 详情
WS2812B程序控制
2023-06-26 14:15:54    来源:个人图书馆-hope图书馆hope

: 脚位:


(资料图)

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

关键词:

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