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;
}
}
假定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;,所以低亮度到高亮度瞬间完成。