程序没有错误,但是在开发板上数码管上只是显示00,求大神帮看错误

#include
sbit key1 = P3^4;
sbit key2 = P3^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit du = P2^6;
sbit we = P2^7;
sbit LED1 = P1^0;
unsigned char code leddata[]=
{

            0x3F,  //"0"
            0x06,  //"1"
            0x5B,  //"2"
            0x4F,  //"3"
            0x66,  //"4"
            0x6D,  //"5"
            0x7D,  //"6"
            0x07,  //"7"
            0x7F,  //"8"
            0x6F,  //"9"
            0x77,  //"A"
            0x7C,  //"B"
            0x39,  //"C"
            0x5E,  //"D"
            0x79,  //"E"
            0x71,  //"F"
            0x76,  //"H"
            0x38,  //"L"
            0x37,  //"n"
            0x3E,  //"u"
            0x73,  //"P"
            0x5C,  //"o"
            0x40,  //"-"
            0x00,  //熄灭
            0x00  //自定义

                     };

void delay(unsigned int);
unsigned char num,num1;
void display(unsigned char num)
{
unsigned char shi,ge;
shi=num/10;
ge=num%10;

du = 1;
P0=leddata[shi];
du = 0;
P0=0xff;
we = 1;
P0=0xfe;
we = 0;
delay(1);

du = 1;
P0=leddata[ge];
du = 0;
P0=0xff;
we = 1;
P0=0xfd;
we = 0;
delay(1);

}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化函数
{
TMOD = 0x01;
TH0 =(65536-45872)/256;
TL0 =(65536-45872)%256;
EA=1; //开总中断
ET0=1;//开定时器0中断
}
void keyscan()
{
if (key1==0)
{
delay(10);
if(key1 == 0)
{
num++;
if(num==60)
num=0;
while(!key1);//等待按键释放
}

 }
if (key2 == 0)
{
    delay(10);
    if(key2==0)
    {
        if(num==0)
            num=60;
            num--;
            while(!key2);
    }
}
if(key3 == 0)
{
    delay(10);
    if(key3 == 0)
    {
        num=0;
        while(!key3);

    }
}
if(key4 == 0)
{
    delay(10);
    if(key4==0)
    {
        while(!key4)
        TR0=~TR0;//启动定时器
    }
}

}
void main()
{
init();//初始化函数
while(1)
{
keyscan();
display(num);
}
}
void T0_time() interrupt 1
{
TH0=(65526-45872)/256;
TL0=(65526-45872)%256;
num1++;
if(num1==20)
{
num1++;
num++;
if(num==60)
num=0;
}
}
万分感谢

以前课设做过,截取声明部分和显示部分给你参考一下,后面程序不全,直接用会报错

 #include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int

uchar data se7[4];
uchar data sec_dx=20;   //东西数默认
uchar data sec_nb=20;   //南北默认值
uchar data set_timedx=20;
uchar data set_timenb=20;
int n,m,i;
uchar data b;               //定时器中断次数
sbit Yellow_nb=P1^2;    //南北黄灯标志
sbit Yellow_dx=P1^5;    //东西黄灯标志
sbit Green_nb=P1^1;
sbit Green_dx=P1^4;
sbit Red_nb=P1^3;
sbit Red_dx=P1^6;
//按键标志

sbit ENTER=P2^2;
sbit AddOne_nb=P2^1;
sbit AddOne_dx=P2^0;
sbit STOP=P2^3;
sbit CAUTION=P3^0;
sbit  Change=P3^1;
// sbit Urgent=P2^3;
bit T=0;                //灯状态循环标志
uchar code table[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};

//函数的声明部分
void delay(int ms); //延时子程序
void display();     //显示子程序
void time1(void);
void key();
void TimeSet();

//主程序
void main()
{
    TMOD=0X01;  
    TH0=0XD8;
    TL0=0XF0;
    EA=1;
    ET0=1;
    TR0=1; 
//  EX0=1;                        
    EX1=1;
    P1=0XC3;        // 开始默认状态,东西红灯,南北绿灯
    sec_nb=sec_dx+5; 
    while(1)
    {    
        key();
        display();  //调用显示程序
    }   
}

void display()      //显示子程序
{       
        se7[1]=sec_dx/10; //第1位 东西秒十位
        se7[2]=sec_dx%10; //第2位 东西秒个位
        se7[3]=sec_nb/10; //第3位 南北秒十位
        se7[0]=sec_nb%10; //第4位 南北秒个位     
        P2=0xff;                      // 初始灯为灭的
        P0=0x00;
        P2=0xeF;                      //片选LCD1
        P0=table[se7[1]];
          delay(1);
        P2=0xff;
        P0=0x00;
        P2=0xdF;                     //片选LCD2
        P0=table[se7[2]];
          delay(1);
        P2=0xff;
        P0=0x00;
        P2=0XbF;          //片选LCD3
        P0=table[se7[3]];
          delay(1);
        P2=0xff;
        P0=0x00;
        P2=0X7F;
        P0=table[se7[0]];           //片选LCD4    
          delay(1);
}

很多东西都忘记了,你凑合着看

void T0_time() interrupt 1
{
TH0=(65526-45872)/256;
TL0=(65526-45872)%256;
num1++;
if(num1==20)
{
num1++;
num++;
if(num==60)
num=0;
}
}这个num1为什么要一直自加??