#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;
}
}
}