沁恒ch548L单片机利用pwm波和pwm波中断实现呼吸灯效果

mian函数中pwm的初始化

void pwm5Init(void)
{                                                  
   SetPWMClkDiv(24000); //这个分频很重要,分频太小了会出现led一直亮的现象                                                       
   SetPWMCycle256Clk();   //PWM���� FREQ_SYS/4/256                                                    
   SetPWM5Dat(0);//p23  23.58khz  -80.5%  ����Ч  ���۵͵�ƽռ�ձ� 20/256=7%	
   PWM_SEL_CHANNEL(0x20, Enable);
}

void main( )
{
    CfgFsys( );                                                           
    mDelaymS(20);
	
	pwm5Init();//pwm波初始化
	PWMInterruptEnable();//开pwm波中断,在中断里面修改占空比
	while(1){			
	
	}
}

pwm中断配置

void PWMInterrupt( void ) interrupt INT_NO_PWMX using 1                       //PWM0~8中断服务程序,使用寄存器组1
{
    static UINT8 duty = 0;
		static UINT8 dutyUp = 0;
		static UINT8 dutyDown = 0;
    PWM_CTRL |= bPWM_IF_END;                                                  //清除PWM中断

    /* 重新配置占空比 */
	if(0 == duty){
			dutyUp = 1;
			dutyDown = 0;
	}
	if(255 == duty){
			dutyDown = 1;
			dutyUp = 0;
	}	
	
/*为什么要这样做:目的是防止呼吸灯出现从最亮到熄灭会出现跳变的现象,整体的呼吸效果是0-255-0*/
	if(1 == dutyUp){//占空比从0-255变化
		SetPWM5Dat(duty);
    duty += 1;
	}
	
	if(1 == dutyDown){//占空比从255-0变化
		SetPWM5Dat(duty);
    duty -= 1;
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值