前言
公司要在旧产品上加一个RGB灯,得搞出七彩呼吸灯效果.作为刚毕业的小菜鸡知道怎么用PWM驱动实现,但是产品的PWM用完力,没办法只好手敲啦,还是想了一会才想明白怎么搞.
分析
公司要的效果是一秒钟渐变强,然后一秒钟渐变弱.如果是PWM去搞这个事情,占空比为100分的话,我每10ms占空比增加1,这样就可以达到一秒钟渐变强或一秒钟渐变弱的效果,按照这个思想,我们主要实现软件PWM即可.PS:PWM的频率过低会导致闪动效果,用1kHz去驱动是没有问题的,更低的我没有试过.
实现
P00口为灯口,配置是推挽输出,高亮,低灭
uint8 Count; //频率
uint8 duty; //占空比
bit Add_Sign; //翻转标志位
void IO_Pwm() //放入main死循环中
{
Count++;
if(Count>=100)Count=0;
if(duty<Count){
P00=1;
}
else {
P00=0;;
}
}
/*
控制渐变周期,如果10ms进入一次,那么一次渐变强或渐变弱
的时间是10ms*100=1000ms,这个项目有一个计时器是用来轮
询计时的因此可以很简单的让它每10ms执行一次,或者更改时
间
*/
void BreathLed()
{
if(Add_Sign){
duty++;
if(duty==100){
Add_Sign=0;
}
}else {
duty--;
if(duty==0){
Add_Sign=1;
}
}
// Set_Duty(duty);
}
void main()
{
while(1){
IO_Pwm();
}
}
总结
刚开始的时候,被1s渐变强或弱搞晕了,方向错了,没办法试了一下硬件PWM驱动的效果,然后灵光一闪从硬件PWM找到了灵感.网上的例子用延时去做的比较多,但是这个项目不能延时这么长的时间,所以就自己搞了一个.