为什么2秒内,由暗变亮在变暗,灯就一直亮
时间:10-02
整理:3721RD
点击:
#include <reg52.h>
#include "T0_time.h"
#include "MacroAndConst.h"
#define MaxLedPWM 99
#define MinLedPWM 0
uchar num,LedCount,LedPWM;
bit ledflag;
sbit led=P3^7;
void T0_timeinit(void) //定时200微妙中断一次
{
TMOD&=0xf0;
TMOD |= 0x01;
TH0=0xff;
TL0=0x47;
TR0=1;
ET0=1;
}
void T0_time() interrupt 1
{
TH0=0xff;
TL0=0x47;
if(++LedCount>=100) //20ms*100=2s,2s内灯由暗变亮
{
LedCount=0;
if((num<=MaxLedPWM)&&(0==ledflag)) //ledflag为标志,控制灯变亮
{
num++;
if(num>MaxLedPWM)
{
num=MaxLedPWM;
ledflag=1;
}
}
if((num>=MinLedPWM)&&(1==ledflag)) //ledflag标志控制等变暗
{
num--;
if(num<MinLedPWM)
{
num=MinLedPWM;
ledflag=0;
}
}
LedPWM=num;
} //当跳出循环的时候,根据占空比发生相应的变化
if(LedPWM>0)
{
led=0;
LedPWM--;
}
else
led=1;
}
#include "T0_time.h"
#include "MacroAndConst.h"
#define MaxLedPWM 99
#define MinLedPWM 0
uchar num,LedCount,LedPWM;
bit ledflag;
sbit led=P3^7;
void T0_timeinit(void) //定时200微妙中断一次
{
TMOD&=0xf0;
TMOD |= 0x01;
TH0=0xff;
TL0=0x47;
TR0=1;
ET0=1;
}
void T0_time() interrupt 1
{
TH0=0xff;
TL0=0x47;
if(++LedCount>=100) //20ms*100=2s,2s内灯由暗变亮
{
LedCount=0;
if((num<=MaxLedPWM)&&(0==ledflag)) //ledflag为标志,控制灯变亮
{
num++;
if(num>MaxLedPWM)
{
num=MaxLedPWM;
ledflag=1;
}
}
if((num>=MinLedPWM)&&(1==ledflag)) //ledflag标志控制等变暗
{
num--;
if(num<MinLedPWM)
{
num=MinLedPWM;
ledflag=0;
}
}
LedPWM=num;
} //当跳出循环的时候,根据占空比发生相应的变化
if(LedPWM>0)
{
led=0;
LedPWM--;
}
else
led=1;
}
PWM,是不是程序有问题呀!
程序没错误和警告啊、
我知道了,坑爹啊,uchar num(unsigned char);当num为0时继续减下去,会自动变为最大值,这个时候其他几个数LedPWM爆表了!所以。总是亮的
谢了。只有你一个答了问题十分感谢