收藏官网首页
查看: 19949|回复: 5

【转载】RGB灯的使用步骤与代码分享

跳转到指定楼层
楼主
发表于 2015-8-28 11:22:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
帖子链接:http://bbs.elecfans.com/jishu_500362_1_1.html
帖子作者:xintuxing


关于RGB灯的使用下面给出我个人的使用步骤和代码:第一,从原理图上可知,RGB灯共阳连接,共阳端由一个MOS管控制与5V
电源的通断。可控硅又由A0的驱动引脚间接控制,仔细查找原理图可知A0是STM32芯片的PA0引脚。三个阴极分别连接着P9813芯片的R G B(5,6,7)引脚。


第二,查询P9813的资料,它是一款全彩点光源LED驱动芯片,提供三路恒流驱动和256级灰度调制输出。采用双线制传输方式(SDA和SCL),内部结构如图:

时序及通讯协议图:

第三,认真看完了上面的三个图片,接下来就应该写程序了:
其它的就不去讲了,只说说与RGB灯有关的部分。
1、宏定义对应引脚的置位和重置操作,这样比较方便操作(PA0,PB8和PB9都要配置为输出)。
#define   SCL_0         GPIO_ResetBits(GPIOB,GPIO_Pin_8)
#define   SCL_1         GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define   SDA_0       GPIO_ResetBits(GPIOB,GPIO_Pin_9)
#define   SDA_1       GPIO_SetBits(GPIOB,GPIO_Pin_9)

2、观察P9813的时序及通讯协议图,写出程序如下:
void RGB_Write_Data(u8 R,u8 G,u8 B)//为方便记住,三个参数的顺序为R G B;
{
                u32 RGB_Data = 0;//定义一个32位的数据,各字节对应到P9813的寄存器,方便操作
                u8 i;      //循环计数
//以下为 组合数据:
                RGB_Data |= 0xC0000000;                           //将最高两位的标志位置1,。
                RGB_Data |= ((u32)((~B) & 0xc0)) << 22;  //将数据B按位取反后,再与0xC0按位与,得到B的最高两位的反码,然后强制转换成u32类型,最后装入RGB_Data的对应位。
                RGB_Data |= ((u32)((~G) & 0xc0)) << 20;//与数据B的处理相同
                RGB_Data |= ((u32)((~R) & 0xc0)) << 18;//与数据B的处理相同
                RGB_Data |= ((u32)B) << 16;//强制转换后移入对应位
                RGB_Data |= ((u32)G) << 8;//强制转换后移入对应位
                RGB_Data |= R;        //最低8位直接按位或
//以下为 数据组合好后写入P9813:
                for (i=0;i<32;i++)
                {
                        if ((RGB_Data & 0x80000000) != 0)//取得RGB数据中的最高位
                                        SDA_1;  
                        else
                                        SDA_0;
                                RGB_Data <<= 1;
                                SCL_0;
                                SCL_1;
                }

//写入32个0的起始帧,在使用过程中,给我的感觉是,上面的RGB数据是在一个缓存器中,执行下面的写0操作后,RGB的数据就移入了P9813有效寄存器中。所以就把这三十二0放在后面。
                SDA_0;
                for (i=0; i<32; i++)
                {        
                                SCL_0;
                                SCL_1;        
                }
}

试验结果:
调试过程中的RGB组合后的数据:

红色灯:


绿色灯:


蓝色灯:



仅此拿来分享,见笑了。

0

主题

5

帖子

50

积分

注册会员

Rank: 2

积分
50
沙发
发表于 2015-8-31 15:06:53 | 只看该作者
感觉挺不错的。

3

主题

25

帖子

347

积分

中级会员

Rank: 3Rank: 3

积分
347
QQ
板凳
发表于 2015-9-17 21:06:27 | 只看该作者
太棒了!我也迫不及待了!
宏博云泉
地板
 楼主| 发表于 2015-9-18 10:11:54 | 只看该作者
汤博 发表于 2015-9-17 21:06
太棒了!我也迫不及待了!

尽情玩吧~~~

1

主题

17

帖子

155

积分

注册会员

Rank: 2

积分
155
5#
发表于 2015-9-18 22:30:09 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
学习了。路漫漫修远兮

1

主题

17

帖子

155

积分

注册会员

Rank: 2

积分
155
6#
发表于 2015-9-20 02:44:21 | 只看该作者
弄懂了。。我是v2.3版的所以需要自己设置a0输出模式,5v
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表