这个实验是灯带上有30颗RGB灯,每颗芯片控制3颗RGB灯,要使这30颗灯全亮蓝色。

这个DIN就是输入口,它输出高电平或者低电平,然后将高低电平分配给OUTR(红),OUTG(绿),OUTB(蓝),硬件上用P0_6作为 输入口,配置的时候根据手册配置为输入。

发数据的时候首先高位先发,上面那个输出码型,就是输出高电平和低电平的占空比,

0码就是输出0,前提是输出0的时候要高电平要延时0.3us  ,低电平要延时0.9us

1码就是输出1,前提是输出1的时候要高电平延时0.9us  , 低电平要延时0.3us

下面那个Reset码也是比较重要的,当我们将24bit数据发送出去后,此时灯是不会亮的,它需要有一个大于80us的低电平过来,然后才会将刚刚发送过来的24bit数据应用到灯上。

发数据的时候如果R7~R0全为0,G7~G0全为0,B7~B0全位1,则亮蓝色,也可以显示其他的颜色,具体可以去找对应的RGB值。

上图是一个级联电路,也就是说当我传输3组数据给第一个芯片后,分配给第一个芯片的三颗灯,DOUT检测到后面还有数据,它就会把数据传输给DIN。

解题思路:定时器每0.3us进入中断,用一个标志位检测数据是否准备好,准备好了就等下一次中断进入发送数据,但是发送因为有占空比,也就是上面说的0码和1码,所以当定时器计时到了进入中断要发送数据,就给一个变量加1,加一次就是0.3us,加两次就是0.6us,加3次就是0.9us,0码就是输出0,前提是输出0的时候要高电平要延时0.3us  ,低电平要延时0.9us  ,下面有个判断time_cnt < 2就是为1次,也就是0.3us,而ime_cnt < 5,就是0.9us,按照这个逻辑进行发送。

u32 time_cnt;
u16 i=0,j=0,send_over_flag=1,temp;
uint8_t z;uint8_t rgb_data[3] = {0X00,0X00,0XFF};//0.31us
void inital_Timer3()
{TH3 = (65536-5) >> 8;  //存储高八位TL3 = (65536-5);       //存储低八位T3CON = 0x04;          //打开定时器3IE1 |=  0x04;          //打开中断
}void IRQ_TIME3(void) interrupt T3_VECTOR
{   if(send_over_flag == 0) //发送未完成标志位{if(z == 0)//要发送逻辑0{time_cnt++;  //定时器进来一次就加1,表示进来一次就是0.3us,if(time_cnt < 2){P0_6 = 1;}else if(time_cnt < 5){P0_6 = 0;if(time_cnt == 4){time_cnt = 0;send_over_flag = 1;}}}else if(z == 1)     //要发送逻辑1{time_cnt++;if(time_cnt < 4){P0_6 = 1;}else if(time_cnt < 5){P0_6 = 0;if(time_cnt == 4){time_cnt = 0;send_over_flag = 1;}}}}else         //if(send_over_flag == 1) 1发送1bit完成,可以准备下一个bit{if(j > 8)   {j = 0;i++;if(i > 3){i = 0;}}else if(j >= 0&&j <= 7)    //j是位数,一个灯有24bit,数组定义了3个十六进制,一个十六进制就是8bit{temp = rgb_data[i];    //把8位赋值给临时变量z=((temp<<j)&0x80);    //先移位,再取出高位,例如1000 0000 第一次,i=0,左移没变化,还是取出1     if(z)                  //取出如果z为真,给1{z=1;     }                      //取出为假,给0else{z=0;}j++;send_over_flag = 0;    //发送标志位表示数据准备好了,可以发送了}}
}

