51单片机门铃电路原理图及C语言源程序
          
            时间:07-23 13:49 阅读:1460次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:本文主要讲了51单片机门铃电路原理图及C语言源程序,下面一起来学习一下:
               
                        
          
            当按下开关SP1,AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭。 
电路原理图

系统板上硬件连线 
(1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; 
(2. 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭; 
(3. 把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上; 
程序设计方法 
(1. 我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。 
(2. 在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。 
(3. “叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。 
C语言源程序 
#include 
unsigned char t5hz; 
unsigned char t7hz; 
unsigned int tcnt; 
bit stop; 
bit flag; 
void main(void) 
{ 
unsigned char i,j; 
TMOD=0x02; 
TH0=0x06; 
TL0=0x06; 
ET0=1; 
EA=1; 
while(1) 
{ 
if(P3_7==0) 
{ 
for(i=10;i>0;i--) 
for(j=248;j>0;j--); 
if(P3_7==0) 
{ 
t5hz=0; 
t7hz=0; 
tcnt=0; 
flag=0; 
stop=0; 
TR0=1; 
while(stop==0); 
} 
} 
} 
} 
void t0(void) interrupt 1 using 0 
{ 
tcnt++; 
if(tcnt==2000) 
{ 
tcnt=0; 
if(flag==0) 
{ 
flag=~flag; 
} 
else 
{ 
stop=1; 
TR0=0; 
} 
} 
if(flag==0) 
{ 
t7hz++; 
if(t7hz==3) 
{ 
t7hz=0; 
P1_0=~P1_0; 
} 
} 
else 
{ 
t5hz++; 
if(t5hz==4) 
{ 
t5hz=0; 
P1_0=~P1_0; 
} 
} 
}