找回密码
 立即注册
楼主: 代码人生

代码人生 之 01点灯程序(WS2812B,64灯板,呼吸灯)

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2023-11-30 11:11:01 | 显示全部楼层
空*** 发表于 2023-10-9 20:49
灯的亮度是如何改变的?  比如一个红色是11111111,如果发送11111110是不是就要暗一些 ...

发送0x000000不发光,发送0x010101(白色)亮度最低,发送0xffffff(白色)亮度最高。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2023-12-1 08:46:12 | 显示全部楼层
我用STC8H8K64U-TSSOP20,内部IRC 主时钟 24000000L。
用楼主的void WS2812_bit(bit data_bit),
时序好像不太准确,因为测试的结果与楼主的不一样。
不知道为什么,我有空再用逻辑分析仪测一下脉冲宽度。

  1. //====================================================================
  2. //发送 0,1码时序,此时序由逻辑分析仪拉波形得出,时间上准确无误
  3. //复位 300ns以上
  4. //1码 高电平750ns-1.6us 低电平220ns-420ns (0.85us,0.4us)
  5. //0码 高电平220ns-420ns 低电平750ns-1.6us (0.4us,0.85us)
  6. //====================================================================
  7. void WS2812_bit(bit data_bit)
  8. {
  9.         if(data_bit)//0.85,0.4us
  10.         {
  11.                 ws2812b_IO=1;
  12.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  13.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  14.                 ws2812b_IO=0;       
  15.         }
  16.         else//0.4,0.85
  17.         {
  18.                 ws2812b_IO=1;
  19.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  20.                 ws2812b_IO=0;
  21.                 _nop_();_nop_();_nop_();_nop_();
  22.         }
  23. }
复制代码




回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-02 00:33:34
已绑定手机
已实名认证

46

主题

161

回帖

478

积分

中级会员

积分
478
发表于 2023-12-3 18:17:30 | 显示全部楼层
老哥,我买的32MHz晶振已经到货了,刚装到STC89C52上尝试了一下,可以驱动,这是我发的帖子,STC89C52RC驱动WS2812灯带,但是不知道怎么制作呼吸灯,求指导~

MCU开发者和爱好者
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-02 00:33:34
已绑定手机
已实名认证

46

主题

161

回帖

478

积分

中级会员

积分
478
发表于 2023-12-3 21:05:44 | 显示全部楼层
亲测代码有效,改了一下呼吸时间,效果很不错~

VID_20231203_210101.mp4

368.1 KB, 下载次数: 74

WS2812呼吸灯

MCU开发者和爱好者
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2023-12-4 18:39:01 | 显示全部楼层
可以用了,就是直接使用楼主的代码,原来我的项目是启用USB的,我只是把楼主的代码添加到项目中。
感谢楼主的分享!
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2023-12-4 18:46:53 | 显示全部楼层
请问楼主,如果项目中有开启某些中断,在驱动WS2812时,是不是需要暂时关闭全部中断,以免影响时序?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:509
  • 最近打卡:2025-05-02 00:02:10

0

主题

29

回帖

1804

积分

金牌会员

积分
1804
发表于 2023-12-6 00:06:38 | 显示全部楼层
硬件是怎么样的呀
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-9 08:47:04 | 显示全部楼层
SPI方案:
只用到MOSI驱动WS2812,但由于SPI的3个信号是捆绑在一起的,MISO、SCLK不能做它用。本例使用P1.3-MOSI输出驱动信号,用户可以切换到别的脚。
===将 MISO 不做其他用途;
===将 MISO管脚 先设置为对外输出0;
===MOSI 发送完成后,对外停止时输出的是 MISO 读到的状态, 0 ,这 STC-R&D 留了这么个绝活支持 WS2812B !!!

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-3-11 16:12:39 | 显示全部楼层
实测没毛病,一次点亮 微信图片_20240311161116.jpg

睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:319
  • 最近打卡:2025-05-01 20:29:25

10

主题

24

回帖

1142

积分

金牌会员

积分
1142
发表于 2024-3-30 22:47:29 | 显示全部楼层
void WS2812_rand_color(u8 R,u8 G,u8 B)
{
        SendData(G);
        SendData(R);
        SendData(B);
}

void DisP_Color(u32 dat)
{
    WS2812_rand_color(dat>>8,dat,dat>>16);   
}
这里RGB三色我测试了是错乱的,不知楼主有没有注意
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:14 , Processed in 0.125674 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表