5050RGB_6脚 实现跑马灯+呼吸灯功能

概述

拿到一个项目,项目中有一个LED模式要求是5个灯各显示一种颜色,然后随着时间灯的颜色相互变化(呼吸灯),5个灯互相的颜色呈现跑马灯的效果。

例:LED1现在亮绿色,下个时段LDE2亮绿色。总共有5种颜色,5个灯之间转圈圈.

对公司给的样品三极管G极进行读取波形,发现他想法很奇特,即节省资源,又简单,而且显示的效果很好,下面是我依照波形进行编写的.

6脚RGB电路图

LED是共阴的。通过三极管决定LED闪烁的颜色.

时序图

这是我通过AD画线画的,有点简陋,请见谅。。

每个LED显示的时间是2.5个ms,周期是7,5个ms。使之看起来常亮.

红绿蓝三种颜色,每个颜色分别显示2.5个ms,与单个LED显示时间一样。

LED的周期最好和颜色的周期匹配上,这样相当于可以占空比0-100调节;

LED灯输出周期是稳定的,通过改变颜色的周期,使之产生修改占空比的效果

周期可以根据需求自己调节,我由于受限于单片机性能,定时器只能调到500us,再往下误差较大,并且500us可以满足产品需求.

 

控制程序

        由于要求不高我就放在定时器中断中,主要就一个LED灯与雾化器的驱动

void isr(void) __interrupt(0)
{if(INTFbits.T0IF) //87 500US{PWM_RGB++;if(PWM_RGB < 5)//2,5MS{Output_LED1 = 0;Output_LED2 = 0;Output_LED3 = 1;}else if(PWM_RGB < 7)//3.5MS{Output_LED1 = 0;Output_LED2 = 1;Output_LED5 = 0;}else if(PWM_RGB < 10)//5MS{Output_LED1 = 1;Output_LED4 = 0;Output_LED5 = 0;}else if(PWM_RGB < 12)//5MS{Output_LED3 = 0;Output_LED4 = 0;Output_LED5 = 1;}else if(PWM_RGB < 15)//7.5,S{Output_LED2 = 0;Output_LED3 = 0;Output_LED4 = 1;}else {PWM_RGB = 0;Output_LED1 = 0;Output_LED2 = 0;Output_LED3 = 1;}if(Flash_Time < 5)//2.5MS{Output_LED_R = 0;Output_LED_G = 1;}else if(Flash_Time < 10)//5MS{Output_LED_R = 1;Output_LED_B = 0;}else if(Flash_Time < 15)//7.5MS{Output_LED_B = 1;Output_LED_G = 0;}	else if(PWM_RGB_Cycle < 8)    //执行完8次PWM, PWM占空比增加或减小7%{Flash_Time   = 0;Output_LED_R = 0;Output_LED_G = 1;PWM_RGB_Cycle++;}else  {Output_LED_B  = 1;Output_LED_G  = 0;PWM_RGB_Cycle = 0;}TMR0 = 0X90;INTFbits.T0IF = 0;		// Clear T0IF flag bit		}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部