程序如下:
//原意是让P10口的LED从暗渐变到亮,然后又从最亮渐变到暗。
//问题:这个程序,在测试时发现,当其从暗渐变到最亮时,没有问题,但是从亮变到暗时,在渐变过程中有时会闪烁一下;如果改变延时时间,他会不闪烁,但分析不出是什么原因造成的?希望高手指点一下。谢谢!
#include<reg52.h>
sbit LED = P1^0; //接有一组LED,当LED=0时,LED灭
unsigned char PWM_ON ; //高电平脉冲所占用的时间
#define T0_time 200 //定时器初值
#define TO_delay 2000 //延时
#define CYCLE 100 //PWM周期
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
bit Flag; //累加累减标志
TMOD |=0x01;
TH0=(65536-T0_time)/256;
TL0=(65536-T0_time)%256;
IE= 0x82;
TR0=1;
while(!Flag)
{
delay(TO_delay);
PWM_ON++;
if(PWM_ON == CYCLE)
{
Flag=1;
}
}
while(Flag)
{
delay(TO_delay);
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0;
}
}
}
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-T0_time)/256;
TL0=(65536-T0_time)%256;
count++;
if(!PWM_ON)
{
LED=0;
}
if (count==PWM_ON)
{
LED = 0;
}
if(count == CYCLE)
{
count=0;
LED = 1;
}
} |