单片机音乐播放器设计报告.docx
- 文档编号:29136580
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:21
- 大小:354.08KB
单片机音乐播放器设计报告.docx
《单片机音乐播放器设计报告.docx》由会员分享,可在线阅读,更多相关《单片机音乐播放器设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
单片机音乐播放器设计报告
1.方案与论证
1.1显示电路
方案.1:
采用LED数码管来显示(电路简单,成本低);
方案.2:
采用LCD液晶显示器来显示(电路简单,成本高);
方案3:
采用TFT真彩液晶显示(电路复杂,成本高,但显示的分辨率高);
综上所述,选择方案一进行设计。
1.2时钟电路
方案.1:
选择DS1302实时时钟芯片来实现音乐播放器(时间准确,但要增加额外开销);
方案.2:
选择单片机的软件实时来实现音乐播放器(灵活性高,时间不准确);
方案.3:
选择单片机内部可编程定时器来实现音乐播放器(在不增加额外的开销前提下,时间可以做到准确)。
综上所述,选择方案三进行设计。
2.电子音乐产生原理
单片机发音原理:
单片机演奏音乐基本是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两个概念即可,也就是“音调”和“节拍”。
·音调表示一个音符唱多高的频率。
·节拍表示一个音符唱多长的时间。
下面,就此两点,阐述说明:
2.1音调
在音乐中所谓“音调”,其实就是我们常说的“音高”。
在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz,其余与其比较。
f1和f2为两个音符,当这两个音符的频率相差一倍时,也即f2=2×f1时,则称f2比f1高一个倍频程。
在音乐中1与
,2与
……,正好相差一个倍频程,在音乐学中称它相差一个八度音。
在一个八度音内,有12个半音。
以1—i八音区为例,12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。
这12个音阶的分度基本上是以对数关系来划分的。
如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
确定一个频率所对应的定时器的定时初值的方法:
以标准音高A为例:
标准音高A的频率f=440Hz,其对应的周期为:
T=1/f=1/440=2272μs因此,需要在单片机I/O端口输出周期为T=2272μs的方波脉冲,如下图所示。
图1方波脉冲
由上图可知,单片机上对应喇叭的I/O口来回取反的时间应为:
t=T/2=2272/2=1136μs此处分两种方式叙述,请比较选用,其实结果相同:
Ⅰ.这个时间t也就是单片机上定时器应有的中断触发时间。
一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
设振荡器频率为f0,则定时器的予置初值由下式来确定:
t=12×(TALL–THL)/f0式中,TALL=216=65536,THL为定时器待确定的计数初值。
因此定时器的高低计数器的初值为:
TH=THL/256=(TALL–t×f0/12)/256TL=THL%256=(TALL–t×f0/12)%256将t=1136μs代入上面两式(注意:
计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的预置初值为:
TH440Hz=(65536–1136*12/12)/256=FBHTL440Hz=(65536–1136*12/12)%256=90H根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
Ⅱ.假设单片机晶振频率f0=12Mhz,定时器在工作方式1计数脉冲值与频率的关系为:
N=FI÷2÷FR
其中N——计数值;FI——内部计时一次为1us,故其频率为1MHz;FR——要产生的频率。
其计数值的求法为:
T=65536-N=65536-FI÷2÷FR则标准音高A(频率f=440Hz)的计数值为:
T=65536-N=65536-FI÷2÷FR=65536-1000000÷2÷FR=65536-500000/440=65536-1136=64400=0FB90H下面给出C调各音符频率值和定时器定时初值:
(晶振频率f0=12Mhz,定时器在工作方式1)
表1C调各音符频率值和定时初值对照表
C调
音符
1
1#
2
2#
3
4
4#
5
5#
6
6#
7
频率
Hz
262
277
293
311
329
349
370
392
415
440
466
494
TH/TL
F88B
F8F2
F9B7
FA14
FA66
FAB9
FB03
FB4A
FB8F
FBCF
FBCF
FC0B
C调
音符
1
1#
2#
4#
5#
6#
频率
Hz
523
553
586
621
658
697
739
783
830
879
931
987
TH/TL
FC43
FC78
FCAB
FCDB
FD08
FD33
FD5B
FD81
FDA5
FDC7
FDE7
FE05
C调
音符
1
1#
2
2#
3
4
4#
5
5#
6
6#
7
频率
Hz
1045
1106
1171
1241
1316
1393
1476
1563
1658
1755
1860
1791
TH/TL
FB21
FE3C
FE55
FE6D
FE84
FE99
FEAD
FEC0
FE02
FEE3
FEF3
FF02
对于非C调的歌曲,要对各音符的频率做相应的变化
调号——音乐上指用以确定乐曲主音高度的符号。
升C调:
1=#C,也就是降D调:
1=bD;277(频率)
升D调:
1=#D,也就是降E调:
1=bE;311
升F调:
1=#F,也就是降G调:
1=bG;369
升G调:
1=#G,也就是降A调:
1=bA;415
升A调:
1=#A,也就是降B调:
1=bB。
4
所谓1=A,就是说,这首歌曲的“导”(即作为基调的中音DO)要唱得同A音符一样高,其它各音符依次向后递推,通常把这首歌曲叫做A调歌曲,或叫“唱A调”。
1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。
同样是“导”,不同的调唱起来的高低是不一样的。
在递推的时候要严格按各音符间音程关系进行(全音还是半音,只有3—4和7—i之间是半音关系,其它音之间都是全音关系),下面以1=D调进行说明。
参照上面的钢琴键盘图和表1,确定出D调各音符对应的频率值为:
(到后来制表时就以各音符对应的新频率值确定定时初值)
2.2节拍
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C
、1=G
……等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联,
、
就是用来表示节拍的。
以
为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:
其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。
1、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?
一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
若乐谱有特别说明则另行对待。
如有乐谱中注明每分钟86拍,则一拍时间为60/86s=698ms。
可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。
首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。
具体来说,Ⅰ.每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,节拍与节拍码的对照,如下表所示。
表2节拍与节拍码的对照表
节拍码
节拍数
节拍码
节拍数
1(十六分音符)
1/4拍为1DELAY
1
1/8拍
2(八分音符)
2/4拍
2
1/4拍
3
3/4拍
3
3/8拍
4(四分音符)
1拍
4
1/2拍
5
1又1/4拍
5
5/8拍
6
1又1/2拍
6
3/4拍
8(二分音符)
2拍
8
1拍
10A
2又1/2拍
A
1又1/4拍
12C
3拍
C
1又1/2拍
15F
3又3/4拍
16(全音符)
4拍
Ⅱ.以1/4拍(十六分音符)为一个基准定时单位(1DELAY),则2/4拍(八分音符)为2DELAY,1拍(四分音符)为4DELAY,2拍(二分音符)为8DELAY,4拍(全音符)为16DELAY。
1/4和1/8节拍的时间设定,如下表所示。
表3各调节拍时间设定表
1/4节拍的时间设定
1/8节拍的时间设定
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
通过上面介绍的音符音调和节拍的相关知识,以及它们在单片机系统中的确定方法,我们就可以在单片机上实现演奏音乐了。
具体的实现方法为:
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。
请注意,用单片机上实现音乐演奏关键在于,根据乐谱制作出数据表格,编程在其次,这个过程很耗费时间和精力。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH或00H,其节拍参数与其它音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
实例说明建立音乐的方法
(1)建立简谱对应的简谱码、T值及节拍数表,画在草稿纸上。
先对照歌曲的简谱把其中所有出现的音符找出,从低音到高音依次排序,确定各音的数值(编写查表程序时将此值减1,即得对应音符相对于TABL1表头的偏移量)。
对于不是C调的歌曲,要对各音符的频率做相应的变化。
对照歌曲的简谱确定各音符的节拍数相对于基准定时单位的倍数,从小到大排列。
各音符时值的倍数关系是确定不变的,关键要正确确定其值。
这需要懂一点简谱知识才能准确的确定出乐谱中音符节拍数。
以歌曲兰花草为例,如下表:
表4
简谱
发音(这一列知道就行不必写出)
简谱码
T值
节拍码
节拍数
低3
低音MI
1
64021
1
1/4拍
低4
低音FA
2
64103
2
2/4拍
低5
低音SO
3
64260
3
3/4拍
低6
低音LA
4
64400
4
1拍
低7
低音TI
5
64254
5
1又1/4拍
中1
中音DO
6
64580
6
1又1/2拍
中2
中音RE
7
64684
8
2拍
中3
中音MI
8
64777
10A
2又1/2拍
中4
中音FA
9
64820
12C
3拍
中5
中音SO
A
64898
15F
3又3/4拍
中6
中音LA
B
64968
16
4拍
中7
中音TI
C
65030
休止符
不发音
0
关定时器
注:
以四分音符为一拍,现在以1/4拍为定时的基准单位,为1DELAY。
则1拍应为4倍DELAY,依次类推。
所以只要求得1/4拍的DELAY时间,其余的节拍数就是它的倍数。
(2)把各音符频率对应的定时T值建立在TABLE1表。
各音符频率对应的定时值表TABLE1:
;
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030(3)根据第一步建立的表,建立乐曲对应音符节拍码表TABLE,其中简谱码(音符)在高4位(但是此种方法只能排16个音,若乐谱中音符较多可占一个字节来表示),节拍码(节拍数)在低4位(但此种方法也只能最大延时15个基准定时单位的时间)。
TABLE:
;歌曲兰花草的音符与节拍码表;高4位为简谱码(音符),低4位为该音符对应的节拍数DB42H,82H,82H,82H,84H,02,72HDB62H,72H,62H,52H,48HDB0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2HDB12H,0A2H,0D2H,92H,88HDB82H,0B2H,0B2H,0A2H,84H,02H,72HDB62H,72H,62H,52H,44H,02H,12H
DB12H,62H,62H,52H,44H,02H,82HDB72H,62H,52H,32H,48H
DB00H
3.系统硬件设计
3.1系统总框图
电路主要由AT89C51芯片,LED发光二极管,喇叭,晶振电路组成,由引脚输出定时器产生的各种固定频率的方波信号,然后由喇叭产生各种频率的声音。
同理,方波信号通过发光二极管可以使二极管闪烁发光,产生韵律灯的效果。
由于该方案中使用内部振荡电路,XTAL1、XTAL2引脚外界石英晶体和微调电容构成的晶振电路。
图2系统框图
3.2电路设计
音乐播放器的硬件电路主要是以下8大部分:
3.2.1单片机时钟电路
图3单片机时钟电路
单片机时钟电路是用来配合外部晶体实现振荡的电路,这样可以为单片机提供运行时钟,如果运行时钟为0的话,单片机就不工作,当然超出单片机的工作频率的时钟也会导致单片机不工作。
在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。
根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。
在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。
对于外接时钟电路,要求XTAL1接地,XTAL2脚接外部时钟,对于外部时钟信号并无特殊要求,只要保证一定的脉冲宽度,时钟频率低于12MHz即可。
晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。
时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。
CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。
3.2.2.复位电路
图4复位电路
复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。
单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。
在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。
所以可以通过按键的断开和闭合在运行的系统中控制其复位。
在电路图中,电容的的大小是10uF,电阻的大小是10k。
所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。
也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。
这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。
所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。
在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。
所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
3.2.3.电源电路
图5电源电路
电源电路是指提供给用电设备电力供应的电源部分的电路设计,使用的电路形式和特点。
电源有交流电源也有直流电源。
直流电源电路分为开关电源和非开关电源两种形式,电路也大不相同。
开关电源一般不使用变压器;非开关电源是传统的设计方式,电源电路里多使用变压器来变压后再整流滤波的方式。
几个组件通过导线互相连接,形成“电路”,也可以称为“网络”。
更特定地,电路是可以形成闭合回路的网络。
“支路”是电路的一部分,每一个组件都有它独属的支路。
任意两条或多条支路的相交点,称为“节点”。
几个组件通过导线互相连接,形成“电路”,也可以称为“网络”。
更特定地,电路是可以形成闭合回路的网络。
3.2.4.USB程序下载电路
图6USB下载电路
USB即“UniversalSerialBus”,中文名称为通用串行总线。
这是近几年逐步在PC领域广为应用的新型接口技术。
USB接口具有传输速度更快,支持热插拔以及连接多个设备的特点。
目前已经在各类外部设备中广泛的被采用。
目前USB接口有两种:
USB1.1和USB2.0。
USB接口的输出电压为直流5V,输出电流不大于500毫安。
PC机的USB接口可以连接外设、复合设备和集线器。
最多可以连接5级集线器,最多可连接127台外设和集线器。
USB1.1的高速模式为12Mb/s,低速模式为1.5Mb/s。
USB采用半双工传输方式。
但当一个USB连接多个设备时,各个设备共享12Mb/s的传输带宽。
在传输的信息中还携带有状态、控制和差错校验信息,实际的信息传输速率要低一些,只连接一台设备时,最高有效传输速率约为9.6Mb/s。
USB2.0的最高传输速率为480Mb/s。
)USB采用平衡传输方式,抗干扰性好。
USB带纠错能力,可完成对软件透明的检错和重发。
3.2.5.蜂鸣器驱动电路
图7蜂鸣器驱动电路
蜂鸣器是一种一体化结构的电子讯响器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
S51增强型单片机实验板通过一个三极管C8550来放大驱动蜂鸣器,原理图见下面图3:
蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。
3.2.6.显示电路
本设计显示是采用液晶显示器LCD1602进行显示,LCD1602的功能、P0口是一个地址/数据复用的双向I/O口,当使用P0口访问外部存储器和数据存储器时,P0口内部已有上拉电阻,当P0口作程序检验,输出指令字节时,必须外界上拉电阻。
LCD1602的控制信号RS、RW、E分别接到单片机的P2.0、P2.1、P2.2。
本设计中主要用LCD1602显示开机画
图8液晶显示
3.2.8矩阵电路
采用4*4行列式键盘来实现选择歌曲播放,以及对歌曲号做基本的操作,即上一曲、下一曲以及暂停/播放。
图8矩阵电路
4.系统软件设计
本设计采用了自定义下的流程图。
主要程序流程有:
主程序、判断有无按键子程序、键盘扫描子程序、显示键号/歌曲号子程序、开机画面子程序、按键值播放歌曲子程序等。
程序中使用了两个定时中断,定时中断0用于产生整个音程的频率,以便驱动扬声器。
程序的总体流程是当P1由按键按下时,读键盘,并储存键值,若为F键则通过查表的方式,调用字符串下手键号/曲目子程序,将键号显示出来。
若为1-A,程序根据储存的键号,将相应歌曲的表头地主赋给DPTR,取出曲谱,判断是否为休止符,通过查表的方式将表中的定时器初值装入定时器T0,在定时中断0里面,重装初值,将输出口取反,完成发声。
在此设计中,每发一个调,调用一个30MS的延时,一次当做曲谱的节拍码。
在此过程中若有功能键按下,将当前歌曲的表头地址加513/减513或等待。
于此同时调用播放时间初始化子程序,显示00:
00:
00,装定时器T1的初值,准备更新播放时间。
程序流程如图9所示。
5.总结与展望
通过这几天的单片机的实训,我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己的动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,学会了如何制作单片机应用程序,并且可以在今后的日常生活中灵活运用。
在单片机音乐播放器的制作过程中,在设计中因为牌组的方向出现错误,导致电路无法连接成功,但是经过修改正确后,效果还是比较理想。
也说明动手能力还有不足,仍有待提高。
现将本次的设计总结如下:
5.1加深了对16位单片机结构和原理的了解;
5.2基本掌握了用AltiumDesingerSummer09、Keiluvision4、Protues7Profession、MicrosoftVisio的制图的方法;
5.3再次温习数字电路与模拟电路,提高了分析电路原理图的能力,综合了解了不同的使用与制图方法、总结了分析电路原理的方法;
5.4遇到不懂时,多动脑、多看、多听。
虚心接受别人给予的意见但不改变自己的初衷。
在肯定成绩的同时也要指出缺点和不足。
5.5今后,我会更加努力学习,认真掌握老师所讲的知识,勤动脑,勤动手。
相信有一天,我会以优秀的成绩来回报老师、回报学校、回报社会。
6.参考文献
[1]侯玉宝,陈忠平,李成群.基于Proteus的51系列单片机设计与仿真[M].北京电子工业出版社,2008
[2]沈德金,陈粤初.MCS-51系列单片机接口电路与应用程序实例[M].北京航空航天大学出版社,1990
[3]胡汉才.单片机原理及接口技术[M].清华大学出版社,1996
[4]何立民.MCS-51系列单片机应用系统设计[M].北京航空航天大学出版社,1990.1
[5]张毅刚、彭喜元、姜守达、乔立岩.新编MCS-51系列单片机应用设计[M].哈尔滨工业大学出版社,2003.6
附录
附录1系统总电路
附录2源代码
#include
sbit speaker=P1^2; //定义音乐输出端口,需要连接到对应的喇叭,请参考电路图unsigned char timer0h,timer0l,time;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 音乐 播放 设计 报告