秒表,可以重置和暂停,但是但是但是显示有点奇怪

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint aa,t,bai,shi,ge;
sbit w=P2^7;
sbit d=P2^6;
sbit q=P3^0;
sbit m=P3^1;
void delay(uint z);
void init();
void display(uint bai,uint shi,uint ge);
void main()
{ init();
while(1)
{
bai=t/100;
shi=t%100/10;
ge=t%10;
display(bai,shi,ge);
if(q==0)
{ delay(200);
if(q==0)
EA=0;
}
else EA=1;
if(m==0)
{ delay(200);
if(m==0) t=0;
}
}
}
void display(uint bai,uint shi,uint ge)
{ w=1;
P0=0xfb;
w=0;
P0=0xff;
d=1;
P0=a[ge];
d=0;
delay(5);
w=1;
P0=0xfd;
w=0;
P0=0xff;
d=1;
P0=a[shi];
d=0;
delay(5);
w=1;
P0=0xfe;
w=0;
P0=0xff;
d=1;
P0=a[bai];
d=0;
delay(5);
}
void init()
{ TMOD=0x01;
TH0=0x4c;
TL0=0xff;
TR0=1;
EA=1;
ET0=1;
}
void delay(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
void time0() interrupt 1
{ TH0=0x4c;
TL0=0xff;
aa++;
if(aa==20)
{ aa=0;
t++;
if(t==100) t=0;
}
}