单片机交通灯设计问题:为什么显示不对,计时器计时也不对,求高人指教

#include<reg51.h>sbitS1=P1^2;sbitS2=P1^3;sbitSHI=P1^0;//数码管个位显示位sbitGE=P1^1;//数码管十位显示... #include<reg51.h>
sbit S1=P1^2;
sbit S2=P1^3;
sbit SHI=P1^0; //数码管个位显示位
sbit GE=P1^1; //数码管十位显示位

unsigned char t=0;
unsigned char time;
unsigned char mutex=0;
unsigned char keyval;
unsigned char tab[10]={0x81,0xf9,0x92,0xb0,0xe8,0xa4,0x84,0xf1,0x80,0xa0};

void delay(void) //延时程序
{
unsigned int i;
for(i=0;i<300;i++)
;
}
void display1(void) //倒数35秒
{

GE=0;
SHI=1;
P3=tab[(35-time)%10];
delay();
GE=1;
SHI=0;
P3=tab[(35-time)/10];
delay();
}
void display2(void) //倒数5秒
{

GE=0;
SHI=1;
P3=tab[(40-time)%10];
delay();

}
void display3(void) //倒数15秒
{

GE=0;
SHI=1;
P3=tab[(55-time)%10];
delay();
GE=1;
SHI=0;
P3=tab[(55-time)/10];
delay();

}
void display4(void) //倒数5秒
{

GE=0;
SHI=1;
P3=tab[(60-time)%10];
delay();

}

void aT0()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void delay20ms(void) //延时20毫秒
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}

void key_scan(void) //键盘扫描
{
if((P1&0xf0)!=0xf0)
{
delay20ms();
if(S1==0)
keyval=1;
if(S2==0)
keyval=2;
}

}
void WW(void) //东西方向通行
{

if(time>0&&time<35)
{
P0=0x7b;
P2=0x7b;
display1();
}
else
if(time>35&&time<40)
{
P0=0xdb;
P2=0xdb;
display2();
}
else
if(time>40&&time<55)
{
P0=0xeb;
P2=0xeb;
display3();
}
else
if(time>55&&time<60)
{
P0=0xdb;
P2=0xdb;
display4();
}
}
void SN(void) //南北方向通行
{

if(time>0&&time<35)
{
P0=0xb7;
P2=0xb7;
display1();
}
else
if(time>35&&time<40)
{
P0=0xbd;
P2=0xbd;
display2();
}
else
if(time>40&&time<55)
{
P0=0xbe;
P2=0xbe;
display3();
}
else
if(time>55&&time<60)
{
P0=0xbd;
P2=0xbd;
display4();

}
}
void main()
{
aT0();
while(1)
{
if(mutex==0) //mutex=0时东西通行
{
WW();

}
if(mutex==1) //mutex=1时南北通行
{
SN();
}
}
}
void Time0(void)interrupt 1 using 1 //中断函数
{
t++;
time=time%61;

if (t==20)
{
time++;
t=0;
if(time==60)
{
mutex=!mutex;
}

}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

}
展开
 我来答
GUEL86
推荐于2016-02-19 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2676万
展开全部

#include <reg51.h>         //  供参考
#include <stdio.h>
#define uchar     unsigned char
#define uint      unsigned int

uchar h;
uint r=0;
uint s;
uchar code  dis[]={
       
 0Xc0,/*0*/
 0Xf9,/*1*/
 0Xa4,/*2*/
 0Xb0,/*3*/
 0X99,/*4*/
 0X92,/*5*/
 0X82,/*6*/
 0Xf8,/*7*/
 0X80,/*8*/
 0X90,/*9*/
 0Xff,/*NULL*/
};


void delay(uint c)
{
   uint i,j;
    for(i=0;i<c;i++)
   for(j=0;j<100;j++);
 
}

 //interrupt 1
void t0(void) interrupt 0 using 1
{
  delay(2);
   if(INT0==0)
    {
      r++;
   if(r==2)
    {
    r=0;
    }
   r%=2;
   if(r==0)
    {
     P0=0xeb;
        P1=0x00;
        P2=0xff;
    }while(1)
     {
     if(INT0==0|INT1==0|T0==0)
    {
    delay(2);
    if(INT0==0|INT1==0|T0==0)
     break;
    }

     };
   
    }

}

 //interrupt 2
void t1(void) interrupt 2 using 1
{
  delay(2);
   if(INT1==0)
    {
   r++;
   if(r==2)
    {
    r=0;
    }
   r%=2;
   if(r==0)
    {
     P0=0xdd;
        P1=0x00;
        P2=0xff;
    }while(1)
     {
     if(INT1==0|INT0==0|T0==0)
    {
     delay(2);
     if(INT1==0|INT0==0|T0==0)
     break;
    }

     };
     
    }

}

//interrupt 3
void t2(void) interrupt 1 using 1
{
  TH0=0xff;
  TL0=0xff;
    delay(2);
     if(T0==0)
       {
     P0=0xdb;
        P1=0x00;
        P2=0xff;
    }while(1)
     {
     if(INT0==0|INT1==0)
    { 
      delay(2);
   if(INT0==0|INT1==0)
     break;
    }

     };

}

 

void main(void)
{
  TMOD=0x06;
  TH0=0xff;
  TL0=0xff;
  TR0=1;
  EA=1;
  EX0=1;
  EX1=1;
  ET0=1;
 
 
 while(1)
{

    P0=0xeb;
     for(h=28;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
        P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[h/10];
         delay(1);
  P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[h%10];
   delay(1);
  P1=0x00;
        P2=0xff;
  P1=0x04;
        P2=dis[(h+2)/10];
   delay(1);
  P1=0x00;
        P2=0xff;
  P1=0x08;
        P2=dis[(h+2)%10];
         delay(1);
       }
     }

    delay(248);

    P0=0xf3;
     for(h=3;h>0;h--)
     {
        delay(392);
         P0=0xf3;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
         delay(600);
        P0=0xfb;
     }

    delay(248);
     
    P0=0xdd;
     for(h=38;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
     
  P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[(h+2)/10];
   delay(1);
  P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[(h+2)%10];
   delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x04;
        P2=dis[h/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x08;
        P2=dis[h%10];
         delay(1);
       }
    }

    delay(248); 

    P0=0xde;
    for(h=3;h>0;h--)
    {
        delay(392);
        P0=0xde;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
        delay(600);
        P0=0xdf;
       
    }

    delay(248);
     
    }
 
}

川越时空O等你
2013-01-02 · TA获得超过113个赞
知道答主
回答量:139
采纳率:0%
帮助的人:63.4万
展开全部
这个程序很简单的。要学会自己调试,在学习单片机编程的过程中提高自己解决问题的能力。不到万不得已不要轻易求助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式