当前位置:网站首页>【STC15控制WS2812 RGB彩灯级联】
【STC15控制WS2812 RGB彩灯级联】
2022-07-20 21:33:00 【@slow_walker】
STC15控制WS2812 RGB彩灯级联
下面是基于STC15F2K60S2的WS2812RGB彩灯级联测试。
一、WS2812介绍
引脚
工作时序
注意
当我们使用WS2812控制RGB彩灯的时候,每一个彩灯需要发送24bit数据RGB各8BIt控制,如果我们要控制两个则需要连续发送48bit数据,同理当我们要控制N个彩灯的时候,需要发送N*24bit数据。
二、WS2812级联接线
下面是我使用两个WS2812进行级联,WS2812在使用过程中只需要一根控制线就可以了,OUT连接下一块的IN,接多块WS2812同样如此进行连接
三、实验测试
RGB颜色表
代码中的颜色是根据上述的RGB颜色表来写的
1.ws2812.c
#include "ws2812.h"
#include "delay.h"
#include <intrins.h>
#include <STC15F2K60S2.H>
#define LED_COUNT 8 //控制彩灯的个数
sbit IN = P3^2; //WS2812输入引脚控制
//WS2812发送的顺序是GRB,ledcount表示LED的个数,color表示LED的种类
void RGB_LED_Controal(unsigned char led_count,unsigned char color)
{
unsigned char i = 0;
for(i=0;i<led_count;i++) //控制灯的个数
{
switch(color)
{
//RGB颜色可以网上查看RGB颜色表
case 1:Send_24bit(0xc9,0x00,0x57);break; //翠绿色
case 2:Send_24bit(0x20,0xa0,0xF0);break; //紫色
case 3:Send_24bit(0x70,0xda,0xd6);break; //淡紫色
case 4:Send_24bit(0x59,0x3d,0xab);break; //钴色
case 5:Send_24bit(0x80,0xfa,0x72);break; //橙红色
case 6:Send_24bit(0x8a,0x80,0x87);break; //冷灰
case 7:Send_24bit(0x80,0x80,0x69);break; //暖灰色
case 8:Send_24bit(0xf0,0xfa,0xe6);break; //亚麻色
case 9:Send_24bit(0x00,0xff,0x00);break; //红色
case 10:Send_24bit(0x30,0xb0,0x60);break; //栗色
case 11:Send_24bit(0xfc,0x7c,0x00);break; //草地绿
case 12:Send_24bit(0xff,0x00,0xff);break; //青色
case 13:Send_24bit(0x2e,0x08,0x54);break; //靛青
case 14:Send_24bit(0x8f,0xbc,0xbf);break; //玫瑰红
case 15:Send_24bit(0x19,0x19,0x70);break; //孔雀蓝
case 16:Send_24bit(0xc7,0x00,0x8c);break; //土耳其玉色
case 17:Send_24bit(0xe6,0xf0,0x8c);break; //黄褐色
case 18:Send_24bit(0xff,0x00,0x7f);break; //嫩绿色
default:Send_24bit(0x00,0x00,0x00);break;
}
}
}
//数据复位 低电平持续300us以上
void ResetData(void)
{
unsigned char i = 0;
IN = 0;
for(i = 0;i<6;i++)
{
Delay50us();
}
}
void Send_Byte(unsigned char temp)
{
unsigned char i = 0;
for(i = 0;i<8;i++)
{
if(temp & 0x80) //从高位开始发送
{
//发送“1”码
IN = 1;
//高电平 持续760ns-1.6us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
IN = 0;
//低电平 持续时间220ns-420ns
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}else{
//发送"0"码
IN = 1;
//高电平持续时间 220ns-420ns
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
IN = 0;
//低电平持续时间 750ns-1.6us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
temp = (temp << 1); //次高位
}
// Delay10us();
}
//发送一帧数据RGB 各八位
void Send_24bit(unsigned char dat1,unsigned char dat2,unsigned char dat3)
{
Send_Byte(dat1);
Send_Byte(dat2);
Send_Byte(dat3);
}
//-------------------------------------------------------------------------------
2.ws2812.h
#ifndef _WS2812_H_
#define _WS2812_H_
void ResetData(void);
void SendPix(unsigned char *str);
void SendOneFrame(unsigned char *ptr);
void Send_Byte(unsigned char temp);
void Send_24bit(unsigned char dat1,unsigned char dat2,unsigned char dat3);
void RGB_LED_Controal(unsigned char led_count,unsigned char color);
#endif
3.main.c
#include <STC15F2K60S2.H>
#include "delay.h"
#include "ws2812.h"
void main(void)
{
unsigned char i = 0,j =0;
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P1 = 0xFF;
P3 = 0xFF;
P5 = 0xFF;
while(1)
{
for(i = 0;i<8;i++) //外层控制LED的个数
{
for(j = 0;j<6;j++) //内层控制LED的颜色种类
{
RGB_LED_Controal(i,j);
ResetData();
Delay500ms();
}
}
}
}
实验效果
下图的结果是全部一起控制的现象,大家可以根据自己的展示需求进行不同的操作。
边栏推荐
猜你喜欢
Web application vulnerability -x-forwarded-for injection
Wechat vaccine appointment applet graduation design of applet completion work (8) graduation design thesis template
Programming - common sense CS
Amazon cloud technology training and Certification Course in August is wonderful and can't be missed!
【7月考试战报】ORACLE OCP 19C考试通过
原码、补码以及定点数运算
信号完整性(SI)电源完整性(PI)学习笔记(三十)电源分配网路(二)
Common web security problems in interview
(open shortest path first, OSPF) comprehensive experiment
深度解析:链动2+1模式是如何玩转招商引流的
随机推荐
PHP人才招聘網站源碼
[JS] tab switching
虚拟环境中的动态特性和交互
A solution to std:: string cannot cross DLLs
漏洞扫码--需要整改的
多语言商城系统哪个好 三大知名跨境电商厂商对比
小程序毕设作品之微信疫苗预约小程序毕业设计(4)开题报告
Algorithm summary] 20 questions to complete bat interview - binary tree
Great Wall Securities mobile software online stock trading account securities company commission is low? Is it safe to open an account?
[报错]RuntimeError: expected scalar type Double but found Float(torch)
利用 vtk 的控件画圆和矩形
超级App是什么?小程序有4个特性,你知道吗?
ESP32-CAM——内网穿透教程
LabVIEW实时监测和绘制单晶光伏板电压电流和能耗趋势
2022/07/20 学习笔记 (day12)String字符串
经典赛题-Web渗透测试记录
Wechat vaccine appointment applet graduation project of applet completion work (6) opening defense ppt
Word report reference format
模仿vtk的Widget控件,制作画矩形的控件
墨家巡逻兵 源码