微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > pwm控制led

pwm控制led

时间:10-02 整理:3721RD 点击:
/*-------------------------------------------------------------------
假定led的闪烁频率为100HZ,而亮度变化的范围为0~99共100等分。
则每一等分所占用的时间为 1/(100*100)=100us即在改变led的亮灭状态时,
应该是在100us整数倍时刻时。用单片机的定时器产生100us的中断,
同时每10ms调整一次led的占空比。这样在10ms*100=1S的时间内led可以从暗逐渐变亮,
在下一个1S内可以从亮逐渐变暗,然后不断循环。
---------------------------------------------------------------------*/
#include <reg52.h>
#define pwm_max 99
#define pwm_min 0
unsigned int timenum;
signed char ledpwm,ledpwm_temp;
bit leddirction;
void main(void)
{
        TMOD=0x02;
        TL0=156;
        TH0=156;
        ET0=1;
        EA=1;
        TR0=1;
        while(1);
}
void timer0(void) interrupt 1
{  
       TL0=156;
        TH0=156;
    timenum++;
        if(timenum>=200)          //每20mS调整一下led的占空比
        {
                timenum=0;
                if(leddirction==0)        //如果是渐亮方向变化,则占空比递增
                {
                        ledpwm++;
                        if(ledpwm>pwm_max)
                        {
                                ledpwm=pwm_max;
                                leddirction=1;
                        }
                }
                if(leddirction==1)        //如果是渐暗方向变化,则占空比递减
                {
                        ledpwm--;
                        if(ledpwm<pwm_min)
                        {
                                ledpwm=pwm_min;
                                leddirction=0;
                        }
                }
                ledpwm_temp=ledpwm;         //获取LED的占空比
        }
        if(ledpwm_temp>0)         //占空比大于0,则点亮led,否则熄灭led
        {
                P0=0X00;
                ledpwm_temp--;
        }
        else
        {
                P0=0XFF;
        }
}

顶一下,一直就不明白。

马马虎虎,低亮度到高亮度过度时间,不好控制,整体渐变效果不好

低亮度到高亮度瞬间完成,

是我自己移植是弄错了。由于我是用的是u16 ledpwm , ledpwm_temp;,所以低亮度到高亮度瞬间完成。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top