如何让51单片机蜂鸣器实现门铃叮咚声循环响5次

#include <reg52.h>

#include "delay.h"

unsigned char ding;

unsigned char dong;

unsigned int start;//定义变量

 

bit stop;

bit flag; //定义变量,值为1或0.

 

sbit key=P3^4;//按键

sbit speaker=P2^3; //蜂鸣器

 

void delayms(unsigned char x)//按键消抖毫秒级延时

{

 int i,j;

 for(i=x;i>0;i--)

  for(j=0;j<120;j++);

}

/***************主函数 **************/

 

void main(void)

{

  TMOD=0x02; //开定时器

  TH0=0x06; //定时器/计数器 0高8位寄存器 

  TL0=0x06; //定时器/计数器 0低8位寄存器 

  ET0=1; //允许/禁止T0溢出中断

  EA=1; //开总中断

while(1){

  if(key==0) //按键按下

   

  if(key==0) //确认按键是否真的被按下

{

  ding=0;

  dong=0;

  start=0;

  flag=0;

  stop=0;

  TR0=1;

while(stop==0); //

}

}

}

}

 

/**************中断函数******************/

void Timer0(void) interrupt 1 using 0 

{

 

  start++;

 if(start==2000)//切换叮咚。

{

  start=0;

 if(flag==0)

{

  flag=~flag;//取反

}

else

{

  stop=1;

  TR0=0; //定时器0运行控制位,关闭定时器,等待下次按铃。

}

}

 

 

if(flag==0) //通过改变定时计数时间可以改变门铃的声音

{

   ding++;

if(ding==3)

{

  ding=0;

  speaker=~speaker;

}

}

 

else

{

   dong++;

if(dong==4)

{

  dong=0;

  speaker=~speaker;

}

}

}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^