完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 qq416296378 于 2015-8-7 01:03 编辑 仔细了解了看了下电路图0.0 对RGBled进行了一下了解,之前使用的3色led是都是引脚直接引出 接在板子上的那种,当然也有自己焊的小玩具0.0呃 而在Gokit 上是使用P9813,P9813是一款全彩点光源 LED 驱动芯片 电路图如下: P9813的规格书,(PS:找到规格书但是没有太多的资料,不过也很简单0.0)
P9813规格书_普_.pdf
(335.5 KB, 下载次数: 44
)
首先看下手册里的资料 先是引脚图 引脚作用 时序图 这也就说明这个led芯片很好控制0.0 按找时序也不用做什么设置 操作就好了 下面看下代码0.0呃也没什么难度 void ClkProduce(void) { SCL_LOW; // SCL=0 LED_delay(40); SCL_HIGH; // SCL=1 LED_delay(40); } 目的是产生一个上升沿,手册规定,DIN要在CIN上升沿写入, void Send32Zero(void) { unsigned char i; SDA_LOW; // SDA=0 for (i=0; i<32; i++) ClkProduce(); } 发送32位的0 起始帧 uint8_t TakeAntiCode(uint8_t dat) { uint8_t tmp = 0; tmp=((~dat) & 0xC0)>>6; return tmp; } 这个也函数也只是取下反码,呃前两位的反码,芯片设计的时序就是 先起始位(俩1)然后 RGB各个前两位的反码然后才是RGB的灰度值 void DatSend(uint32_t dx) { uint8_t i; for (i=0; i<32; i++) { if ((dx & 0x80000000) != 0) { SDA_HIGH; // SDA=1; } else { SDA_LOW; // SDA=0; } dx <<= 1; ClkProduce(); } } 发送32位的任意数据, void DataDealWithAndSend(uint8_t r, uint8_t g, uint8_t b) { uint32_t dx = 0; dx |= (uint32_t)0x03 << 30; // The front of the two bits 1 is flag bits dx |= (uint32_t)TakeAntiCode(g) << 28; dx |= (uint32_t)TakeAntiCode(b) << 26; dx |= (uint32_t)TakeAntiCode(r) << 24; dx |= (uint32_t)g << 16; dx |= (uint32_t)b << 8; dx |= r; DatSend(dx); } 整理RGB显示色彩数据的函数,由于芯片规定由2个1作为起始位 所以发送数据的开头是连个1,然后RGB反码 然后RGB灰度,(起始位 2 + 校验位 2*3 + 灰度 8*3 =32 位) void RGB_LED_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // GPIO_SetBits(GPIOA,GPIO_Pin_0); GPIO_ResetBits(GPIOA,GPIO_Pin_0); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); LED_RGB_Control(0,0,0); Delay_ms(100); GPIO_SetBits(GPIOA,GPIO_Pin_0); } 初始化(无非就是 STM32的IO初始化) void LED_RGB_Control(uint8_t R, uint8_t G, uint8_t B) { Send32Zero(); DataDealWithAndSend(R, G, B); // display red DataDealWithAndSend(R, G, B); // display red // printf("LED_R = %d LED_G = %d LED_B = %d",R,G,B); } 显示色彩0.0,名字是对应好的 呃基本上RGB 的控制就这样0.0 |
|
相关推荐
2 个讨论
|
|
发现gokit的电路 有很多值得借鉴的地方0.0 真的很好
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
191个成员聚集在这个小组
加入小组【机智云转接板ML302-GC211试用体验】 第1章 机智云平台快速入门
8918 浏览 0 评论
3689 浏览 0 评论
【教程分享】Arduino uno R3接入机智云,快速实现物联网开发
7345 浏览 0 评论
4116 浏览 6 评论
1787 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 10:46 , Processed in 0.663981 second(s), Total 71, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号