P8913驱动RGB彩灯(stm32F1为例).docxVIP

  • 133
  • 0
  • 约1.8千字
  • 约 4页
  • 2019-03-11 发布于广东
  • 举报
P9813驱动RGB灯珠 P9813简介及特点: P8913常见接线图 因为所有的颜色都是由三原色组合而成,这个RGB彩灯就是让我们给它红绿蓝三种不同比例就可以显示出各种颜色。R:red (红色) G:green(绿色)B:blude(蓝色)。驱动芯片负责把三种颜色的颜色系数给到灯珠,灯珠就会显示彩色。三原色国际色卡自行百度。 驱动时序图及工作参数 前32 位“0”为起始帧,在Cin 上升沿时打入,并且时序DIN要先于CIN; ② 标志位为两个“1”; ③ 校验数据“B7’”与“B6’”为蓝色灰度数据的“B7”与“B6”的反码; ④ 灰度级数据要高位先入,并且是蓝绿红顺序。 由此可得,MCU需要发送的数据 32位0起始信号: 0000 0000 0000 0000 0000 0000 0000 0000 第一点32位灰度数据: 11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx 第二点32位灰度数据: 11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx (红色码 绿色码 蓝色码) 可见需要延时操作,单片机执行汇编代码需要时间,所以延时不用太久1us就行。 此外,单片机要发送的数据为 驱动思路 发送一位数据: DIN=0/1 //数据线准备数据 CIN=0 延时 CIN=1 延时 //时钟线拉高后变低,数据传输到芯片内 发送32位数据 发送32位数据 For(i=0;i32;i++) { 发送一位数据: } 实战代码 整合3个三原色数据到一个变量。 u32 Color_Data(unsigned int r,unsigned int g,unsigned int b) //写入三个八位的值,返回一个32位的数值 { u32 temp=0; temp |=0x0330; //0xc0-- 1100 0000 1010 1010 temp |= ((~b)0xc0)22; //取蓝色最高两位取反,得到B7’ B6’ temp |= ((~g)0xc0) 20; //取绿色最高两位取反,得到G7’G6’ temp |= ((~r)0xc0) 18; //取绿色最高两位取反,得到R7’R6’ temp |= b16; temp |= g8; temp |= r0; return temp; } MCU发送数据到芯片 void RGB_Send_Data(u32 data) { unsigned int i; for(i=0;i32;i++) { //取data的最高位,如果是1就写1(注意按位操作是写16进制) if(data0//准备一位数据 { RGB_DATA_H; } else { RGB_DATA_L; //否则写0 } data=1;//每取出一个数据,让次高位变成最高位,遍历整个32位的data值 RGB_CLK_L; Delay_us(1); RGB_CLK_H; Delay_us(1); /*以上四步操作令CLK产生上升沿*/ } } 最终的控制函数 void RGB_Color_Control(unsigned int r,unsigned int g,unsigned int b) { u32 color_data; color_data= Color_Data(r,g,b) ; RGB_Send_Data(0);//先发送32位低电平起始信号 RGB_Send_Data(color_data); //发送第一个32位灰度数据 RGB_Send_Data(color_data); //发送第二个32位灰度数据 } IO口初始化略(推挽输出)

文档评论(0)

1亿VIP精品文档

相关文档