设计题目基于AT89C52单片机的音乐盒的设计.docx
《设计题目基于AT89C52单片机的音乐盒的设计.docx》由会员分享,可在线阅读,更多相关《设计题目基于AT89C52单片机的音乐盒的设计.docx(27页珍藏版)》请在冰豆网上搜索。
![设计题目基于AT89C52单片机的音乐盒的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/23/58ccc20a-5923-4e81-b9ca-eabfd8355e93/58ccc20a-5923-4e81-b9ca-eabfd8355e931.gif)
设计题目基于AT89C52单片机的音乐盒的设计
《单片机原理及应用》课程设计说明书
设计题目:
基于AT89C52单片机的音乐盒的设计
学院:
专业班级:
设计者:
学号:
指导老师:
目录
摘要…………………………………………………………………4
第1章概述……………………………………………………………5
第2章音乐盒的发音原理……………………………………………6
2.1播放音乐的原理……………………………………………6
2.2音符频率的产生……………………………………………6
2.3节拍频率的产生……………………………………………8
第3章硬件电路设计…………………………………………………9
3.1硬件电路……………………………………………………9
3.2整体硬件电路………………………………………………10
3.3原理说明…………………………………………………10
3.4键盘按键…………………………………………………10
第4章软件设计………………………………………………………11
4.1程序设计流程………………………………………………11
4.2设计源程序代码……………………………………………12
第5章仿真及调试……………………………………………………16
5.1调试………………………………………………………16
5.2仿真………………………………………………………16
5.3程序调试中出现的问题及解决的办法………………………17
第6章设计小结………………………………………………………18
附录元件清单…………………………………………………19
基于AT89C52单片机的音乐盒的设计
【摘要】:
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。
【关键词】:
音乐盒;单片机
第1章
概述
传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。
但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。
水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。
另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。
本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。
与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。
电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。
基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。
所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。
另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富,如图1-1所示。
图1-1单片机音乐盒功能框图
第2章音乐盒的发音原理
2.1播放音乐的原理
发音原理:
播放一段音乐需要的是两个元素,一个是音调,另一个是音符。
首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。
对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。
另外,音符的频率有所不同。
基于上面的内容,这样就对发音的原理有了一些初步的了解。
音符的发音主要靠不同的音频脉冲。
利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。
只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2.2音符频率的产生
音符及定时器初始值:
例如:
中音1(do)的音频=523HZ,周期T=1/523s=1912
定时器/计数器0的定时时间为:
T/2=1912/2
=956
定时器956
的计数值=定时时间/机器周期=956
/1
=956(时钟频率=12MHZ)
装入T0计数器初值为65536-956=64580
将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。
将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。
下表2-1是C调各音符频率与计数初值T的对照表:
表2-1C调各音符频率与计数初值T的对照表
音符
频率(Hz)/初值(
)
音符
频率(Hz)/初值(
)
低1DO
262/63627
中1DO
523/64580
高1DO
1042/65056
低2RE
294/63835
中2RE
589/64687
高2RE
1245/65134
低3M
330/64021
中3M
661/64780
高3M
1318/65157
低4FA
350/64107
中4FA
700/64822
高4FA
1397/65178
低5SO
393/64264
中5SO
786/64900
高5SO
1568/65217
低6LA
441/64402
中6LA
882/64969
高6LA
1760/65252
低7SI
495/64526
中7SI
990/65031
高7SI
1967/65282
音符、音符编码及定时器初始值:
为了产生音符,必须求出音符低音5—高音5的计数初值。
例如C调的低1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1042=65056。
为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。
比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。
表2-2音符编码表
音符
音符编码
音符
音符编码
不发音
0
低5SO
1
低6LA
2
低7SI
3
中1DO
4
中2RE
5
中3M
6
中4FA
7
中5SO
8
中6LA
9
中7SI
A
高1DO
B
高2RE
C
高3M
D
高4FA
E
高5SO
F
高6LA
G
2.3节拍频率的产生
节拍的产生与编码:
音乐中的节拍用延时时间产生。
例如,1拍=0.4s,1/4拍=0.1s,以此类推。
假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。
为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表2-3和表2-4所示。
表2-3节拍数编码表
按1/4拍为一个延时时间的节拍编码与节拍对应的表
按1/8拍为一个延时时间的节拍编码与节拍对应的表
节拍编码
节拍
节拍编码
节拍
节拍编码
节拍
节拍编码
节拍
1
1/4
6
6/4
1
1/8
6
6/8
2
2/4
8
8/4
2
2/8
8
8/8
3
3/4
A
10/4
3
3/8
A
10/8
4
4/4
C
12/4
4
4/8
C
12/8
5
5/4
F
15/4
5
5/8
表2-4乐谱节拍编程时的时间延时表
乐谱节拍
1/4拍的延时时间
乐谱节拍
1/8拍的延时时间
4/4
125ms
4/4
62ms
3/4
187ms
3/4
94ms
2/4
250ms
2/4
125ms
音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。
第3章硬件电路设计
3.1硬件电路
设计中用到了AT89C52单片机,3*3键盘,蜂鸣器等硬件电路常用元器件。
3.1.1时钟复位电路
时钟电路由单片机XTAL1、XTAL2引脚外接晶振(12MHz)及起振电容C1、C2(均为30pf)组成。
如图3-1所示:
图3-1时钟复位电路
3.1.2按键输入电路
按键输入电路由3*3矩阵键盘组成,P3口作为输入控制按键,其中P3.4~P3.6扫描行,P3.0~P1.2扫描列。
图3-2按键输入电路
3.2整体硬件电路
如图3-3所示:
图3-3音乐盒硬件电路原理图
3.3原理说明:
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
(1) 硬件电路中用P3口控制按键,其中P3.0~P3.2扫描列,P3.4~P1.6扫描行;
(2) 用P1.0口控制蜂鸣器;
(3) 电路为12MHz晶振频率工作,起振电路中C1,C2均为30pf。
3.4键盘按键
键盘按键分布如下:
按键功能说明:
1—5
五首歌曲
6
上一首歌曲
7
关机
8
暂停
9
下一首歌曲
1
2
3
4
5
6
7
8
9
第4章软件设计
本程序可以实现该课程设计的基本要求,并可以通过按键播放达10首歌曲。
4.1程序设计流程
程序设计流程图如图4-1所示:
图4-1程序设计流程图
4.2设计源程序代码
ORG0000H
LJMPMAIN
ORG000BH
;定时器T0溢出中断入口地址
LJMPTT0
ORG001BH
;定时器T1溢出中断入口地址
LJMPT1INT
ORG1000H
MAIN:
MOVSP,#70H
LCALLINITIL;内存初始化
WAIT:
LCALLKEY
LJMPWAIT
KEY:
;键盘扫描
NOP
NOP
LCALLKS
JNZK1;有按键转到K1
MOVA,37H
LCALLSOP
XN:
LJMPKEY
K1:
LCALLKS
JNZK2
LJMPKEY
K2:
;读键盘
MOVR2,#0FEH
MOVR4,#00H
K3:
MOVA,R2
MOVP3,A
MOVA,P3
JBACC.4,L1
;为1跳转,第一行无按键
MOVA,#01H
LJMPLK
L1:
JBACC.5,L2
MOVA,#04H
LJMPLK
L2:
JBACC.6,NEXT1
MOVA,#07H
LK:
ADDA,R4
PUSHACC
K4:
LCALLDELAY1
LCALLKS
JNZK4
;若同时有其他按键,则等待(同时按视为无效)
MOVR3,#07H
CLRA
MOVR0,#30H
MOVR1,#31H
MM1:
MOVA,@R1;键值给37H
MOV@R0,A
INCR0
INCR1
DJNZR3,MM1
POPACC
MOV@R0,A
RET
NEXT1:
INCR4;列扫描
MOVA,R2
JNBACC.2,N2
LJMPN1
N2:
LJMPKEY
N1:
RLA
MOVR2,A
LJMPK3
KS:
MOVA,#0F0H;判断P1口
MOVP3,A
NOP
NOP
MOVA,P3
CPLA
ANLA,#0F0H
RET
DELAY1:
;延时2.55ms63×4×1us×10+10×3×1us
SETBRS0
DL:
MOVR5,#0AH
DL2:
MOVR6,#63
DL3:
NOP
NOP
DJNZR6,DL3
DJNZR5,DL2
CLRRS0
RET
INITIL:
;30H~37H初值为零
MOVR3,#08H
MOVR0,#30H
M1:
MOV@R0,#00H
INCR0
DJNZR3,M1
CLRP1.0
RET
;按键值播放歌曲
SOP:
MOVA,37H
CJNEA,#01H,A11
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
LCALLMAIN0
A11:
CJNEA,#02H,A22
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
LCALLMAIN0
A22:
CJNEA,#03H,A33
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
LCALLMAIN0
A33:
CJNEA,#04H,A44
MOV52H,#HIGHTABLE40
MOV53H,#LOWTABLE40
LCALLMAIN0
A44:
CJNEA,#05H,A55
MOV52H,#HIGHTABLE50
MOV53H,#LOWTABLE50
LCALLMAIN0
A55:
RET
DELAY:
MOVR4,#05
D1:
MOVR5,#0FFH
DJNZR5,$
DJNZR4,D1
RET
MAIN0:
MOVTMOD,#11H;播放歌曲程序
MOVIE,#8AH
MOVTH1,#3CH
MOVTL1,#0B0H
LCALLKS
JNZTTM12
MOV40H,#00H
NEXT20:
MOVA,40H
MOVDPH,52H
MOVDPL,53H
MOVCA,@A+DPTR
MOVR2,A
JZSTOP
ANLA,#0FH
MOVR1,A
MOVA,R2
SWAPA
ANLA,#0FH
JNZSING
CLRTR0
JMPW1
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE00
MOVCA,@A+DPTR
MOVTH0,A
MOV21H,A
MOVA,22H
RLA
INCA
MOVCA,@A+DPTR
MOVTL0,A
MOV20H,A
SETBTR0
SETBTR1
W1:
LCALLDELAY30
INC40H
LCALLKS;有键跳出
JNZSTOP
LJMPNEXT20
STOP:
CLRTR0
CLRTR1
CLRP1.0
LJMPMAIN0
TTM12:
LCALLK2
MOVA,37H
CJNEA,#08H,TTM13;暂停
CLRTR1
CLRP1.0
LCALLDELAY1
TTM120:
LCALLKS
LCALLDELAY1
JZTTM120
LCALLK2
MOVA,37H
CJNEA,#08H,TTM120
SETBTR1
LJMPNEXT20
TTM13:
CJNEA,#09H,TTM14;下一曲
MOVA,52H
INCA
MOV52H,A
MOVA,53H
INCA
MOV53H,A
MOVA,36H
INCA
MOV37H,A
LJMPTTM2
TTM14:
CJNEA,#06H,TTM2;上一曲
MOVA,52H
DECA
MOV52H,A
MOVA,53H
DECA
MOV53H,A
MOVA,36H
DECA
MOV37H,A
TTM2:
RET
TT0:
PUSHACC;定时器中断子程序0
PUSHPSW
MOVTL0,20H
MOVTH0,21H
CPLP1.0;获得脉冲
POPPSW
POPACC
RETI
;定时器中断子程序1
T1INT:
MOVTH1,#3cH
MOVTL1,#0b0H
RETI
DELAY30:
MOVR7,#2
W2:
MOVR4,#125
W3:
MOVR3,#248
DJNZR3,$
DJNZR4,W3
DJNZR7,W2
DJNZR1,DELAY30
RET
TABLE00:
DW64580,64684,64777,6482;音符
DW64898,64968,65030,64260
DW64400,64524,65058,63835,64021
TABLE10:
;第一首《精忠报国》
DB66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H
DB32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98H
DB24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22H
DB12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38H
DB66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32H
DB22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52H
DB62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H
DB64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52H
DB52H,62H,7FH,74H,04H,58H,6FH
DB00
TABLE20:
;第二首《月亮代表我的心》
DB02H,82H
DB16H,32H,54H,02H,52H
DB0A6H,32H,54H,02H,52H
DB64H,74H,0B6H,64H
DB52H,5CH,32H,22H
DB16H,12H,14H,32H,22H
DB16H,12H,14H,22H,32H
DB26H,12H,94H,22H,32H
DB2CH
DB32H,52H
DB36H,22H,14H,54H
DB0ACH,92H,0A2H
DB96H,0A2H,96H,82H
DB3CH,54H
DB36H,22H,14H,54H
DB0ACH,92H,0A2H
DB16H,12H,14H,22H,32H
DB2CH,02H,82H
DB16H,32H,56H,12H
DB0A6H,32H,56H,52H
DB66H,72H,0B6H,62H
DB62H,52H,58H,32H,22H
DB16H,12H,14H,32H,22H
DB16H,12H,14H,22H,32H
DB26H,92H,0A4H,12H,22H
DB1CH
DB00
TABLE30:
;第三首《大海》
DB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H
DB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H
DB22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1CH
DB82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H
DB22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H
DB22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1CH,32H,52H
DB62H,64H,62H,64H,0B2H,62H,52H,54H,62H,54H,32H,22H
DB12H,14H,12H,14H,24H,3CH,32H,22H,12H,14H,12H,14H,0B2H,62H,52H,54H,62H,54H,32H,52H
DB66H,0B2H,0B4H,62H,52H,5CH,32H,52H,62H,64H,62H,64H,0B2H,62H,52H,54H
DB62H,54H,32H,22H,12H,14H,12H,14H,54H,3CH,32H,22H,12H,14H,12H,14H,22H,32H
DB52H,54H,32H,54H,32H,52H,6FH,04H,02H,92H,32H,24H,12H,1FH
DB00
TABLE40:
;第四首《彩云追月》
DB86H,92H,12H,22H,32H,52H,68H,63H,52H,34H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54H
DB62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52H,62H,74H,32H,52H,52H,32H
DB21H,31H,21H,11H,24H
DB32H,52H,52H,32H,22H,12H,24H,32H,52H,52H,32H,62H,52H,61H,51H
DB31H,21H,21H,31H,21H,11H,1CH
DB21H,31H,22H,23H,31H,21H,18H,02H,0B2H,0BCH,0B4H,72H,61H,51H,72H,61H
DB71H,61H,51H,61H,71H,61H,6FH
DB86H,94H,12H,22H,32H,52H,64H,62H,51H,31H,52H,21H,31H,21H,33H,62H,0B2H,0B2H,62H
DB51H,61H,51H,31H,54H
DB62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,