51单片机,pwn控制灯亮

一个按键控制pwm控制一个灯亮度,让灯灭,10亮度,50亮,百分之90亮(用定时器中断写)

你好博主,参考stm32 的写法,给你提供一个思路:外部中断检测按键按下后,置位breath_enable ,在while(1)里面开关LED灯,并在开关灯之间用延时函数不断去延时pwm_value (介于0到最大值PWM_PERIOD之间),这个最大值PWM_PERIOD你可以根据延时时长及光照流明值按照比例去调节,来实现你说的“10亮度,50亮,百分之90亮”。只能说,这里用的不是所谓的定时器中断。


if(breath_enable == 1)
        {
            if(pwm_value == 0)
            {
                pwm_direct = 0;
            }
            else if(pwm_value == PWM_PERIOD) 
            {
                pwm_direct = 1;
            }
            if(pwm_direct == 0)
            {
                pwm_value++;
            }
            if(pwm_direct == 1)
            {
                pwm_value--;
            }
            
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
            delay_us(PWM_PERIOD-pwm_value);
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
            delay_us(pwm_value);
        }