为什么2秒内,由暗变亮在变暗,灯就一直亮

2019-07-15 23:14发布

#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;       
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
愤怒的企鹅
1楼-- · 2019-07-16 02:31
PWM,是不是程序有问题呀!
cai6018769
2楼-- · 2019-07-16 06:40
 精彩回答 2  元偷偷看……
cai6018769
3楼-- · 2019-07-16 07:49
我知道了,坑爹啊,uchar num(unsigned char);当num为0时继续减下去,会自动变为最大值,这个时候其他几个数LedPWM爆表了!!!所以。。。总是亮的
cai6018769
4楼-- · 2019-07-16 12:09
愤怒的企鹅 发表于 2013-8-6 17:59
PWM,是不是程序有问题呀!

谢了。。。只有你一个答了问题十分感谢

一周热门 更多>