c51单片机计数问题

c语言,51单片机控制四位数码管从0000按秒计数到9999.外加一个按键控制暂停和开始。另一个按键控制按两秒计一次数。
自己编写的程序仿真不了,希望朋友们帮助一下。


#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define smg P0
sbit button_1=P3^0;
sbit button_2=P3^1;
u16 k = 0;
u16 smgduan[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 
void delay(u16 i)
{
    while(i--);
}
void keypros()
{
    if (button_1 == 0)
    {
        delay(500);
        if (button_1 == 0)
        {
            if (k>=9999)
            {
                k=0;
            }
            else
            {
                k = k + 1;
            }
        }
        while(!button_1);   
    }
    if (button_2 == 0)
    {
        delay(500);
        if (button_2 == 0)
        {
            if (k<=0)
            {
                k=9999;
            }
            else
            {
                k = k-1;
            }
        }
        while(!button_2);
    }
}
void main()
{
    int q,b,s,g;
    while(1)
    {
        keypros();
        q = k/1000;
        b = k%1000/100;
        s = k%100/10;
        g = k%10;
        delay(100);
 
        P2 = 0x07;
        smg = ~smgduan[q];
        delay(5);
 
        P2 = 0x0e;
        smg = ~smgduan[b];
        delay(5);
 
        P2 = 0x0d;
        smg = ~smgduan[s];
        delay(5);
 
        P2 = 0x0b;
        smg = ~smgduan[g];
        delay(5);
 
    }
}