单片机课程设计制作音乐盒汇编代码零错误课件.docx
《单片机课程设计制作音乐盒汇编代码零错误课件.docx》由会员分享,可在线阅读,更多相关《单片机课程设计制作音乐盒汇编代码零错误课件.docx(36页珍藏版)》请在冰豆网上搜索。
单片机课程设计制作音乐盒汇编代码零错误课件
浙江理工大学
《单片机系统设计及应用实验》
设计报告
题目:
MP3音乐盒设计
专业:
机械电子工程
班级:
08机电一班
姓名:
竺冬伟黄栋明
学号:
B0837129B08370111
指导教师:
袁嫣红
机械与自动控制学院
2011年6月30日
基于AT89C51单片机的MP3音乐盒设计
【摘要】:
本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能MP3音乐盒。
本设计采用了扬声器发声来实现歌曲的播放,能保持基本音调不变,流畅播放出歌曲。
利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
通过单片机P1口控制,实现功能键盘控制;通过不同的按键实现歌曲的选择,播放顺序的调换和暂停播放功能;扬声器由单片机的P2.7口控制,实现歌曲播放;P3.0口实现发光二极管随不同频率的闪动。
主要工作过程是通过按下功能键实现曲目选择,上一首,下一首及暂停播放,同时有液晶屏显示当前播放歌曲的序号和播放时间,扬声器播放出音乐。
【关键词】:
AT89C51单片机;方波;音调;音乐盒
引言
21世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
随着科学技术的进步和社会的发展,人类所接触的信息也在不断增加并且日益复杂。
面对浩如烟海的信息,人们已经能够利用计算机等工具高效准确地对之进行处理,但要想将处理完的信息及时,清晰地传递给别人,还必须通过寻求更加卓越的显示技术来实现。
单片机技术与液晶显示技术的结合,使信息传输交流向着智能可视化方向迅速发展。
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
1绪论
1.1概述
本设计是以AT89C51芯片的电路为基础,外部加上放音设备和按键设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。
用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。
对于不同型号的单片机只需要相应的改变一下地址即可。
该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。
1.2目的意义
为了更好地熟悉和掌握单片机的基本功能和编程,我们以AT89C51为基础设计电子音乐盒。
AT89C51单片机电子音乐盒集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者所用。
同时,电子音乐盒的设计具有很重要的现实意义。
我们根据学习和实践的需要,进行了电子音乐盒功能设计。
我们在制作电子音乐盒的过程中会学习到很多的东西,能够最大限度的了解我们自制的这一个单片机电子音乐盒,这样以后调试程序的时候便得心应手,效率要提高很多。
1.3设计的概要思路
制定音乐盒控制系统需要完成功能,并根据此来制定设计方案;根据设计方案来进行硬件电路图的设计和软件模块的开发;通过在XL600上不断调试后再来反复修改程序,最终达到预期功能。
2设计方案简述
2.1设计功能要求
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(本设计中含有10首歌曲)
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)。
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,在LCD显示歌曲号。
通过单片机P1口控制,实现功能键盘的功能;功能键盘采用按键开关,通过单片机P2口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由单片机的P2.7口控制,实现歌曲播放。
通过按下功能键实现曲目选择,上一首和下一首及暂停播放,同时有LCD显示当前播放歌曲的序号,扬声器播放出音乐,八路流水灯随着不同音阶的播放产生相应的闪烁。
2.3总体设计框图
单片机接+5V电源供电,晶振电路产生单片机所需时钟信号,通过功能键产生外部中断,控制音乐盒的上一首和下一首曲目,再由I/O接口输出控制扬声器发声,LCD显示。
另外,复位电路在于营造一个程序运行的初始状态,在程序出错时,重新启动单片机工作。
编程设置好定时时间,通过编程器写入AT89C51单片机系统。
由AT89C51单片机的定时器每秒钟通过P0.0-P0.7口控制LCD显示,复位信号由按钮输入,每按下一次,系统恢复原设定状态。
3、详细设计
3.1AT89C51简介
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图3.1所示
图3.21AT89C51系列单片机
3.2时钟振荡电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF
10PF,而如果使用陶瓷振荡器建议选择40PF
10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
振荡器电路图如下:
图3.2单片机内部、外部振荡电路
3.3扬声器部分
扬声器是一种把电信号转换成声音信号的电声器件。
确切地说,扬声器的工作实际上是把一定范围内的音频电功率讯号通过换能方式转变为失真小并具有足够声压级的可听声音。
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。
3.4显示部分
本设计方案采用液晶显示屏1602作为显示器。
选用单片机的P0口作为液晶数据输入口,P2.1、P2.2分别接液晶的数据和时钟引脚。
用液晶作为显示器,极大地简化了硬件电路,同时增强了系统的显示能力。
3.5流程图
3.6硬件电路图及功能
总体硬件电路实现功能如下,如图3.5所示
1)电路中用P1口控制按键。
2)P0口控制LED,显示时间,曲目。
3)P2.7控制蜂鸣器,播放音乐。
4)P3口控制流水灯闪烁。
5)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。
4、仿真、调试
4.1仿真
(1)按照设计的硬件电路在PROTUSE上画好电路图。
(2)电路检查无误后,双击AT89C51单片机,打开编辑元件对话框如下图所示,将调试好的程序HEX文件加载到单片机上
(3)点击运行按钮后,按下F键,LCD上得到开机画面“WELCOMEHERE”的字样,如下左图所示
(4)按下1-A中的某一键,即播放该歌曲,LCD显示当前歌曲序列号,如上右图为播放第二首歌曲的画面
(5)按下C键即终止当前播放,进入下一首歌曲的播放
C键动作
(6)按下D键,蜂鸣器演奏上一首歌曲,LCD也显示上一首歌曲序列号
D键动作
(7)E键为暂停/播放键
E建动作
(8)随着音乐的播放流水灯闪烁
4.2调试
(1)按照设计的硬件电路在XL600上连好电路。
(2)在keil软件中编译程序,并且实现与硬件电路的连接。
(3)在XL600中通过不同功能的按键实现不同的功能实现曲目选择,上一首和下一首及暂停播放,同时有LCD显示当前播放歌曲的序号,扬声器播放出音乐,八路流水灯随着不同音阶的播放产生相应的闪烁。
5、课程设计总结
本文描述了电子音乐盒的硬件和软件制作方案,总体符合预期要求,能够成功实现按1-A按键能演奏不同的乐曲的基本功能,并添加了通过按键控制上一首,下一首,暂停/播放的功能和八路流水灯按照乐曲频率闪烁功能。
在播放乐曲的过程中,还增加了显示歌曲演奏时间的功能。
另外,采用了液晶显示技术,简化了硬件电路,还能显示英文的开机画面等。
总体来说本次课程设计基本完成。
当然,此设计过程中碰到了很多问题。
如:
1、刚开始LCD显示的时间不正确,走了几秒之后直接跳到分位。
经过查阅资料之后,了解到是由于设置的延时时间和LCD编码的不同造成的,略作修改之后得到了解决。
2、在播放过程中,音乐的频率和走的时间略微过快,分析得这可能和单片机上不同的晶振有关。
3、在添加了八路流水灯程序之后之后,播放的音乐有时会出现颤音现象。
分析得该程序可能影响到了音乐节拍和延时程序的运行。
在将该段程序放置合适方位之后,该问题得到解决。
音乐盒设计是一项趣味性很强的设计,能激发我们的浓厚兴趣。
同时要求我们从程序编程,调试,软件仿真和绘制开始,到硬件的调试,再到修改程序,在这期间我们了解到了单片机开发的大致流程。
通过这次课程设计,也让我们学习到了很多新的东西,这些都让我们受益匪浅。
单片机的定时器功能,LCD显示,功能键盘的设计,这些内容都颇为丰富。
有以前学习过的旧知识,也有很多未曾注意到得新知识,这些都曾使我们的设计出错,通过自己的努力,老师指导和同学的帮助,终于克服了一个一个的困难,把硬件实物顺利做好,把软件调试顺利完成。
最后,衷心感谢这次对我们的课程设计提供无私帮助的所有老师和同学!
参考文献
[1]阎石.数字电子技术基础.北京:
高等教育出版社,1998
[2]陈明荧.MCS-51单片机课程设计实训教程.北京:
清华大学出版社,2004.3
[3]张俊谟.单片机中级教程-原理与应用.北京:
北京航空航天大学出版社,2006
[4]黄菊生.单片机原理与接口技术.北京:
国防工业出版社2007.09
[5]杨西明、朱骐主.单片机编程与应用入门.北京:
机械工业出版社2004.06
[6]徐爱钧单片机原理实用教程(基于Proteus虚拟仿真).北京:
电子工业出版社2009.01
附录1电路图
音乐盒硬件电路图
附录2源程序
;-------------------;定义液晶显示端口标号
RSBITP2.0;LCD寄存器选择信号
RWBITP2.1;LCD读/写选择信号
EBITP2.2;LCD使能信号
;********************************************
L50MSEQU60H;把60H单元格赋值给L50MS
L1MSEQU61H;把61H单元格赋值给LIMS
L250MSEQU62H;把62H单元格赋值给L250MS
HOUEQU63H;把63H单元格赋值给HOU
MINEQU64H;把64H单元格赋值给MIN
SECEQU65H;把65H单元格赋值给SEC
;*******************************************
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-38H初值为零
;----------------------------------------------------
initil:
movr3,#09h
movr0,#30h
m1:
mov@r0,#00h
incr0
djnzr3,m1
RET
;----------------------------------------------------
;显示
;---------------------------------------------------
modd:
MOVP0,#8EH
CALLENABLE
movA,37H
movDPTR,#TABLE3
MOVCA,@A+DPTR
CALLWRITE2
RET
;-------------------------------------------------
;开机提示字
;-------------------------------------------------
kaiji:
mova,37h
cjnea,#0fh,DFF
MOVP0,#80H;设光标地址
CALLENABLE
MOVDPTR,#TABLE1;写数据
CALLWRITE1
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
A22:
CJNEA,#03H,A33
LCALLMODD
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
LCALLINITILE2
lcallMAIN0
A33:
CJNEA,#04H,A44
LCALLMODD
MOV52H,#HIGHTABLE40
MOV53H,#LOWTABLE40
LCALLINITILE2
lcallMAIN0
A44:
CJNEA,#05H,A55
LCALLMODD
MOV52H,#HIGHTABLE50
MOV53H,#LOWTABLE50
LCALLINITILE2
lcallMAIN0
A55:
CJNEA,#06H,A66
LCALLMODD
MOV52H,#HIGHTABLE60
MOV53H,#LOWTABLE60
LCALLINITILE2
lcallMAIN0
A66:
CJNEA,#07H,A77
LCALLMODD
MOV52H,#HIGHTABLE70
MOV53H,#LOWTABLE70
LCALLINITILE2
lcallMAIN0
A77:
CJNEA,#08H,A88
LCALLMODD
MOV52H,#HIGHTABLE80
MOV53H,#LOWTABLE80
LCALLINITILE2
lcallMAIN0
A88:
CJNEA,#09H,A99
LCALLMODD
MOV52H,#HIGHTABLE90
MOV53H,#LOWTABLE90
LCALLINITILE2
lcallMAIN0
A99:
CJNEA,#0AH,AAA
LCALLMODD
MOV52H,#HIGHTABLE100
MOV53H,#LOWTABLE100
LCALLINITILE2
lcallMAIN0
AAA:
RET
;******************************************
INITILE2:
MOVL50MS,#20
MOV