单片机如何控制一个LED灯闪烁频率不断加快?

如题所述

首先定时器中断时间比如5ms,用来定时刷新数码管,他就不闪了。


其次,你另外申明一个全局变量,flash_count,每次定时中断,就是每次5ms,flash_count++,


同时你每次中断再判断flash_count==xxx时,你的led取反,同时设flash_count=0


你可以控制xxx,从1-255 改变,就可以控制闪烁的频率不断变化。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-01-11
PWM控制LED的渐亮渐灭

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar count;
uchar pwm=0; //LED亮的占空比
bit light_direction=1; //亮的方向:渐亮或渐灭
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
void init_timer()
{
EA=1;
TMOD=0x02; //方式2
TH0=0x9c; //100微秒中断一次
TL0=0x9c;
ET0=1;
TR0=1;
}
void main()
{
init_timer();
while(1)
{
delay(100); //中断1000次
if(light_direction) //全部渐亮然后渐灭
pwm++;
else
pwm--;
if(pwm>=8)
light_direction=0;
if(pwm==0)
light_direction=1;

}
}
void timer() interrupt 1
{
count++;
if(count==8) //分8次达到最亮,每次亮1/8(且持续100ms),脉冲周期为800us,分为8份
{
count=0;
if(pwm!=0)
P1=0;
}
if(count==pwm)
P1=0xff;
}
相似回答