一、实验目的
(1)熟练掌握51单片机内部并行I/O口的基本应用;
(2)掌握蜂鸣器的原理及使用方法;
(3)能够根据项目任务在Proteus 上设计硬件原理图;
(4)能够在Keil µVersion3上编程实现蜂鸣器的程序管理;
(5)能够使用调试工具进行Proteus和Keil µVersion3的联机调试。
二、实验要求
设计用两个开关S1、S2控制P1.0引脚实现蜂鸣器报警的程序,要求如下:
(1)开关S1、S2分别接到P3.0、P3.1引脚上。
(2)蜂鸣器接到P1.0引脚上。
(3)开关S1闭合发出频率为1kHz的声音,发声时间约为1s。
(4)开关S2闭合发出频率为500Hz的声音,发声时间约为0.5s。
提示:
(1)假设单片机系统时钟频率为12MHz。
(2)采用软件延时。
(3)在Proteus中,可以使用的蜂鸣器有两种,分别是SOUNDER和BUZZER,实验前请查阅资料了解蜂鸣器的使用方法。
三、实验步骤及结果
用Proteus绘制实验电路原理图
蜂鸣器的特点与用法:
1、 BUZZER只是SOUNDER的一种,SOUNDER 可以理解为发声器,本实验采用BUZZER。
2、 电磁式蜂鸣器: 由振荡器电磁线圈、磁铁、振动膜片及外壳等组成,详情如图:
图1-1 蜂鸣器原理图
3、 蜂鸣器工作原理:
通过在某一接脚接高电压使线圈产生电流从而产生电磁场。产生磁场后将振动膜片吸附到中间的铁柱上,然后在此接脚接低电压,电流断开,磁场消失,振动膜片回弹。有振荡器的蜂鸣器为有源蜂鸣器,它可以直接将输入的高电压转换为一定频率的方波。无源蜂鸣器则没有振荡器需自己设计频率。
4、 蜂鸣器的用法:
三极管做蜂鸣器的开关应用:
首先不接三级管是不可以的,虽然单片机能直接写1,在输出口输出5V的电压,但是因为P1的I/o口内接上拉电阻,上拉电阻的电压比较大的,所以单片机的输出电流是不足以驱动蜂鸣器的。
图1-2 三级管原理图
如图:当IB>1mA时,E到C接通。
所以蜂鸣器的应用如图所示:
图1-3 蜂鸣器应用图
5、 试验电路原理图如图1-4所示:
图1-4 实验电路原理图
表1-1 所用元器件及其参数
序号 器件编号 Proteus器件名称 器件性质 参数及说明 数量
1 U1 AT89C51 单片机 12MHz 1
2 R1、R2、R3 RES 8排电阻(限流) 1KΩ 3
3 BUZ1 BUZZER 电磁蜂鸣器 5v有源 1
4 S1、S2 BUTTON 按钮 2
5 Q1 PNP 三 极管 1
#include
#define uchar unsigned char
#define uint unsigned int
uchar i=1;
sbit S1=P3^0;
sbit S2=P3^1;
sbit Buzzer=P1^0;
/*-------------------------------
10ms延时程序
-------------------------------*/
void delay10ms(int x)
{ int i,j; // 声明变量
for (i=1;i<x;i++) // 执行x次,延迟X*10ms
for (j=1;j<1200;j++);// 执行120次,延迟10ms
}
/*---------------------------
蜂鸣器驱动程序
---------------------------*/
void BUZZER1k(uint x) //0.24ms半周期蜂鸣器程序
{
while(x--)
{
Buzzer=~Buzzer; //蜂鸣器谐振频率2048Hz
for(i=0;i<167;i++); //1KHz
}
Buzzer=1; //复位
}
void BUZZER500(uint x) //0.24ms半周期蜂鸣器程序
{
while(x--)
{
Buzzer=~Buzzer; //蜂鸣器谐振频率2048Hz
for(i=0;i<84;i++); //500Hz
}
Buzzer=1; //复位
}
void main()
{
while(1)
{
if((S1==0) )
{
BUZZER500(500);
delay10ms(100);//延时1s
S1==1;
}
if(S2==0)
{
BUZZER1k(500);
delay10ms(50);//延时0.5s
S2==1;
}
}
}
Proteus和Keil 51的联机调试