单片机课程设计数字音乐盒的设计.docx
《单片机课程设计数字音乐盒的设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字音乐盒的设计.docx(23页珍藏版)》请在冰点文库上搜索。
单片机课程设计数字音乐盒的设计
数字音乐盒的设计
摘要
本设计采用了扬声器发声来实现歌曲的播放,能保持基本音调不变,流畅播放出歌曲。
现选用AT89C51单片机。
用PROTEUS单片机仿真软件仿真。
利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
通过单片机P1口控制,实现功能键盘控制;功能键盘采用按键开关,通过单片机P2口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由单片机的P3口控制,实现歌曲播放;主要工作过程是通过按下功能键实现上一首和下一首及暂停播放,同时有液晶屏显示当前播放歌曲的序号,扬声器播放出音乐。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。
关键词:
AT89C51单片机,方波,音调
1绪论
1.1设计简述
本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。
与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。
电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。
基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。
所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。
另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富。
1.2设计目的
为了更好地熟悉和掌握单片机的基本功能和编程,我们以AT89C51为基础设计电子音乐盒。
AT89C51单片机电子音乐盒集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者所用。
同时,电子音乐盒的设计具有很重要的现实意义。
我们根据学习和实践的需要,进行了电子音乐盒功能设计。
我们在制作电子音乐盒的过程中会学习到很多的东西,能够最大限度的了解我们自制的这一个单片机电子音乐盒,这样以后调试程序的时候便得心应手,效率要提高很多。
1.3主要问题
制定音乐盒控制系统需要完成功能,并根据此来制定设计方案;根据设计方案来进行硬件电路图的设计和软件模块的开发;通过仿真调用后再来反复修改程序,最终达到预期功能。
1.4技术指标
1系统要有一定稳定性,不易受外界干扰的影响。
2系统采用外部或内部+5V供电。
3实现音乐盒播放音乐的控制。
4LCD来显示歌曲序号的功能。
5.通过按键选择增加上一首、下一首、暂停/播放功能。
2设计方案简述
2.1设计功能要求
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)
2.采用LCD显示信息.
3.开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)
4.可通过功能键选择乐曲,暂停,播放。
5.选作内容:
显示乐曲播放时间或剩余时间
2.2总体设计原理
通过单片机的定时器产生一定长度的方波,方波脉冲驱动扬声器发声。
要产生音频脉冲,只需算出某一音频的周期(1/音频),然后取半周期的时间定时。
利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。
如中音D0,频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时1912/2=956,在每计数956次时将I/O口反相,就可得到中音D0(523HZ)【1】。
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,在LCD显示歌曲号。
通过单片机P1口控制,实现功能键盘的功能;功能键盘采用按键开关,通过单片机P2口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由单片机的P3口控制,实现歌曲播放。
通过按下功能键实现上一首和下一首及暂停播放,同时有LCD显示当前播放歌曲的序号,扬声器播放出音乐【2】。
2.3总体设计框图
图1总体设计框图
3硬件电路设计
3.1硬件电路
本设计中用到了AT89C51单片机,4*4键盘,蜂鸣器,16*2LCD等硬件电路常用元器件。
3.2时钟复位电路
时钟电路由单片机XTAL1、XTAL2引脚外接晶振(12MHz)及起振电容C1、C2(均为30pf)组成如图2
图2时钟复位电路
3.3按键输入电路
按键输入电路由4*4矩阵键盘组成,P1口作为输入控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。
3.4输出显示电路
用P2.0~P2.2作为LCD的RS、R/W、E的控制信号;用P0.0~P0.7作为LCD的D0~D7的控制信号【3】。
由于P0口作为输出,应加上拉电阻。
用P3.7口控制蜂鸣器。
输出显示电路如图3所示
图3输出显示电路
3.5整体硬件电路
整体硬件电路如图4所示
图4整体硬件电路
3.6原理说明
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
(1) 硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列【4】;
(2) 用P2.0~P2.2作为LCD的RS、R/W、E的控制信号;
(3)用P0.0~P0.7作为LCD的D0~D7的控制信号;
(4) 用P3.7口控制蜂鸣器;
(5) 电路为12MHz晶振频率工作,起振电路中C1,C2均为30pf【5】。
3.7键盘按键
键盘按键分布如下:
表1键盘按键分布表
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
按键功能说明:
表2按键功能说明表
1—A
十首歌曲
C
下一首歌曲
D
上一首歌曲
E
暂停
F
开机画面
F
开机画面
4软件设计
4.1设计源程序代码(见附录)
4.2程序设计流程图
程序设计流程图如图5所示
图5程序设计流程图
5仿真
(1)点击运行按钮之后,电路上电,按下F键,LCD上得到开机画面,显示开机字符“WELCOMHERE”及当前作用键F,如图6所示
图6开机画面显示图
(2)按下1-A中的某一按键,LCD显示当前作用按键(当前播放音乐的标号)并显示该音乐播放的时间,同时,蜂鸣器播放当前乐曲。
LCD显示如图7所示(以按下5键为例):
图7LCD显示图
(3)按下C键,则LCD显示由当前乐曲跳转到下一首,蜂鸣器响起下一首乐曲。
如图8所示:
当前显示C键动作后
图8乐曲跳转下一曲显示图
(3)按下D键,则LCD显示由当前乐曲跳转到上一首,蜂鸣器响起上一首乐曲。
如图9所示:
当前显示D键动作后
图9乐曲跳转上一曲显示图
(4)按下E键,则蜂鸣器停止当前音乐的播放,而且LCD上播放的时间也停留在当前,再次按下E键后,音乐继续播放,播放时间继续计时【7】。
如图10所示:
当前显示E键动作后
图10E键动作效果图
6设计结果及分析
本文描述了电子音乐盒的硬件和软件制作方案,总体符合预期要求,能够成功实现按1-A按键能演奏不同的乐曲的基本功能,并添加了通过按键控制上一首,下一首,暂停/播放的功能。
在播放乐曲的过程中,还增加了显示歌曲演奏时间的功能。
另外,采用了液晶显示技术,简化了硬件电路,还能显示英文的开机画面等【8】。
当然,此设计还存在很多不足有待改进的地方
1.可以添加一个彩灯按照乐曲频率闪烁功能,增添趣味。
2.可以添加键盘输入乐曲功能,把电子琴和音乐盒结合起来。
总体来说本次课程设计基本完成,但还有部分可以完善。
总结
音乐盒设计是一项趣味性很强的设计,能激发我的浓厚兴趣。
同时要求我从程序编程,调试,软件仿真和绘制开始,到硬件的焊接和调试,再到修改程序,在这期间我了解到了单片机开发的大致流程。
通过这次毕业设计,也让我学习到了很多新的东西,这些都让我受益匪浅。
单片机的定时器功能,LCD显示,功能键盘的设计,这些内容都颇为丰富。
有以前学习过的旧知识,也有很多未曾注意到得新知识,这些都曾使我的设计出错,通过自己的努力,老师指导和同学的帮助,终于克服了一个一个的困难,把硬件仿真顺利做好,把软件调试顺利完成。
最后,衷心感谢这次对我的毕业设计提供无私帮助的所有老师和同学!
致谢
经过近二个星期的忙忙碌碌,这次的单片机课程设计已经快要接近尾声了。
在这次的单片机课程设计过程中,无论是在理论学习阶段,还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许多人的悉心的指导和帮助。
首先,借此机会我向我们的单片机授课教师及课程设计指导老师付瑞玲老师表示衷心的感谢,付老师的悉心指导和帮助,是我顺利完成本次课程设计的基础和前提。
同时,我要感谢授课的各位老师,正是由于他们的传道、授业、解惑,让我学到了专业知识,并从他们身上学到了如何求知治学、如何为人处事。
另外,感谢各位同学的帮助和勉励。
同窗之谊和手足之情,我将终生难忘!
我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有老师、同学和朋友。
参考文献
[1]胡汉才.单片机原理与接口技术[M].北京:
清华大学出版社,1995.6.
[2]楼然苗等.51系列单片机设计实例[M].北京:
北京航空航天出版社,2003.3.
[3]何立民.单片机高级教程[M].北京:
北京航空航天大学出版社,2001.3.
[4]赵晓安.MCS-51单片机原理及应用[M].天津:
天津大学出版社,2001.3.
[5]肖洪兵.跟我学用单片机[M].北京:
北京航空航天大学出版社,2002.8.
[6]夏继强.单片机实验与实践教程[M].北京:
北京航空航天大学出版2001.4.
[7]于凤明.单片机原理及接口技术[M].北京:
中国轻工业出版社.1998.5.
[8]陈伟人.单片微型计算机原理与应用[M].北京:
清华大学出版社,2006.5.
附录
程序代码:
RSBITP2.0;定义液晶显示端口标号
RWBITP2.1
EBITP2.2
ORG0000H
LJMPMAIN
ORG000BH
LJMPTT0
ORG001BH
LJMPT1INT
ORG1000H
MAIN:
;-----------------------;液晶初始化
MOVSP,#70H
MOVP0,#01H ;清屏
CALLENABLE
MOVP0,#38H ;8位,2行显示
LCALLENABLE
MOVP0,#0FH ;屏显ON,光标ON,闪烁ON
LCALLENABLE
MOVP0,#06H ;计数地址加1,显示幕ON
LCALLENABLE
;------------------------内存初始化
LCALLINITIL
;------------------------------
KEY1:
LCALLKEY
LCALLMODD
LJMPKEY1
;---------------------键盘扫描
KEY:
NOP
NOP
LCALLKS
JNZK1 ;有按键转到K1
LCALLKAIJI
LCALLSOP
XN:
LJMPKEY
K1:
LCALLMODD
LCALLMODD
LCALLKS
JNZK2
LJMPKEY
K2:
MOVR2,#0FEH ;读键盘
MOVR4,#00H
K3:
MOVA,R2
MOVP1,A
MOVA,P1
JBACC.4,L1 ;为1跳转,第一行无按键
MOVA,#00H
LJMPLK
L1:
JBACC.5,L2
MOVA,#04H
LJMPLK
L2:
JBACC.6,L3
MOVA,#08H
LJMPLK
L3:
JBACC.7,NEXT1
MOVA,#0CH
;----------------------------------
LK:
ADDA,R4
PUSHACC
K4:
LCALLDELAY1;若同时有其他键,则等待
LCALLKS
JNZK4
;----------------------------------
MOVR3,#07H
CLRA
MOVR0,#30H
MOVR1,#31H
MM1:
MOVA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR3,MM1
POPACC
MOV@R0,A
RET
;---------------------------------
NEXT1:
INCR4 ;------列扫描
MOVA,R2
JNBACC.3,N2
LJMPN1
N2:
LJMPKEY
N1:
RLA
MOVR2,A
LJMPK3
;----------------------------------
KS:
MOVA,#0F0H ;判断P1口
MOVP1,A
NOP
NOP
MOVA,P1
CPLA
ANLA,#0F0H
RET
;-------------------------------
DELAY1:
SETBRS0
DL:
MOVR5,#0AH
DL2:
MOVR6,#63
DL3:
NOP
NOP
DJNZR6,DL3
DJNZR5,DL2
CLRRS0
RET
;30H-37H初值为零
;---------------------------------
INITIL:
MOVR3,#08H
MOVR0,#30H
M1:
MOV@R0,#00H
INCR0
DJNZR3,M1
RET
;----------------------------------
;显示
;----------------------------------
MODD:
MOVP0,#8EH
LCALLENABLE
MOVA,37H
MOVDPTR,#TABLE3
MOVCA,@A+DPTR
LCALLWRITE2
RET
;----------------------------------
;开机提示字
;----------------------------------
KAIJI:
MOVA,37H
CJNEA,#0FH,DFF
MOVP0,#80H ;设光标地址
LCALLENABLE
MOVDPTR,#TABLE1;写数据
LCALLWRITE1
DFF:
RET
;----------------------------------
;按键值播放歌曲
;----------------------------------
SOP:
MOVA,37H
CJNEA,#01H,A11
LCALLMODD
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
LCALLINITILE2
LCALLMAIN0
A11:
CJNEA,#02H,A22
LCALLMODD
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
LCALLINITILE2
LCALLMAIN0
……
AAA:
RET
;*******************************
INITILE2:
MOVL50MS,#20
MOVL1MS,#00H
MOVL250MS,#00H
MOVSEC,#00H
MOVMIN,#00H
MOVHOU,#00H
MOVA,HOU
MOVB,#10
DIVAB
ADDA,#30H ;将BCD吗转化为ASIIC码
MOVP0,#0C8H ;显示小时十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0C9H ;显示小时个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0DH ;显示冒号
CALLENABLE
CALLWRITE2
MOVA,MIN
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CBH ;显示分十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CCH ;显示分个位
CALLENABLE
CALLWRITE2
MOVA,#3AH
MOVP0,#0CDH ;显示冒号
CALLENABLE
CALLWRITE2
MOVA,SEC
MOVB,#10
DIVAB
ADDA,#30H
MOVP0,#0CEH ;显示秒十位
CALLENABLE
CALLWRITE2
MOVA,B
ADDA,#30H
MOVP0,#0CFH ;显示秒个位
CALLENABLE
CALLWRITE2
MOVP0,#0C0H ;设光标地址
CALLENABLE
MOVDPTR,#TABLE2;写数据
CALLWRITE1
RET
;**************************写指令
ENABLE:
CLRRS
CLRRW
CLRE
LCALLDELAY
SETBE
RET
;***************************写数据
WRITE1:
MOVR1,#00H
A1:
MOVA,R1
MOVCA,@A+DPTR
CALLWRITE2
INCR1
CJNEA,#0FEH,A1 ;未到字符串末尾继续
RET
WRITE2:
MOVP0,A
SETBRS
CLRRW
CLRE
CALLDELAY
SETBE
RET
;-------------------------
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
TAB1:
DB89H,86H,0C7H,0C7H,0C0H
TAB2:
DB0C6H,88H,0C0H
TABLE1:
DBWELCOMHERE,0FEH
TABLE2:
DBDFFWB,0FEH
TABLE4:
DBCAU,0FEH
TABLE3:
DB30H,31H,32H,33H
DB34H,35H,36H,37H
DB38H,39H,41H,42H
DB43H,44H,45H,46H
;-----------------------------
;播放歌曲程序
;-------------------------------
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
SETB TR1
W1:
LCALLDELAY30
INC40H
LCALLKS ;有键跳出
JNZSTOP
LJMPNEXT20
;-----------------------
STOP:
CLRTR0
CLRTR1
LJMPMAIN0
;-------------------------
TTM12:
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM13
CLRTR1
LCALLDELAY1
TTM120:
LCALLKS
LCALLDELAY1
JZTTM120
LCALLK2
MOVA,37H
CJNEA,#0EH,TTM120
SETBTR1
LJMPNEXT20
TTM13:
CJNEA,#0CH,TTM14
MOVA,52H
INCA
MOV52H,A
MOVA,53H
INCA
MOV53H,A
MOVA,36H
INCA
MOV37H,A
LJMPTTM2
TTM14:
CJNEA,#0DH,TTM2
MOVA,52H
DECA
MOV52H,A
MOVA,53H
DECA
MOV53H,A
MOVA,36H
DECA
MOV37H,A
TTM2:
RET
……
RET
;-----------------------------------
TABLE00:
DW64580,64684,64777,64820
DW64898,64968,65030,64260
DW64400,64524,65058,63835,64021
;---------------------------------
;第二首《月亮代表我的心》
;-----------------------------------
TABLE20:
DB02H,82H
DB16H,32H,54H,02H,52H
DB0A6H,32H,54H,02H,52H
DB64H,74H,0B6H,64H
DB52H,5CH,3