完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 xintuxing 于 2015-7-20 20:56 编辑
关于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组合后的数据: 红色灯: 绿色灯: 蓝色灯: 仅此拿来分享,见笑了。 |
|
相关推荐
5 个讨论
|
|
只有小组成员才能发言,加入小组>>
188个成员聚集在这个小组
加入小组【机智云转接板ML302-GC211试用体验】 第1章 机智云平台快速入门
8656 浏览 0 评论
3502 浏览 0 评论
【教程分享】Arduino uno R3接入机智云,快速实现物联网开发
7185 浏览 0 评论
3776 浏览 6 评论
1635 浏览 0 评论
9591浏览 1评论
6678浏览 1评论
【IoT毕业设计】STM32开发板+机智云IoT+实现智能鸽笼控制
9506浏览 0评论
8403浏览 0评论
11381浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 14:09 , Processed in 0.513849 second(s), Total 70, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号