机智云功能板提供了一种基于I2C接口的RGB_LED控制方式,其使用的芯片为P9813,对应的电路原理图如下。
该电路的特点是无需PWM即可实现亮度调节,所用的函数为: - void RGB_Write_Data(uint8_t R,uint8_t G,uint8_t B)
- {
- uint32_t RGB_Data = 0;
- uint8_t i;
- RGB_Data |= 0xC0000000;
- RGB_Data |= ((uint32_t)((~B) & 0xc0)) << 22;
- RGB_Data |= ((uint32_t)((~G) & 0xc0)) << 20;
- RGB_Data |= ((uint32_t)((~R) & 0xc0)) << 18;
- RGB_Data |= ((uint32_t)B) << 16;
- RGB_Data |= ((uint32_t)G) << 8;
- RGB_Data |= R;
- for (i=0;i<32;i++)
- {
- if((RGB_Data & 0x80000000) != 0)
- {
- SDA_H;
- }
- else
- {
- SDA_L;
- }
- RGB_Data <<= 1;
- SCL_L;
- SCL_H;
- }
- SDA_L;
- for (i=0;i<32;i++)
- {
- SCL_L;
- SCL_H;
- }
- }
复制代码
使用RGB_LED实现3色呼吸灯效果的程序为: - A0_H; // 打开显示
- RGB_Write_Data(0x00,0x00,0x00);
- for (i=0;i<125;i++)
- {
- RGB_Write_Data(i,0x00,0x00);// 红色由暗变亮
- delay_ms(20);
- }
- for (i=125;i>0;i--)
- {
- RGB_Write_Data(i,0x00,0x00); // 红色由亮变暗
- delay_ms(20);
- }
- for (i=0;i<125;i++)
- {
- RGB_Write_Data(0x00,i,0x00); // 绿色由暗变亮
- delay_ms(20);
- }
- for (i=125;i>0;i--)
- {
- RGB_Write_Data(0x00,i,0x00); // 绿色由亮变暗
- delay_ms(20);
- }
- for (i=0;i<125;i++)
- {
- RGB_Write_Data(0x00,0x00,i); // 蓝色由暗变亮
- delay_ms(20);
- }
- for (i=125;i>0;i--)
- {
- RGB_Write_Data(0x00,0x00,i); // 蓝色由亮变暗
- delay_ms(20);
- }
- A0_L; // 关闭显示
复制代码
色彩调节效果
|