51单片机-RGB灯带相关推荐

  1. 驱动RGB灯带MCU阐述

    驱动RGB灯带MCU推荐 本文仅分享个人工作中积累的经验,无任何商业行为,若有更好的方案欢迎交流共同进步. 一.RGB灯带驱动IC简介 市面上存在多种RGB驱动IC,比如:WS2812,YX1903B ...

  2. 51单片机流水灯制作

    文章目录 51单片机流水灯制作 初试与复试 初试 复试 制作 分工 制作之硬件 制作之软件 总结 51单片机流水灯制作 我不得不承认自己的毅力实在是太差了,原先准备一星期写一篇博客的目标一致没有实现, ...

  3. 51单片机交通灯(定时器+38译码器+中断)

    51单片机交通灯这个实例主要用到的知识点有: >如何点亮LED >38译码器位选与段选 >定时器控制 >中断控制 #include <reg52.h>/****** ...

  4. 51单片机流水灯现象1

    **` 51单片机流水灯程序 `** 初学者小白,分享上课时写的小程序和普中科技程序,感兴趣的可以瞧瞧. 程序如有相同冒犯了. /*********************************** ...

  5. FPGA驱动RGB灯带WS2812B

    记录一下短学期做的东西 -- FPGA驱动RGB灯带WS2812B 设计目标 1.有多种模式,按键调节模式等参数: 2.模式1:红绿蓝白四色循环显示,速度.亮度可调: 3.模式2:7彩虹+白色,闪烁, ...

  6. esp32 micropython 控制ws2812 RGB灯带

    ws2812RGB灯带 ==注意:==灯带需要三个线头都接好,然后程序输出控制后才能亮,只是正负极插好不会亮的 连接走线: esp32 RGB灯带 5v引脚 母头电源处 gnd 母头gnd D12引脚 ...

  7. 51单片机超声波测距带语音播报(源程序+原理图+原理图讲解)

    本设计 51单片机超声波测距带语音播报(源程序+原理图+原理图讲解) 原理图:Altium Designer 程序编译器:keil 4 编程语言:C语言 编号S0004 功能说明: 1.本设计采用ST ...

  8. JL690X(2)驱动RGB灯带

    AC690X驱动WS2812(SM16703P)点亮RGB灯带 在使用AC690X系列蓝牙时,需要设计驱动几十个RGB灯带的程序,经一段时间学习后成功驱动,现在把实现过程分享给大家共同学习. 1.芯片 ...

  9. 基于arduino uno + WS2812b RGB灯带控制程序三

    基于arduino uno + WS2812b RGB灯带控制程序三 下面这个函数,中的NEO_GRB + NEO_RGB参数搭配不一样,显示的效果和变换的样式就有差异,自由组合测试看效果. Adaf ...

最新文章

  1. 使用datatables实现列宽设置、水平滚动条、显示某列部分内容
  2. SQL Server 2008不能修改表的解决方法
  3. redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)
  4. 工业用微型计算机笔记(2)-二进制有符号数
  5. 【java】四步法:spring boot项目部署在CentOS 8(后端篇)
  6. Oracle 10g 高级安装图文教程(二)
  7. c++ 高效解析url算法
  8. 调查了 71000 名开发者发现,JavaScript 最知名,Python 仍大势
  9. Java基础:参数是如何传递的
  10. CISCO 模拟器 Dynamips 使用说明
  11. Monty Hall Problem (三门问题)
  12. led大屏按实际尺寸设计画面_led显示屏尺寸大小要怎么算
  13. 一个3D摄像机的设计与实现
  14. 时间字符串转中国标准时间转时间戳转年月日格式
  15. 《图说区块链》读书笔记
  16. 数字滤波器设计(高通低通)
  17. 如何在渗透测试中尽可能隐藏自己-proxychains4使用配置教程
  18. java-php-python-旅游景区预约管理系统计算机毕业设计
  19. 离线数仓-01-项目介绍和用户行为数据采集
  20. Druid学习笔记(2)Druid架构剖析

热门文章

  1. AD通孔焊盘单独设置铺铜规则
  2. 贷款计算公式——java实现
  3. sqlite数据库存入的时候出现 unrecognized token: 错误
  4. Wireshark 解析PDCP-LTE
  5. BurpSuite专业版下载安装教程
  6. java dispatcher详解_Java Web开发详解:RequestDispatcher接口
  7. Arduino和C51开发LCD1602显示屏
  8. [辩论]以成败轮英雄是可取的——正方一辩稿
  9. java程序设计 试题_在清算期间支付额不确定的年金是: A.返还年金 B.变额年金 C.即期年金 D.既定年金...
  10. STM32RTC简单万年历制作