51单片机初学者疑问

请问这串代码是如何达到数码管倒计时的效果的,为什么不需要对y和定时器进行清零呢

#include 

#define uint unsigned int
#define uchar unsigned char
sbit WE=P2^7;
sbit DU=P2^6;
sbit beep=P2^3;
char x=10;
uchar y=0;
uchar temp=0xF0;
void time();
void delay(uint z);
void display(uchar z);

uchar code leddata[]={ 
                                                                                         
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"         
                        };
void main()
{  time();
    while(1)
    {    display(x);
                if(TF0==1)
                {y++;
                     if(y==20)
                    {x--;
                    }
                }
            
    }


}
void display(uchar z)            //编写显示位置的函数                
{uchar x,y;
x=z/10;                                                                        
y=z%10;
WE=1;
P0=0XFE;         //1WE=0;
P0=0X00;

DU=1;
P0=leddata[x];
DU=0;
P0=0XFF;
delay(2);

WE=1;
P0=0XFD;         //2WE=0;
P0=0X00;

DU=1;
P0=leddata[y];
DU=0;
P0=0XFF;
delay(2);
}
void delay(uint z)
{
  uint x,y;
  for(x = z; x > 0; x--)
      for(y = 114; y > 0 ; y--);      
} 

void time()
{    TR0=1;                   //50ms
    TMOD=0X01;
    TH0=0x4b;
    TL0=0xfc;    
}




定时器的原理,你可能没了解透测