实验蜂鸣器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验8 蜂鸣器实验
(仿真部分)
1.实验任务
用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。
2.电路原理图
3.硬件连线
(1.P1.0端口用导线通过“音频放大模块”连接到喇叭SOUNDER上;
(2.把P1.7端口用导线连接到“拨动开关”K1端口上;
4.程序设计内容
(1.信号产生的方法
500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,
信号电平每500us变反1次;
5.程序框图
图4.6.2 6.汇编源程序(非中断软延时)
FLAG BIT 00H
ORG 00H
START: JB P1.7,START
JNB FLAG,NEXT
MOV R2,#200
DV: CPL P1.0
LCALL DELY500
LCALL DELY500
DJNZ R2,DV
CPL FLAG
NEXT: MOV R2,#200
DV1: CPL P1.0
LCALL DELY500
DJNZ R2,DV1
CPL FLAG
SJMP START
DELY500: MOV R7,#250
LOOP: NOP
DJNZ R7,LOOP
RET
END
7.C语言源程序(非中断软延时)
#include
bit flag;
unsigned char count;
void dely500(void)
{
unsigned char i;
for(i=250;i>0;i--)
{
_nop_();
}
}
void main(void)
{
while(1)
{
if(P1_7==0)
{
for(count=200;count>0;count--)
{
P1_0=~P1_0;
dely500();
}
for(count=200;count>0;count--)
{
P1_0=~P1_0;
dely500();
dely500();
}
}
}
}
8.汇编源程序(计数方式采用中断方式)
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0P
ORG 0013H
LJPM INT1P
MAIN: MOV SP,#60H
SETB IT0
SETB IT1
SETB IE0
SETB IE1
SETB EA
MOV R0,#00H
LOOP: MOV P1,R0
JMP LOOP
INT0P:INC R0
RETI
INT1P:DEC R0
RETI
END
9.实验要求
学会C51和ASM51两种编程工具。并尝试采用定时器实现定时。
实验8 交流蜂鸣器演奏简单乐曲
1. 实验目的
●学习蜂鸣器的基础知识
●掌握用I/O驱动中等电流负载的正确方法
●学习如何用74HC573扩展简单的并行输出端口
●进一步掌握如下基础知识:定时器、中断、I/O扩展电流驱动、蜂鸣器
●学习如何编写简单的乐曲程序
2. 实验原理
2.1蜂鸣器原理
蜂鸣器是常见的电子讯响器件,与扬声器相比,明显优势是体积很小,但缺点是低频响应很差,一般不能很好地产生200Hz以下的低频声音。按制造工艺,蜂鸣器可分为电磁式、压电式等。按功能,蜂鸣器分为有源和无源两大类,也称做直流蜂鸣器和交流蜂鸣器。对直流蜂鸣器,只要加上正向电源(可能需要限流电阻)就能发出一定频率的响声,操作简单,但是只有响与不响两种状态。而交流蜂鸣器需要输入有一定驱动能力的交流信号才能发声,发声频率即交流信号的频率,因此能够发出各种不同音调的响声,可用来演奏简单乐曲。
蜂鸣器在正常工作时,一般需要数十毫安的驱动电流,这大大超过了8051的I/O承受能力。对这种中等电流负载的驱动方法,一般可采用晶体管。图 4.21是蜂鸣器的典型驱动电路。
2.2 简单乐曲原理
假如您是一名电子产品研发工程师,如果能够在您设计的产品里加入演奏乐曲的功能,则会让消费者耳目一新,增加一个很好的卖点。利用蜂鸣器演奏简单的乐曲,具有结构简单、体积小、成本低等优势,软件处理起来也不是很复杂。
图 4.24 一段简单的乐谱
编写简单的乐曲程序,需要懂得一些简单的乐理知识。由于篇幅所限,这里不做详细讲解,如果有兴趣,请参考相关书籍或网上资料。
请看图 4.24所示的一段简单乐谱。一首乐曲可以看成是由一个个基本的音符组成。音符是乐曲的基本单元,它有两个要素:发声频率和发声时值。用两个定时器就可以完成演奏一个音符的任务,一个工作于定时中断方式,在中断服务程序里不断翻转控制蜂鸣器的I/O,以产生规定频率的响声;另一个决定演奏多久,是一个简单的延时应用。把所有音符串接起来演奏,就会形成一支动听的乐曲。在光盘例程中,名为“Sound”的子程序,可以演奏一个音符,而“Play”子程序通过不断调用“Sound”子程序来演奏整个乐曲。
在下面已经以宏定义的形式给出了低音、中音和高音“1234567”发声频率对应的定时器初值,L1~L7表示低音,M1~M7表示中音,H1~H7表示高音。
;************************************************************************** *****
;定义音名(1=G)
;L1~L7表示低音,M1~M7表示中音,H1~H7表示高音
;************************************************************************** *****
L1 EQU 0xFB68 ;391.995Hz(G1)
L2 EQU 0xFBE9 ;440Hz (A)
L3 EQU 0xFC5B ;493.883Hz(B)
L4 EQU 0xFC8F ;523.251Hz(C)
L5 EQU 0xFCEF ;587.33Hz (D)
L6 EQU 0xFD45 ;659.255Hz(E)
L7 EQU 0xFD91 ;739.989Hz
M1 EQU 0xFDB4 ;783.991Hz(G)
M2 EQU 0xFDF4 ;880Hz (a)
M3 EQU 0xFE2D ;987.767Hz(b)
M4 EQU 0xFE48 ;1046.5Hz (c)
M5 EQU 0xFE78 ;1174.66Hz(d)
M6 EQU 0xFEA3 ;1318.51Hz(e)
M7 EQU 0xFEC9 ;1479.98Hz
H1 EQU 0xFEDA ;1567.98Hz(g)
H2 EQU 0xFEFA ;1760Hz (a1)
H3 EQU 0xFF17 ;1975.53Hz(b1)
H4 EQU 0xFF24 ;2093Hz (c1)