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     //250nsSend_Dat=0     //250ns_nop_();           //250ns_nop_();          // 250ns//根据上面够了

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

   Send_Dat=1     //250ns_nop_();          //250ns_nop_();         //250nsSend_Dat=0     //250ns

具体代码为:

void send0()//24Mhz 6T
{Send_Dat=1;    //250ns_nop_();          //250ns_nop_();         //250nsSend_Dat=0;     //250ns
}
void send1()//24Mhz 6T
{Send_Dat=1;     //250nsSend_Dat=0;    //250ns_nop_();       //250ns_nop_();       // 250ns
}

发送一个字节 就是

void sendChar(uchar v)//发送一个字节
{uchar i=8;//一个字节是8位do{if(v&0x80){//判断高位是不是为1,如果为1send1();//发送1}else//不为1{send0();//发送0}v<<=1;//向左移1位}while(--i);
}
void SendColor(uchar r,g,b)//发送一个颜色
{//颜色排序为绿蓝红sendChar(g);//发送绿sendChar(b);//发送蓝sendChar(r);//发送红
}

完整的

#include <STC89C5xRC.H>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned  int
sbit Send_Dat=P2^7;
uchar colors[]={64,255,0,255,0,0,0,0,255,0,0,255}; //GRB
void send0()//24Mhz 6T
{Send_Dat=1;    //250ns_nop_();          //250ns_nop_();         //250nsSend_Dat=0;     //250ns
}
void send1()//24Mhz 6T
{Send_Dat=1;     //250nsSend_Dat=0;    //250ns_nop_();       //250ns_nop_();       // 250ns
}
void sendChar(uchar v)
{uchar i=8;do{if(v&0x80){send1();}else{send0();}v<<=1;}while(--i);
}
void SendColor(uchar r,g,b)
{sendChar(g);sendChar(b);sendChar(r);
}
void Delay500ms(uint n)     //@24.000MHz
{unsigned char i, j, k,l;for(l=0;l<n;l++){_nop_();i = 8;j = 154;k = 122;do{do{while (--k);} while (--j);} while (--i);}
}
void main()
{while(1){SendColor(255,0,0);SendColor(0,255,0);Delay500ms(2);//延时1S  如果这里也有复位功能  因为只要超过50微秒  就可以了  低电平也不用有意设置因为每位都是高低电平的!SendColor(0,0,255);SendColor(255,255,0);Delay500ms(2);}
}

每一位之间的间隔没有极限测试!估计是小于50吧 所以可能小灯定义位是0。1 就是高电平来后开始计时 500ns时看下电位 是高 就是1 低就是0
一个灯 截取24位后 就把数据放行传给后面 依次传递


2为单片机输出脚 1为灯的输出脚

89C52RC控制 WS2812B相关推荐

  1. STM32F427库函数PWM+DMA控制ws2812b灯带

    STM32F427IIHx库函数PWM+DMA控制ws2812b灯带 一.参考资料 查看ws2812b用户手册可知: 二.代码部分 添加文件ws2812b.c,ws2812b.h 配置的F427IIH ...

  2. 单片机控制WS2812B实例代码

    1.  控制方式 WS2812B数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器, ...

  3. 乐鑫Esp32-S2学习之旅② ESP32-S2 控制 ws2812b 实现五彩斑斓的效果,代码开源!

    本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...

  4. 树莓派40/100 - Pico控制WS2812B,一根信号线实现多种LED灯光效果(1)

    从某多平台花了15元钱买了一米长的WS2812B彩灯,用于我的Pico编程试验,这种灯的神奇之处在于只需一根信号线,能够控制串联在一起的30颗LED灯珠(好像能长达1024颗灯),实现各种彩灯效果. ...

  5. STC89C52RC控制WS2812B LED 调色调光(一)

    前言 一直想自己做一个LED的台灯,能够实现三色调节和光暗调节,搜索了下淘宝里的可调LED灯发现要么是只能调光暗,无法做到单色的调节,要么就是可以能实现调各种颜色,但是是无线的,多出一个遥控器是什么鬼 ...

  6. 三、使用Arduino控制WS2812B灯

    1.硬件 该硬件是基于ESP32设计的板子.如下图所示. 2.原理图 2.1.WS2812B原理图 2.2.ESP32部分原理图 综上:只需要控制IO17便可控制RGB灯. 3.软件编程 3.1.添加 ...

  7. 单片机控制ws2812b

    单片机程序转: http://www.ndiy.cn/thread-36302-1-1.html 代码如下: /******************************************** ...

  8. STC89C52RC控制WS2812B LED 调色调光(二)

    前言 淘宝买的编码器到货,开始手动编码调试,踩了一些坑,不过最终还是搞定. 目标 上篇文章中是用ADC转换电位器阻值来对WS2812B来进行调光的,如果想分别调三基色的亮暗,那就得用三个电位器三个AD ...

  9. php与硬件通过wifi对接,基于ESP8266的WiFi排插接入贝壳互联实现天猫精灵控制

    认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 hzy3774 于 2020-1-8 00:45 编辑 * 实验 ...

最新文章

  1. docker探索-使用docker service管理swarm(十一 )
  2. java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
  3. 关于JDBC的一些笔记
  4. jmeter接口测试实例-关联
  5. NumPy 生成全0矩阵,全1矩阵,随机矩阵,求平均数,求方差的方法
  6. php 扒取网页数据
  7. Badboy录制测试脚本
  8. svpwm仿真_【好物推荐】《现代永磁同步电机控制原理及MATLAB仿真》
  9. Linux下部署Kafka分布式集群,安装与测试
  10. Powershell调用静态方法
  11. Win10桌面上:[ 我的电脑 ] 图标不见了
  12. Sublime Merge简单使用教程
  13. C# int与byte之间转换的方法
  14. 第6章 为用户编程:终端控制和信号
  15. 程序员的“三十而已”,你都30岁了,职业该如何规划?
  16. 海归35岁,阿里P7offer, 是否接受?
  17. Win7更换锁屏壁纸
  18. vue.nextTick()方法的使用详解(简单明了)
  19. 【产品经理三节课】第1章 产品经理的学习与成长
  20. 例子简单了解线程与进程

热门文章

  1. Android_ProGuard一览天下
  2. 前端学习之认识HTML
  3. python中raise啥意思_python raise什么意思
  4. PXE实现系统批量自动安装
  5. Python脚本自动化备份飞塔,华为,思科等设备配置文件。
  6. sw与matlab连接_solidworks模型如何导入matlab?
  7. playhome的php文件怎么导入,PlayHome导入XNALaraXPS模型教程 PlayHome工作室教程
  8. 黑镜.潘达斯奈基 高清中字
  9. 锁存器(latch)、触发器(flip-flop)、寄存器(register)的区别
  10. DRV8814PWPR