数码管有抖动,不该亮的亮了.我用了中断

问题遇到的现象和发生背景

数码管有抖动,不该亮的亮了.我用了中断

用代码块功能插入代码,请勿粘贴截图
#include 
            
sbit ADDR0 = P1^0;            
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code Ledchar[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
unsigned char LedBuff[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
unsigned char Led_[]={
0x7E,0xBD,0xDB,0xE7,0xDB,0xBD,0x7E
};
unsigned  int cnt = 0;
unsigned char flagls = 1;
unsigned char x = 0;  
long sec1 = 10;
long sec2 = 0;
void main()
{
    static long sec1 = 10;
    static long sec2 = 0;
     EA = 1;     
     ENLED = 0;
     ADDR3 = 1;
     ADDR2 = 1;
     ADDR1 = 1;
     ADDR0 = 0;
     TMOD = 0x01;                   
     TH0  = 0xFC;
     TL0  = 0x67;
     ET0  = 1;
     TR0  =1;

     while(1)
     {
            if(flagls == 1)
            {
                 flagls = 0; 
                
                 LedBuff[0] = Ledchar[sec1%10];
                 LedBuff[1] = Ledchar[sec1/10%10];
                 sec1--;
                 P0 = Led_[x];
                 x++;
                 if(x > 6)
                 {
                        x = 0;
                 }
                 
                 if(sec1 < 0)
                 {
                    
                     sec2++;
                     if(sec2 <10)
                     {
                   LedBuff[0] = Ledchar[sec2%10];
                     LedBuff[1] = 0xBF;
                     }
                 
                     if(sec2>=10 && sec2<=20)
                     {
                         LedBuff[0] = Ledchar[sec2%10];
                         LedBuff[1] = Ledchar[sec2/10%10];
                         LedBuff[2] = 0xBF;
                     }
                 }
             }
     }
}
void InterruptTimer0() interrupt 1       
{
     static unsigned char i = 0; 
   TH0 = 0xFC;
     TL0 = 0x67;
     cnt++;
     if(cnt >= 1000)
     {
        cnt = 0;
          flagls = 1;
     }
        P0 = 0xFF;
     switch(i)
     {
        case 0:ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedBuff[i];i++;break;
        case 1:ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedBuff[i];i++;break;
        case 2:ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedBuff[i];i++;break;
        case 3:ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;P0=Led_[x],i=0;break;
     }
}

我想要达到的结果

数码管消抖。最终的结果为:双向流水灯,一秒切换一个。同时,数码管从10倒计时到-20