51单片机蜂鸣器以及计数清零问题

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

需要两个按键、四位七段数码管和一个蜂鸣器,实现功能如下:
1、按键一模拟传感器功能,每按下一次按键,数码管计数加一,最大计数9999;
2、按键二实现计数清零功能,按下后将数码管中的计数恢复为0;
3、每计数到一百,蜂鸣器鸣叫一次;
4、具有初始化功能,四位数码管同时显示8然后熄灭。

问题相关代码,请勿粘贴截图

/*
按钮与单片机P3.4引脚相连,
P0口通过限流电阻接共阳极数码管(十位),
P2口通过限流电阻接共阳极数码管(个位)。
开始显示2位数00,
每按一次按钮,计数值加1,数码管显示计数值。
文件名还得用英文,汉字文件名总是出错。
*/
//==声明区================================================
#include    <reg51.h>        // 定义8051暂存器之标头档 
unsigned char code TAB[17]=    // 共阳7节显示器(g~a)编码 
{     0xc0, 0xf9, 0xa4, 0xb0, 0x99,    // 数字0-4
      0x92, 0x82, 0xf8, 0x80, 0x98,     // 数字5-9
    0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};   //;A~F的共阳极显示码
unsigned int coun=0;
sbit key=P3^4;
void  delay1ms(int);            // 声明延迟函数 
void display();        
//==主程序================================================
main()                            // 主程序开始 
{    
    while(1)
    {                    // 无穷回圈,程序一直跑 
      if(key==0)             //检查按键
      {
        delay1ms(10);         //延时去抖动
        if(key==0)             //再检查
        {
            while(key==0){}; //等待按键释放
            coun++;             //计数值加1
            if(coun==10000) coun=0;
            display();
        };
      };  
    }
}                                // 主程序结束 
//====显示函数==============================================
void display()
{
    unsigned int m;
    unsigned char ge;
    unsigned char shi;
    unsigned char bai;
    unsigned char qian;
    ge=coun%10;
    m=coun/10;
    shi=m%10;
    m=m/10;
    bai=m%10;
    m=m/10;
    qian=m%10;
    P0=shi<<4|ge;
    P2=qian<<4|bai;
}        

// === 延迟函数,延迟约x*1ms ================================
void delay1ms(int x)             
{    int i,j;                    // 声明整数变数i 
    for(i=0;i<x;i++)            // 计数x次,延迟约*1ms        
        for(j=0;j<120;j++);        // 计数120次,延迟约1ms 
}        

运行结果及报错内容

现在加了一个按钮 不知道怎么修改程序,蜂鸣器也不知道从哪加和怎么写程序

我的解答思路和尝试过的方法

试了网上很多,加上之后不管用,实现不了功能,望指点

img


图片是我仿真的截图,有什么不对的地方请指正

我想要达到的结果

主要是能实现要求里的功能即可

你这个问题挺多的,主函数main的类型没有声明,然后display函数只有在key按下时才会执行,若是key不按下是不是就不显示了