完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
ws2811做灯条显示的时候,有一两个灯珠有时会控制不到,颜色不对,不知什么问题?
void WS2811_SendByte(u8 dat)//发送1BIT的数据 { u8 i; for(i=0;i<8;i++) { if(dat & 0x80) //发送数据1 { Light_SDA=1; delay_2us(); Light_SDA=0; delay_05us(); } else //发送数据0 { Light_SDA=1; delay_05us(); Light_SDA=0; delay_2us(); } dat <<= 1; } } void Reset(void) { Light_SDA=0; delay_us(100); } void send_data_num(u8 icNum, u8 R,u8 G,u8 B) { u8 i; for(i=0;i WS2811_SendByte(G); WS2811_SendByte(R); WS2811_SendByte(B); } Reset(); } int main(void) { int i = 0, j=0; SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz delay_init(72); //延时函数初始化 LED_Init(); //LED端口初始化 send_data_num(10, 0xFF, 0x0, 0); // BLUE, RED, Green while(1) { send_data_num(10, 0xFF, 0x0, 0); // BLUE, RED, Green--显示蓝色 delay_ms(1000); send_data_num(10, 0x0, 0xFF, 0); // BLUE, RED, Green--红色 delay_ms(1000); send_data_num(10, 0x0, 0x0, 0xFF); // BLUE, RED, Green--绿色 delay_ms(1000); } 发现在while里面循环切换颜色的时候,有时候不能正常切换,会乱。比如本来要显示红色了,但是结果是有几个灯珠不是红色。搞了几天不知道什么问题?开始我怀疑是延时函数的问题,我用示波器测过我的延时函数delay_2us(),delay_05us()是2us,和0.5us的。请教下有谁做过,怎么处理的呢?谢谢! |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
请问OLED显示屏可以让整帧画面同一时间显示出来吗,而不是行扫?
9990 浏览 1 评论
8010 浏览 3 评论
动手做:使用 LED 灯带第 1 部分 – 制作住宅柜下照明
6834 浏览 3 评论
10939 浏览 13 评论
8995 浏览 2 评论
140浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-30 12:47 , Processed in 0.332557 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号