微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 看看这个单片机程序

看看这个单片机程序

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

以下这个程序是来控制LED灯亮一个时间,灭是一个时间。怎么亮了一次就一直灭的状态?本来是控制LED灯P2口控制亮10S
灭5S一直这样循环下去。请高手指点啊  或者直接写个样板给我看看!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void ds();
uchar T=0;
void ds()
{
        TMOD = 0x01;
        TH0  = 0x3c;
        TL0  = 0xb0;
        TR0  = 1;
        ET0         = 1;
        EA          = 1;        
}
void main()
{        
        ds();
        
        while(1);
}
void timer0() interrupt 1
{
        TH0  = 0x3c;          //50MS
        TL0  = 0xb0;
         
        T++;
        if(T>=200)  //10S
        {        
                P2=1;
                T=0;
                T++;
        
        
        if(T>=60)
                {        P2=0;
                        
                        T=0;
                     
                }
        }
}

很明显,T从0开始加,加到60后,你就把T给清零了,这样T永远也到不了200,所以P2一直等于0,至于亮了一次,估计就是初始化的时候p2=1了吧,以后就一直等于0了。

   T=0;
   T++; 后面可能会大于2么?
        

你的程序混乱不堪

你光说一句混乱有什么用?如果这程序可以,我用的着来问么?你还不如别回答。

首先T自加到200后清0,在自加到60 在清0,之后返回开始T=0那   
大哥这样是不是错了  你是否可以帮修改一下?

T>=60后就不会在返回原来的基础上吗?

我刚学习,什么都不会,希望大家可以多指教多鼓励,谢谢!

那个while 有问题

虚心请教   多多加油

   if(T>=200)  //10S
        {        
                P2=1;
                T=0;
                T++;
        
        
        if(T>=60)
                {        P2=0;
                        
                        T=0;
                     
                }
        }问题就在这呢

if(T>=60)
                {        P2=0;
                        
                        T=0;
                     
                }这句进不去,前面将T清0了

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void ds();
uchar T=0;
uchar m=0;
void ds()
{
        TMOD = 0x01;
        TH0  = 0x3c;
        TL0  = 0xb0;
        TR0  = 1;
        ET0         = 1;
        EA          = 1;        
}
void main()
{        
        ds();
        
        while(1);
}
void timer0() interrupt 1
{
        TH0  = 0x3c;          //50MS
        TL0  = 0xb0;
        if(m==0)  
        {T++;
                 P2=1;
        if(T>=200)  //10S      
            {
                          T=0;
                          m=1;
                          }
                 }
          else
                {
                 T++;
                 P2=0;
                  if(T>=100)  //10S      
            {
                          T=0;
                          m=0;
                           }
                }
}

这个帖子是我以前写的,你写的这个OK。谢谢你!

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

网站地图

Top