(非延时)51单片机软件模拟LED呼吸灯效果

前言

        公司要在旧产品上加一个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找到了灵感.网上的例子用延时去做的比较多,但是这个项目不能延时这么长的时间,所以就自己搞了一个.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值