用定时器设计门铃,按下按键时蜂鸣器发出叮咚的门铃声

叮咚 产生的方式

用定时器设计门铃,按下按键时蜂鸣器发出叮咚的门铃声

仿真

用定时器设计门铃,按下按键时蜂鸣器发出叮咚的门铃声

程序代码

#include<reg51.h>
sbit key=P3^4;
sbit beep=P1^5;
#define CRYSTAL_FREQ 12000000 
#define INTERRUPT_PERIOD_0 4000
#define uchar unsigned char
#define uint  unsigned int
	
uchar ding,dong,start,stop;
uint flag;
//
//
void delayms(uchar x)
{
	int i,j;
	for(i=x;i>0;i--)
		for(j=0;j<120;j++);
}
//
//
void Canshu_Init()
{
	ding=0;
	dong=0;
	start=0;
	stop=0;
	flag=0;
}
//
//
void Interrupt_Init()
{
  TMOD = 0x01;	
  TH0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) / 256;
  TL0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) % 256;
  ET0 = 1;	
  EA  = 1;	
}
//
//
void main()
{
Canshu_Init();
Interrupt_Init();
while(1)
	{
	if(key==0)
	{
		delayms(5);
		if(key==0)
		{
			  TR0 = 1;//timer0 start
			while(stop);
	 	}
	}
			
	}
}

//
//
  void Timer0() interrupt 1
{
 
  TH0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) / 256;
  TL0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) % 256;
	flag++;
	
	if(flag==2000)//0.5s get
	{
		flag=0;
		if(start==0)
		{
		start=~start;
		}
		else
		{
			start=0;
			stop=~stop;
			TR0=0;
		}
	}
	if(start==0)
	{
	ding++;
	if(ding==3)
		{
			ding=0;
			beep=~beep;
		}
	}
	else
	{
	dong++;
	if(dong==4)
		{
			dong=0;
			beep=~beep;
		
		}
	}

	
	}