89C52RC控制 WS2812B
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/550ns12=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相关推荐
- STM32F427库函数PWM+DMA控制ws2812b灯带
STM32F427IIHx库函数PWM+DMA控制ws2812b灯带 一.参考资料 查看ws2812b用户手册可知: 二.代码部分 添加文件ws2812b.c,ws2812b.h 配置的F427IIH ...
- 单片机控制WS2812B实例代码
1. 控制方式 WS2812B数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器, ...
- 乐鑫Esp32-S2学习之旅② ESP32-S2 控制 ws2812b 实现五彩斑斓的效果,代码开源!
本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...
- 树莓派40/100 - Pico控制WS2812B,一根信号线实现多种LED灯光效果(1)
从某多平台花了15元钱买了一米长的WS2812B彩灯,用于我的Pico编程试验,这种灯的神奇之处在于只需一根信号线,能够控制串联在一起的30颗LED灯珠(好像能长达1024颗灯),实现各种彩灯效果. ...
- STC89C52RC控制WS2812B LED 调色调光(一)
前言 一直想自己做一个LED的台灯,能够实现三色调节和光暗调节,搜索了下淘宝里的可调LED灯发现要么是只能调光暗,无法做到单色的调节,要么就是可以能实现调各种颜色,但是是无线的,多出一个遥控器是什么鬼 ...
- 三、使用Arduino控制WS2812B灯
1.硬件 该硬件是基于ESP32设计的板子.如下图所示. 2.原理图 2.1.WS2812B原理图 2.2.ESP32部分原理图 综上:只需要控制IO17便可控制RGB灯. 3.软件编程 3.1.添加 ...
- 单片机控制ws2812b
单片机程序转: http://www.ndiy.cn/thread-36302-1-1.html 代码如下: /******************************************** ...
- STC89C52RC控制WS2812B LED 调色调光(二)
前言 淘宝买的编码器到货,开始手动编码调试,踩了一些坑,不过最终还是搞定. 目标 上篇文章中是用ADC转换电位器阻值来对WS2812B来进行调光的,如果想分别调三基色的亮暗,那就得用三个电位器三个AD ...
- php与硬件通过wifi对接,基于ESP8266的WiFi排插接入贝壳互联实现天猫精灵控制
认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 hzy3774 于 2020-1-8 00:45 编辑 * 实验 ...
最新文章
- docker探索-使用docker service管理swarm(十一 )
- java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
- 关于JDBC的一些笔记
- jmeter接口测试实例-关联
- NumPy 生成全0矩阵,全1矩阵,随机矩阵,求平均数,求方差的方法
- php 扒取网页数据
- Badboy录制测试脚本
- svpwm仿真_【好物推荐】《现代永磁同步电机控制原理及MATLAB仿真》
- Linux下部署Kafka分布式集群,安装与测试
- Powershell调用静态方法
- Win10桌面上:[ 我的电脑 ] 图标不见了
- Sublime Merge简单使用教程
- C# int与byte之间转换的方法
- 第6章 为用户编程:终端控制和信号
- 程序员的“三十而已”,你都30岁了,职业该如何规划?
- 海归35岁,阿里P7offer, 是否接受?
- Win7更换锁屏壁纸
- vue.nextTick()方法的使用详解(简单明了)
- 【产品经理三节课】第1章 产品经理的学习与成长
- 例子简单了解线程与进程
热门文章
- Android_ProGuard一览天下
- 前端学习之认识HTML
- python中raise啥意思_python raise什么意思
- PXE实现系统批量自动安装
- Python脚本自动化备份飞塔,华为,思科等设备配置文件。
- sw与matlab连接_solidworks模型如何导入matlab?
- playhome的php文件怎么导入,PlayHome导入XNALaraXPS模型教程 PlayHome工作室教程
- 黑镜.潘达斯奈基 高清中字
- 锁存器(latch)、触发器(flip-flop)、寄存器(register)的区别
- DRV8814PWPR