89C52RC控制 WS2812B

本文介绍了89C52RC单片机如何控制WS2812B LED灯串的工作原理,涉及到时序要求和实际电路中的频率计算。在24MHz时钟频率下,6T周期可以正常驱动WS2812B。代码实现中,通过精确控制高电平时间来发送1的信号,一位之间的间隔估计小于50ns,每个灯的数据经过24位传输给下一个灯。
摘要由CSDN通过智能技术生成

WS2812B 是内置芯片控制各种颜色
具体信息应该都可以 查到,这里不详细说了
在这里插入图片描述
还是上面的表 是时间表
通过实验 其实并不严格
89c52rc 指令是STC-Y1 也就是大部分指令 都要12 或者 24 个周期 才能完成(指定IO端口高低电平是12)
而WS2812B最短间隔0.4微妙(400ns)根据150ns 偏差 这个值在250-550ns之间
1s=1000ms=1,000,000us=1,000,000,000ns
计算得到1s/250ns12=48,000,000=48Mhz
1s/550ns
12=21.818,172=21.818,172Mhz
计算速度是这样的 但实际电路中24Mhz 一条指令500ns 灯是只能显示白色
所以最好还是按400算 就是30MZ(双倍为15Mhz) 电路中 32Mhz 12T 可以正常驱动

上面计算好了 下面 就说一下驱动过程吧
为方便计算我们就以24M 6T 运行 大概就是相当于48Mhz 元件电路不好 其实 运行 也就是 47.9hz
短周期指令 计算大概是250ns 其实是大于这个的
但根据上面250-550 之间【250-400】是可行


  sbit Send_Dat=P2^7;//先定义下IO口
  
  发送一位0时  

        Send_Dat=1     //250ns
        Send_Dat=0     //250ns
        _nop_();           //250ns
        _nop_();          // 250ns
        //根据上面够了

发送1时 //850 +/-150 为 【600-1000】

   Send_Dat=1     //250ns
    _nop_();          //250ns
     _nop_();         //250ns
   Send_Dat=0     //250ns

具体代码为:

void send0()//24Mhz 6T
{
   
       Send_Dat=1;    //250ns
        _nop_();          //250ns
         _nop_();         //250ns
       Send_Dat=0;     //250ns
}
void send1
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baiyiqny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值