RGB(附源码)
1.1 看原理图
数据从输入引脚输入,依次传递到下一个RGB灯的地方,这里的输入引脚相对于主控来说是输出。
RGB灯这个模块的名称是WS2812B,我们得去了解这个模块。
1.2 WS2812
每个灯都是独立的,每个灯需要24位数据才能正常显示,数据在经过灯的时候会自动被截留24位数据。
在使用之前需要280us以上的复位时间。
1.3 RGB24位数据组成
本身比例就是R:G:B=8:8:8
1.4数据怎么发送??
发送数据0:数据线持续220ns~380ns的高电平,然后再持续580ns~1us的低电平,此时就是数据0。
发送数据1:数据线持续580ns~1us的高电平,然后再持续220ns~420ns的低电平,此时是数据1。
复位:280us以上的低电平。
话不多说,直接上代码:
2.1 RGB应用与配置
#include "rgb.h"
#include "systick.h"
/**************************************************
*函 数 名:RGB_IOInit
*函数功能:RGBIO口初始化
*返 回 值:无
*入口参数:无
*出口参数:无
*备 注:
**************************************************/
void RGB_IOInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
//初始化IO口 设为推挽输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
RGB=0; //复位
RGB_SendColor(0); //RGB1默认熄灭
RGB_SendColor(0); //RGB2默认熄灭
RGB_SendColor(0); //RGB3默认熄灭
RGB_SendColor(0); //RGB4默认熄灭
}
/****************************************
* 函 数 名:WS2812_Reset
* 函数功能:复位RGB灯的数据
* 入口参数:无
* 出口参数:无
* 备 注:拉低数据线280us以上就是复位信号
****************************************/
void WS2812_Reset(void)
{
RGB = 0;
delay_us(300); //复位,拉低280us以上
}
/**************************************************
*函 数 名:RGB_WriteByte
*函数功能:WBS2812发送一个字节,先发高位
*返 回 值:无
*入口参数:dat 颜色值
*出口参数:无
*备 注:RGB PB15 内部调用,所以使用static修饰
**************************************************/
static void RGB_WriteByte(u8 dat)
{
u8 i=0;
for(;i<8;i++)
{
if(dat&0x80)//发送1码 使高电平保持至少1us,低电平保持220ns~420ns
{
RGB = 1;
delay_us(1);
RGB = 0;
for(u8 j=0;j<11;j++) ;
}
else//发送0码 使高电平保持220ns~380ns,低电平至少保持1us
{
RGB = 1;
for(u8 j=0;j<8;j++) ;
RGB = 0;
delay_us(1);
}
dat<<=1;//左移一位继续比较
}
}
/**************************************************
*函 数 名:RGB_SendColor
*函数功能:发送一种颜色 24位数据
*返 回 值:无
*入口参数:color 颜色像素 例:0x0000FF 发送纯蓝色
*出口参数:
*备 注:先发绿色再到红色、蓝色,一次发八位,先发高位数据
**************************************************/
void RGB_SendColor(u32 color)
{
RGB_WriteByte(color>>16);//G
RGB_WriteByte(color>>8);//R
RGB_WriteByte(color); //B
}
步步晚: 你好,可以发我一下源码吗
CSDN-Ada助手: 非常感谢您分享关于LCD文字和图片取模软件的使用,这篇博客相信对读者们有很大的帮助。在此基础上,我们期待您能够继续分享更多有关嵌入式系统开发的技术,例如介绍如何使用嵌入式系统设计开发板、基于嵌入式系统的物联网应用开发等等,帮助读者们更好地掌握相关技术。期待您的下一篇博客! 2023年博客之星「城市赛道」年中评选已开启(https://activity.csdn.net/creatActivity?id=10470&utm_source=blog_comment_city ), 博主的原力值在所在城市已经名列前茅,持续创作就有机会成为所在城市的 TOP1 博主(https://bbs.csdn.net/forums/blogstar2023?typeId=3152981&utm_source=blog_comment_city),更有丰厚奖品等你来拿~。
2301_77710637: 有取模软件吗
嵌不入: 很高心能回答你的问题,本人也正在学习嵌入式,请多多指教。在我老师的教授,我所理解的嵌入式是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。应用领域范围很广阔,军工、民用、商业都会涉及,具体在工业控制、信息家电、交通管理等应用较多。
CSDN-Ada助手: 嵌入式系统有哪些特点,可应用在哪些领域?