微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机利用PWM原理控制灯的渐变的问题

单片机利用PWM原理控制灯的渐变的问题

时间:10-02 整理:3721RD 点击:

在学习单片机的时候发现了一个很好的帖子(http://bbs.elecfans.com/jishu_184829_1_1.html),在此感谢作者!里面有教怎么利用PWM原理控制灯的渐变,我照着写了一遍。发现了一个很奇怪的问题。代码如下://这是定时器的c文件,main.c里就是死循环而已了。
#include<reg51.h>
#include"MyDefine.h"
#define LED P1
#define LED_ON() LED=0X00;
#define LED_OFF() LED=0Xff;
static uint8 Count=0;//计数是否达到了20MS
static uint8 Direction=0;//亮还是灭的方向
static int8 PWM=0;//
//static int8 tempPWM=0;位置1
void Timer0Init(void)
{         
       TMOD&=0xf0;         
       TMOD|=0x01;      
       TH0=0XFF;//200us的中断         
    TL0=0X37;
         TR0=1;
         ET0=1;
}
void Timer0Isr(void)interrupt 1
{
         static int8 tempPWM=0;//位置2
         TH0=0XFF;
         TL0=0X37;
          if(++Count>=100)
         {
                  Count=0;
                  if(PWM<=99&&Direction==0)
                  {
                           ++PWM;
                              if((PWM)>99)
                           {
                                    Direction=1;
                                    PWM=99;
                           }
                  }
                  if(PWM>=0&&Direction==1)
                  {
                           --PWM;
                           if((PWM)<0)
                           {
                                    Direction=0;
                                    PWM=0;
                           }
                  }
                  tempPWM=PWM;
             }
         if(tempPWM>0)
         {
                  LED_ON();
                  tempPWM--;
         }
         else
         {
                  LED_OFF();
        }
         
}
我觉得应该把 static int8 tempPWM=0;放在位置1啊,因为我觉得这样才能算是PWM。不然每次到了200us的中断的时候如果不是到100次(也就是20MS)那么灯就一直是灭的(LED_OFF())。也就是说在这100次里有99次都是灭着的,而只有1次灯亮着。tempPWM--这句话就没有意义了啊。不知道看明白了没有(可以看看原帖,很好)。不过,我对调了位置以后,不管是彷真或者实际操作,放在两个位置出来的结果都没有区别。纳尼?请高手为我解答。谢谢了

                                               

之前没弄好程序,不好看,现在弄好了,大家帮忙看看啊。唉,这个论坛的修改真难用啊

请问你说的时哪条语句

不好意思,最重要的没说。static int8 tempPWM=0这条,谢谢了

自己顶啊自己顶。

还是没有人回复吗

我知道原因了。因为static变量只是在第一次调用的时候初始化,以后都不会了。

嗯。,。

  写地不好,请见谅

上一篇:流水灯拖尾循环
下一篇:空操作问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top