谁能帮我把这个问题完善一下,关于51单片机c的声光报警器!

在这个程序里加一个控制按键,按键按下流水灯和蜂鸣器开始运行,再按下停止运行!可以的话帮我把蜂鸣器发出的声音改成节奏报警!谢谢

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit beep = P2^7; // P1.2口控制蜂鸣器
Delay(uint);
unsigned int a,b;
unsigned char c;
void delay(unsigned char);
main ()
{
c=0xfe;
while(1)
{
P1=c;
beep=0;
delay(10);
beep=1;
delay(10);
c=_crol_(c,1);
}
}
void leday(unsigned char x)
{
for(a=500;a>0;a--)
for(b=x;b>0;b--);
}
Delay(uint z) //含有发音功能的延时程序
{
uint i, j;
for(j = z; j > 0; j--) {
beep = 0; for(i = 100; i > 0; i--);
beep = 1; for(i = 100; i > 0; i--);
}
}
图片说明

这个问题可以使用定时器实现,定时器代码请自行百度。
给是否需要报警做个标志为如。1,报警,0,停止报警,初始化为0
main函数中可以用一个两个if判断按键是否按下,为什么要用两个,防止误操作
当检测到按下按键,把标志位置为1,再次按下置为0
在定时器中可以检测标志位为1时,beep=1就给赋值为0,beep=0就给赋值为1,这样就有节奏了,节奏可以根据你定时器的时长修改,
检测到标志位为0时,beep等于几是关闭,就给他赋值为关闭把。当然你在按下按钮就把beep关闭了的话这里可以不做处理了