单片机使用定时器产生呼吸灯

呼吸灯顾名思义和人的呼吸一样,有吸气和呼气2个过程,在LED小灯上就会展示出来一个从亮到暗和一个从暗到亮的过程。

单片机可以通过使用具有PWM波引脚功能,通过改变每一次周期的占空比来完成呼吸灯的功能,但这种方法太占用单片机的资源了,因此可以使用定时器来实现呼吸灯的功能。

void TIM3_IRQHandler(void)   //TIM3中断        0.2ms一次中断
{
    static uint8_t PWM_time = 0;
    static uint8_t PWM_value = 0;
    static uint8_t Direct_flag = 0;        
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);          //清除TIMx的中断待处理位:TIM 中断源         
    PWM_time++;                                        //改变的占空比一次的标志                                     
    if(PWM_time == PWM_value)                          //判断是否到了点亮LED的时候    
    LED1 = 1;                                                 //关灯    
    
    if((PWM_time == 50) && (Direct_flag == 0))      //当前周期结束 50*0.2ms  10ms一个周期
    {    
        LED1 = 0;                                               //打开LED小灯
        PWM_time = 0;                                  //重新计时,去改变占空比
        PWM_value++;
        if(PWM_value == 50)                                //占空比更改方向
        Direct_flag = 1; 
    }    
    if((PWM_time == 50) && (Direct_flag == 1))      //当前周期结束 50*0.2ms  10ms一个周期
    {    
        LED1 = 0;                                        //打开LED小灯
        PWM_time = 0;                                  //重新计时,去改变占空比
        PWM_value--;
        if(PWM_value == 0)                              //占空比更改方向
        {
            LED1 = 1;  
            Direct_flag = 0; 
        }
    }    
}

通过使用单片机的定时器功能,产生一个0.2ms触发一次的中断,当加计数到50表示一个周期结束了,一个周期时长10MS,一个周期结束后改变一次占空比。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值