八音盒设计Word文档格式.docx
《八音盒设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《八音盒设计Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
本设计以AT89C51单片机为核心。
通过对其定时器的设定来实现音乐的播放,通过对键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序,置数、送操作命令、控制程序的执行走向等,并最终通过LED显示器显示出播放的乐曲。
重点研究内容有:
·
单片机最小系统的设计与实现
键盘电路的设计与控制
扬声器控制电路的设计与实现
LED显示器的驱动及显示
定时初值的计算
软件模块的设计与编写
第2章音乐播放器的功能与组成
2.1音乐播放器的功能
基于单片机的定时和控制装置在许多行业中有着广泛的应用,而音乐播放器是其应用之一。
在基于单片机的音乐播放器电路中,除了基本的单片机系统和外围电路外,还需要外部的控制和显示装置。
在本设计中,输入装置是按键开关,由于控制音乐播放器的运行模式,显示装置是LED七段数码管。
此次设计的音乐播放器要求具有以下功能:
音乐播放器按照从头到尾的顺序自动播放预先设定的1~4共4首乐曲,全部乐曲播放完毕则停止。
音乐播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。
选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,音乐播放器对选定的某一乐曲开始循环播放。
选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,音乐播放器就从选定的某一乐曲开始播放,按照顺序自动播放到最后一首乐曲,乐曲播放完毕则停止。
当用户按下暂停键时,音乐播放器打断正在播放的某一乐曲,用户再次按下暂停键时,该乐曲继续播放。
当用户按下复位键时,音乐播放器终止正在播放的某一乐曲。
2.2音乐播放器的组成
根据系统音乐播放器的功能要求,一个完整的音乐播放器电路相当于一个简单的单片机系统,该系统由按键开关、单片机、LED显示电路、扬声器控制电路4个方面构成。
51单片机。
51单片机为整个系统的核心部分,是带动整个系统工作的重要部件。
键盘输入。
键盘输入用来控制输入指令,发出指令至单片机,使单片机按照指令工作。
扬声器。
扬声器作为输出部分按照键盘给单片机的指令发出乐曲。
LED显示电路。
LED显示器也作为输出部分,按照键盘给单片机的指令,显示正在演奏的乐曲。
音乐播放器的系统组成框图如图2-1所示:
图2-1音乐播放器的系统组成框图
第3章系统总体设计与关键技术
3.1系统总体设计
根据系统的功能与组成,进行系统分析,系统除CPU核心部分外还需要与键盘连接以接收输入指令,连接LED显示器将要演奏的乐曲序号显示出来,通过连接扬声器使其发出音乐。
系统总体结构如图3-1所示。
图3-1系统总体结构框图
3.1.1音乐播放器的工作原理
音乐播放器可利用单片机的定时器构成电子振荡器来发声。
振荡器是电子乐曲播放器的声源,专门用来制造音响,也称信号发生器,其作用相当于常规乐器的琴弦、簧片、哨片。
振荡器在音乐播放器的应用中有两个特点,可产生声音的频率与不同波形的振荡。
通过对单片机的定时器设置不同的定时初值,可发出音乐的不同音阶,通过调整振荡波形与泛音的分布,可产生和变换各种音色。
在我们所设计的音乐播放器中,是通过单片机的定时器,产生不同频率的方波信号,而没有调整振荡波形,因此音乐播放器发出的声音,是矩形波产生的音响,纯粹的矩形波声音类似于单簧管的音色。
一首乐曲是由音阶和节拍两大要素构成,不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;
3.1.2音阶对应频率计数初值的计算
单片机的振荡频率为fosc=12MHz,通过定时器T0溢出后对P3.0口取反产生方波,故定时器溢出时间为1/2f。
由:
,则定时初值为:
以音阶“1”为例:
f=523Hz,则T=1/f
定时初值:
用同一方法可求出其它音阶所对应的频率定时初值,将其制表放在程序中,通过查表向定时器T0装入所要求的定时初值,即可产生某一音阶所对应的频率的方波信号。
C调的音阶及其频率、在单片机中的定时初值对应如下:
音名CDEFGAB
简谱音阶1234567
频率/Hz262294330349392440494
定时初值63628638356402164103642606440064524
表中序号1234567
频率/Hz523587659698784880988
定时初值(Hex)64580646846477764820648986496865030
表中序号891011121314
频率/Hz1046117513181397156817601967
定时初值(Hex)65058651106515765178652176525265283
表中序号15161718192021
3.1.3乐曲节拍的计算
取乐曲节拍的长度为0.4s,即1拍=0.4s,由定时器T1控制延时。
设置定时器T1的定时中断T=50ms,采用定时方式1。
,则定时初值X=3C0BH
因此1拍=0.4s=8*50ms,即通过定时器T1的定时中断8次,产生8*50ms的定时,就可以满足1节拍的定时要求。
以此类推,通过定时中断N次,可产生N*50ms的定时以满足1/4拍、1/2拍、1拍、2拍等不同节拍的定时要求。
由此可知,节拍值只能是整数值。
不同节拍在单片机中的中断次数(音长)对应如下:
节拍1/81/41/23/413/2234
时间长度0.05s0.1s0.2s0.3s0.4s0.6s0.8s1.2s1.6s
音长(Dec)1246812162432
音长(Hex)01H02H04H06H08H0CH10H18H20H
3.1.4乐谱在程序中的编制
将乐谱转换为代码,应包含乐曲的总长度、音阶、音长(节拍)等信息。
具体设计如下:
(1)将音阶代码组成一个字节,节拍代码组成一个字节,按照:
音阶代码,节拍代码,音阶代码,节拍代码……的顺序,将一个乐谱转换为一定长度的代码数据表。
(2)在程序执行时顺序查此表,取出音阶代码,并根据音阶代码查频率表,以得到该音阶对应的频率,随后将对应的定时初值送定时器T0,使定时器T0产生该音阶对应的频率,并通过P3.0口输出,驱动外接扬声器发声。
(3)取出节拍代码N,由定时器T1控制延时,通过定时中断N次,产生N*50ms的定时。
T0、T1启动后,根据乐谱表,某一个音阶发出相应频率的声音,并持续相应的节拍,连续起来,我们就可以听到一个完整乐曲的演奏。
3.2系统中应用的关键技术
基于单片机的音乐播放器在设计时需要解决以下4个方面的问题:
有关单片机中定时器的使用。
利用键盘控制实现对单片机的控制。
LED显示模块的驱动和编制。
扬声器控制电路,用于发出不同频率的音调。
第四章音乐播放器的硬件设计
一个完整的音乐播放器电路相当于一个简单的单片机系统,该系统由按键开关、单片机、晶振和复位电路、LED显示电路、扬声器控制电路5个方面构成。
其中,除了单片机是集成的IC芯片,而其他4个部分则需根据应用要求而设计。
4.1单片机最小系统
单片机芯片,配以必要的外部器件就能构成单片机最小系统。
单片机具有较强的外部扩展、通信能力,能方便地扩展至应用系统所要求的规模。
当使用带ROM或EPROM的MCS-51系列单片机时,只要一个芯片即可构成一个单片机的最小系统。
选用80C51或8051或AT89C51单片机作为主机,它们都具有4K片内ROM,128字节片内RAM,片外ROM寻址范围达64K,片外RAM寻址范围达64K,2个16位计数器,5个中断源,4个并行口,1个串行口。
简易自动乐曲播放器采用单片机最小系统足以满足系统设计要求,同时要设计单片机最小系统的晶振和复位电路。
4.1.1单片机复位电路
复位是单片机的初始化操作,其作用是使CPU中的各个部件都处于一个确定的初始状态,并从这个状态开始工作。
当8051的ALE及两脚输出高电平,RST引脚高电平时,单片机复位。
8051单片机的复位电路有上电复位和手动按钮复位两种形式,RST/VPD端的高电平直接由上电瞬间产生高电平则为上电复位;
若通过按钮产生高电平复位信号称为手动按钮复位。
图4-1为兼有上电复位与按钮复位的电路。
图中,上电瞬间RST端的电位与Vcc相同,随着电容充电电流的减小,+5V立即加到了RST/VPD端,该高电平使8051复位。
若运行过程中,需要程序从头开始执行,这只需按图4-1中的按钮即可。
按下按钮则直接把+5V加到了RST/VPD端从而复位,这称为手动复位。
在实际应用系统中,有些外围芯片也需要复位,如果这些复位端的复位电平要求与单片机的要求一致,则可以与之相连。
4.1.2单片机晶振电路
晶振是给单片机提供工作信号脉冲的,这个脉冲就是单片机的工作速度。
比如12M晶振,单片机工作速度就是每秒12M。
当然,单片机的工作频率是有范围的,不能太大,一般24M就不上去了,不然不稳定。
4.2键盘接口电路的设计
单片机应用系统中的人机对话通道是用户为了对应用系统进行干预以及了解应用系统运行状态所设置的通道。
主要有键盘、显示器等通道接口。
在单片机应用系统中,为了控制系统的工作状态以及向系统中输入数据,应用系统设置键盘,用于系统复位,功能转换以及数字输入。
键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序、置数、送操作命令、控制程序的执行走向等。
在本次设计中键盘由P1口输入,按键设置:
1~4四个数字键,A~F六个功能键。
数字键(1~4):
用于输入1~4共4首乐曲的序列号。
功能键(A~F):
A键:
乐曲从1~4按顺序播放
B键:
乐曲从1~4循环播放
C键:
循环播放某一乐曲
D键:
从某一乐曲开始播放至最后一首乐曲
E键:
暂停/播放
F键:
停止播放
各功能键(A~F)的意义与操作:
A键:
乐曲从1~4按顺序播放。
当用户按下A键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动播放预先设定的1~4共4首乐曲,全部乐曲播放完毕则停止。
乐曲从1~4循环播放。
当用户按下B键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。
当用户按下C键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器对选定的某一乐曲循环播放。
当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放,直到乐曲播放完毕则停止。
暂停/播放。
当用户按下E键时,简易自动乐曲播放器打断正在播放的某一乐曲,用户再次按下E键时,该乐曲继续播放。
停止播放。
当用户按下F键时,简易自动乐曲播放器终止正在播放的某一乐曲。
本设计中按键作为输入部分,由P1口输入。
4.3LED显示接口电路的设计
在单片机应用系统中,使用的显示器主要有LED显示器(发光二极管显示器)。
这种显示器成本低廉,配置灵活,与单片机接口方便。
在本系统的设计中采用LED显示器。
LED显示器由8位LED数码管组成,用于显示系统在各种不同条件下的状态。
用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态显示,按译码方式分为硬件译码和软件译码。
静态显示是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后不再控制LED,直到下次显示时再传送一次新的显示数据。
静态显示的数据稳定,占用CPU时间少。
动态显示要CPU时刻对显示器件进行数据刷新,显示数据会有闪烁,占用的CPU时间多。
这两种显示方式各有利弊:
静态显示虽然数据显示稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;
动态显示虽然闪烁,占用的CPU时间多,但使用的硬件少,能节省线路板空间。
在本设计中由于显示部分比较简单,所以选用了静态显示方式,LED显示器由74LS373来驱动,为了扩展外部存储器需一块74LS373(地址锁存器)。
LED发光器件一般常用的有两类:
数码管和点阵。
常用的数码管一般为8字型数码管,分为A、B、C、D、E、F、G、DP八段,其中DP为小数点。
数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数码管的公共端,两根之间相连通。
数码管从电路上来看可分为共阴和共阳两种,在本设计中用了共阳的LED。
4.4扬声器控制电路的设计
扬声器控制电路用于发出不同频率的音调,是在P3.0口加一反相器再连接到喇叭这样就可够成。
4.5硬件原理图
通过以上分析,本次设计的音乐播放器的电路原理图如图4-4所示。
图4-4音乐播放器的原理图
第5章音乐播放器的软件设计
软件设计的重点在于定时中断的设计、键盘控制、显示的实现、乐曲的演奏等方面。
5.1主控软件的设计与流程图
主模块是系统软件的框架。
本系统的主模块的程序框图可用图5-1来表示。
主控模块用于控制系统的工作。
该模块先初始化,接着接受到复位信号后读取键盘信号,再调用各键子程序。
图5-1主控模块的流程图
主控程序主要源程序代码如下:
START:
MOVSP,#60H
MOVTMOD,#11H
MOVIE,#8AH
MOVIP,#08H;
T1中断优先于T0中断
MOVTH1,#3CH
MOVTL1,#0BH;
以上为系统初始化,T=50ms
W1:
MOVP2,#10001110B;
等待提示"
F"
LCALLGETKEY
CJNEA,#0FFH,W1
MOVA,B
CJNEA,#0AH,W2
LCALLKEY_A;
输入键是'
A'
转KEY_A
SJMPW1
W2:
CJNEA,#0BH,W3
LCALLKEY_B;
B'
转KEY_B
W3:
CJNEA,#0CH,W4
LCALLKEY_C;
C'
转KEY_C
W4:
CJNEA,#0DH,W5
LCALLKEY_D
SJMPW1;
D'
转KEY_D
5.2定时中断服务子程序的设计与流程图
定时器T0用于产生不同频率的音阶,如图5-2为定时器T0的中断服务子程序。
而定时器T1控制延时来实现不同的节拍,定时时间设定为50ms,图5-3为定时器T1的中断服务子程序。
图5-2定时器T0的中断服务流程图
图5-3定时器T1中断服务流程图
其程序如下所示
INT_T0:
CLRTR0;
定时器0中断子程序
MOVTL0,20H
MOVTH0,21H
CPLP3.0
SETBTR0
RETI
INT_T1:
CLRTR1;
定时器1中断子程序
CLRTR0
LCALLKEY_E
MOVTH1,#3CH
MOVTL1,#0BH
DJNZ60H,OUT
MOV60H,#20
OUT:
SETBTR1
RETI
5.3键盘控制模块的设计与流程图
键盘控制模块分为6个功能键和读4个数字键。
下面分别介绍各个键的流程图和程序:
F键子模块
F键是用于实现系统复位
图5-4F键流程图
E键子模块
E键用于实现对乐曲的暂停和播放
图5-5E键子程序流程图
按下E键的主要源程序代码如下
KEY_E:
JBP3.1,L2;
中断键盘检测
LCALLDELAY2;
消除抖动
如果是高电平就跳到L2
JNBP3.1,$;
如果仍然是低电平就执行中断程序
MOVP2,#10000110B;
让LED显示E
L3:
JBP3.1,$;
检测低电平,直到低电平时才跳出该指令
LCALLDELAY2
JBP3.1,L3
如果再来一个高电平才跳出中断
MOVP2,R5
L2:
SETBTR0
RET
A键子模块
图5-6A键子程序流程图
A键主要源程序代码如下:
KEY_A:
LCALLMUSIC1;
乐曲《我和你》
LCALLMUSIC2;
乐曲《万水千山总是情》
LCALLMUSIC3;
乐曲《送别》
LCALLMUSIC4;
乐曲《北京欢迎您》
B键子模块
图5-7B键子程序流程图
B键主要源程序代码如下:
KEY_B:
;
B键子程序(从1~4循环播放)
T11:
LCALLKEY_A
SJMPT11
D键子模块
当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放。
图5-8D键子程序流程图
D键源程序代码如下:
KEY_D:
D键子程序(从某一乐曲开始播放,播放完后停止)
T2:
LCALLGETWORD
CJNEA,#0FFH,T2
MOVA,B
CJNEA,#00H,B1
SJMPC0
B1:
CJNEA,#01H,B2
SJMPC1
B2:
CJNEA,#02H,C3
SJMPC2
C0:
C1:
乐曲《万水千山总是情》
C2:
C3:
读数字键
读取正在播放乐曲的序号,读取键盘后消去键盘抖动接着显示和保存数据。
图5-9GETWORD子程序(读数字键0~4)流程图
读数字键主要源程序代码如下:
GETWORD:
读音乐序号子程序
S1:
JBP1.4,S2;
读1键
JBP1.4,S1
JNBP1.4,$
MOVP2,#11111001B;
显示1
MOVR5,#11111001B
MOVA,#0FFH
MOVB,#00H
5.4演奏乐曲模块的设计与流程图
演奏乐曲的流程图如图5-10所示。
图5-10演奏乐曲的流程图
演奏乐曲主要源程序代码如下:
MUSIC:
MOVR3,#00H;
音乐解码器
NEXT20:
MOVA,R3
MOVDPH,52H
MOVDPL,53H
MOVCA,@A+DPTR
MOVR2,A
JZSTOP
A