51单片机定时器设计

2019-07-15 13:25发布

仿真软件上可以实现99秒的定时设置,但是我下载到自己焊接的电路上后,P1接的十位不能正常从9减到1,乱码,个位正常跳数,个位大神,这是什么原因?求解答

#include<reg52.h>  
#define uchar unsigned char
#define uint unsigned int
int choose=0;           //模式选择
uchar bian;    //设置时间
sbit k1=P3^7;
sbit k2=P3^6;
sbit input=P3^2;
sbit output=P3^4;
unsigned code table[10]={0xC0, 0xF9, 0xA4,  0xB0,0x99, 0x92, 0x82,0xF8, 0x80,  0x90};//0到9

uchar n,m;
int count=99;
bit flag=1;
int i;
void delayms(uint a)  //延时程序  
{
     uint x,y;     
     for( x=a;x>0;x--)   
     for(y=113;y>0;y--);     
}
void display()
{
   P1=table[count%10];
   P2=table[count/10];
}
void display1()
{
  if(flag==1)
    {
   P1=table[count%10];
   P2=table[count/10];
    }
   else
    {
    P1=0XFF;P2=0XFF;       
    }
}


void main()
{  
  TMOD=0x11;   
  TH1=(65536-50000)/256;//装入初值   
  TL1=(65536-50000)%256;
  EA=1;
  ET1=1;
  TR1=1;  


  ET0=1;
  TH0=(65536-50000)/256;//装入初值   
  TL0=(65536-50000)%256;
  TR0=1;         
  while(1)
  {          
//     if(count>0){output=~input;}
//      if(count==0){TR1=0;n=0;TR0=0;m=0;output=1;}
//          delayms(10);
      if(k1==0)
           {
            delayms(10);
                if(k1==0)
                 {choose++;
                  if(choose>3)
                   {choose=0;
                   }
                 }
                while(k1==0);
                }
           switch(choose)
            {
                 case 0:TR1=0;n=0;TR0=0;count=99;display();
                 case 1:TR1=0;n=0;TR0=1;
                        if(k2==0){delayms(10);if(k2==0){count--;if(count<0){count=99;} display1();}while(k2==0);}
                                break;         
                 case 2:TR1=0;n=0;TR0=1;
                        if(k2==0){delayms(10);if(k2==0){count=count-10;if((count%10)<0){count=count+90;} display1();}while(k2==0);}
                                break;       
                 case 3:TR1=1;TR0=0;display();
                        break;
                 default: break;
                }
         if(0<choose<3){display1();}
         if(choose==3){display();}
        if(choose==0){display();}
        }
}

void T1_time() interrupt 3  
{
TH1=(65536-50000)/256;   
TL1=(65536-50000)%256;   
n++;
if(n==20)        
  {
   n=0;      
   count--;      

  }

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;   
TL0=(65536-50000)%256;
m++;
if(m==10)        
  {
   m=0;      
  flag=~flag;
  }   
}       



补充内容 (2016-7-21 14:31):
问题解决了,是电路短接了。不过由于没有限流电阻会发热厉害
PR59LT9EV2JS3I2W[EEI@BS.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
哭泣的眼泪
1楼-- · 2019-07-15 16:57
你还是先检查下你的电路本身吧,,,既然仿真没有问题的话 基本上也不会有太大问题 最佳答案
756594158
2楼-- · 2019-07-15 22:05
 精彩回答 2  元偷偷看……
xgywd
3楼-- · 2019-07-16 02:43
你确定两个数码管是一样的型号吗,不会有一个共阳管吧.
xgywd
4楼-- · 2019-07-16 05:14
最大的可能...你接反了
houjue
5楼-- · 2019-07-16 05:35
初步认为是你把P1口的线接错所致,你再仔细检查一下吧。
tqykzk
6楼-- · 2019-07-16 10:40
xgywd 发表于 2016-7-20 05:48
你确定两个数码管是一样的型号吗,不会有一个共阳管吧.

是电路短接了

一周热门 更多>