数字音乐盒.docx
《数字音乐盒.docx》由会员分享,可在线阅读,更多相关《数字音乐盒.docx(48页珍藏版)》请在冰点文库上搜索。
![数字音乐盒.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/99b39a61-7380-457a-a83c-06fad711513f/99b39a61-7380-457a-a83c-06fad711513f1.gif)
数字音乐盒
摘要
本设计是采用单片机为核心设计的数字音乐盒。
它可以实现音乐的播放,可以通过功能键来选择乐曲,播放或暂停,并且可以通过LCD屏幕显示正在播放的歌曲的序号,及乐曲播放时间,开机时有英文欢迎提示字符,本音乐盒可以播放十首音乐。
主控芯片采用AT89C52,采用汇编语言进行编程,编程后利用KEILC51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。
本系统功能键有一个4×4的键盘组成,其中1号到A号键是歌曲序列号键,可以直接选择音乐;C号键选择当前播放音乐的上一首音乐,D号键选择当前播放音乐的下一首音乐,E号键使音乐暂停播放,F号键显示开机画面。
键盘采用动态扫描方式。
每次扫描一行键盘,送此行低电平,读输入口的状态值,判断有没有键按下。
若有键按下,根据读入口的值选择显示值并送至显示值寄存单元,判断键值,启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。
同时启动定时器T1,计算音乐的播放的时间,并且启动LCD,在LCD上显示序号和播放时间。
在制作过程中,我发现将音乐代码的首地址送出很难实现。
因为其首地址是十六位的,而单片机中我们能用的十六位的寄存器只有DPTR,但是DPTR在下面必须要用到,所以不能用。
所以我就想把十六位地址拆成俩个八位的地址分高低位去送。
但是用#highaddr用伟福编译不通过,所以我就用直接地址#high(4000h)去送,这样就可以编译了。
关键词:
AT89C52;LM017L;SPEAKR;音乐盒
引言
乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。
实现方法有许多种,在众多的实现方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。
如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。
使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。
FPGA预装了很多已构造好的参数化库单元LPM器件。
通过引入支持LPM的EDA[1]软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。
单片机制作的八音盒弥补了这些。
第1章数字音乐盒
1.1智能音乐盒背景及意义
音乐盒的起源,可追溯至中世纪欧洲文艺复兴时期。
当时为使教会的的钟塔报时,而将大小的钟表上机械装置,被称为“可发出声音的组钟”。
1598年,意大利籍耶稣会士利玛窦第一次来到北京,随行礼物中就有八音琴一台。
这是有史书记载的最早进入中国的八音琴。
经过各种的发明创造,1780年前后,拉匀芳的瑞士人从人偶自动钟的原理获得启示,发明了一种令人赞叹的机制——机械鸟鸣钟。
1796年,日内瓦钟匠的发明,给机械音乐盒带来了革命性的改变,使音乐盒的体积缩小达到极限,而在接下来的世纪得以成功的发展。
1870年,德国的发明家首创了盘式音乐盒。
17世纪初,音乐盒的工业成为瑞士超过制表和缝制蕾丝业的第一大产业,这使得位于瑞士侏罗山边的小镇闻名于世。
1.2国内外单片机应用音乐盒概况
1992年,中国第一台具有自主知识产权的八音琴在中国宁波韵升的诞生,标志着中国,全方位地参与全球音乐盒这块巨大蛋糕的市场竞争,经过十多年的努力,韵升对八音琴的制造技术进行了更多的技术更新,取得了多个国家和地区50余项发明专利。
这使得音乐盒无论在音质,音量,谱曲,和外观设计等方面都有了更大的改进。
目前,韵升八音琴已占据全球八音琴市场份额的1/4,仅次于日本Sankyo,位居全球第二位。
音乐盒300多年的产品发展,同时也是人类文明300多年发展的历史鉴证。
每个不同时期的音乐盒造型,都能折射出当时不同的社会心态和文明发展现状,它也成了时代的一面镜子。
现今,音乐盒的制造,延袭传统,结合现代,正日益成为人们或为了典藏一段岁月,或为了收藏一份情感,或出于对音乐的追求,或对于旧时代的怀念,或为了居室的美化,等等,而得到众多品位人士的追求。
韵升八音琴店在北京东方新天地里设立了自己在北京的第一家店面,这也是惟一一家国内品牌的八音琴专卖店。
在66平方米的店面中陈设了将近120多种八音琴,只要走进去就能感受到八音琴那清澈、透亮的音质所带来的美妙享受。
在这里,八音琴的价格并不是很贵,很适合作为礼品送给自己的朋友,其中,30音的八音琴价格在500元左右,50音的八音琴价格几乎上千。
但其美观的造型博得了很多白领人士的青睐。
每个不同时期的音乐盒造型,都能折射出当时不同的社会心态和文明发展现状,它也成了时代的一面镜子。
音乐盒悠扬的乐声,经常勾起人们对美好往事的会议,甚至魂牵梦萦,坠入时光岁月的追忆中。
300多年来席卷全球市场的机械音乐盒的最大魅力也许就在于它能将抽象的音乐,凝固成具象的艺术品,成为人们表达美好情感,追思逝去年华的最佳选择。
日本文字和中国文字本身就有许多相通的地方,八音盒译成中文就是“音乐盒”,据说在中世纪的欧洲,17世纪的钟楼经过调音,可以播放音乐了。
18世纪末设计的八音是以钟声、电铃为音源,演奏比较单调的音乐,后来经过各种各样的改良,出现了圆桶八音,手动八音、人形自动八音、自动钢琴等。
1.3本文研究的主要内容
八音盒可以经常发出宜人的音乐旋律,能给生活增加不少的乐趣。
用51系列单片机设计一个音乐盒。
功能如下:
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
2.用字符型LCD显示当前播放的歌曲序号。
3.开机时有英文欢迎提示字符。
4.可通过功能键选择乐曲,暂停,播放。
5.显示乐曲播放时间或剩余时间(至少30秒)。
第2章设计方案
2.1设计方案
本次设计利用89C52单片机结合内部定时器及LCD显示器,设计一个简易的微电脑八音盒,按下单键可以演奏预先设置的歌曲旋律。
使用了文字LCD(16×2)显示目前演奏的歌曲编号,由键盘(2*4)来选择演奏歌曲;具有8个按键操作来选择演奏哪一首歌曲;演奏时可以按键中断。
内建3首歌曲旋律下单键便可以演奏歌曲;内置自动定时器,若没有按键,则自动演奏歌曲。
利用单片机定时器来产生固定频率的方波信号推动压电喇叭,发出旋律。
音阶频率及定时器初值加载的关系及设计原理及方法,及按键扫描。
在歌曲旋律设计方面采直觉式输入法,由程序中直接输入方便快速设计歌曲。
本音阶能演奏3个7度音阶,总共21个音阶。
2.2系统整体设计
如图2-1所示,本产品拟采用以AT89C52单片机为核心芯片的电路来实现,主要由AT89C522芯片、电源、文字型LCD(16×2)显示、2×4按键、蜂鸣器5部分组成。
第3章硬件电路
3.1AT89C52单片机简介
AT89C52是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,AT89C2052是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
如下图3-1所示。
图3-1AT89C52
3.2主要特性
·与MCS-51兼容
·4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.2.1管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C52的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.2.2振荡器特性
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3.2.3芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C52设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.3文字型LCD(16×2)
3.3.1LM017L说明
字符型LCD是一种通常用5*7点阵图形来显示字符的液晶显示器。
能显示的每个字符都有一个代码,代码对应字符的点阵图形数据由字符发生器产生,通过驱动电路后在LCD显示出字符。
字符型LCD有11条操作指令。
如图2-2所示。
图2-2文字型LCD(16×2)
3.3.2引脚功能
字符型LCD由14个引脚组成功能如表3-1所示。
表3-1字符型LCD引脚功能表
引脚号
符号
状态
功能
1
Vs
电源地
2
Vdd
正5V逻辑电源
3
Vo
液晶驱动电源
4
RS
输入
寄存器选择:
1.数据;0.指令
5
R/W
输入
读、写操作选择
6
E
输入
使能信号
7至14
DB0—DB7
三态
数据总线
*15
E1
输入
MDLS40466上两行使能信号
*16
E2
输入
MDLS40466下两行使能信号
3.4电路设计
3.4.1单片机时钟电路设计
单片机的每一条指令的执行都是由若干个基本的微动作组合而成的。
例如由取指令、指令译码、指令执行等微动作组合而成。
这些微动作在时间上存在着严格的先后顺序,要想这些动作有条不紊地执行,就必须有一个时间基准来同步各部件的动作。
单片机的时钟信号就是用来提供单片机内部各个微动作的时间基准。
而根据连接方式不同,时钟信号的产生有内部振荡方式和外部振荡方式两种方式。
3.4.2内部振荡方式
在单片机的XTAL1脚和XTAL2脚之间并接一个晶体振荡器就构成了内部振荡方式。
AT89C52单片机内部有一个高增益的反相放大器,XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。
在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容。
实际的内部振荡方式的电路如图2.7所示。
在图中,电容器C1、C2常称为微调电容,其作用有三个:
快速起振、稳定振荡频率、微调振荡频率。
AT89C52单片机允许外接0~33MHz的晶振,电容器C1、C2可取5pF~33pF。
一般情况下,使用频率较低的晶振时,C1、C2的容量可选大一点。
为了减少寄生电容,更好地保证振荡器稳定可靠地工作,在实际装配电路时,晶振X和电容C1、C2应尽可能地安装在XTAL1、XTAL2引脚附近。
内部振荡方式所得到时钟信号比较稳定,在实际电路中,一般是选用内部振荡方式。
所以,在本次设计中才用了该振荡方式。
图2.7内部振荡方式电路
3.4.3外部振荡方式
把外部已有的时钟信号接至XTAL1引脚,而将XTAL2悬空,这样就构成了外部振荡方式。
外部振荡方式适合于使单片机的时序与外部信号保持同步的场合。
在实际应用中,为了使进入单片机的时钟信号为TTL电平,常将外部时钟信号经过一个带有上拉电阻的TTL反相门后,再接至XTAL1引脚。
实际的外部振荡方式电路如图3-8示:
图3-8外部振荡方式电路
实际应用中,常常需要检查单片机的振荡电路是否正常工作,此时可用示波器查看XTAL2引脚上是否有正常的脉冲输出。
若有,则表明振荡电路工作基本正常,否则振荡电路失常。
由于XTAL1引脚为内部反相放大器的输入端,该引脚上的信号远比XTAL2引脚上的信号弱,因此切不可观察XTAL1引脚,否则有可能出现本来已起振的电路反而停振。
3.5单片机复位电路
复位是单片机的初始化操作。
单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
因而,复位是一个很重要的操作方式。
但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:
上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
常用的上电复位电路如下图A中左图所示。
图中电容C1和电阻R1对电源十5V来说构成微分电路。
上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能,如下图(A)中右图所示。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
常用的上电或开关复位电路如上图(B)所示。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
根据实际操作的经验,下面给出这两种复位电路的电容、电阻参考值。
上图(A)中:
Cl=10-30uF,R1=1kO
上图1.27(B)中:
C:
=1uF,Rl=lkO,R2=10kO
PS:
AVR是低电平复位,恰好相反。
3.6整体电路设计
3.6.1硬件电路图
利用Proteus软件设计八音盒硬件电路原理图如图3-4所示。
在Proteus软件中,单片机模型本身包含了工作电源和可改变的工作频率,因此在仿真时无需设计电源电路和时钟电路。
由于是利用Proteus软件进行仿真设计可以不考虑晶振电路,但在实际中需要考虑晶振电路。
本设计需要一个文字型LCD(16×2)显示播放的歌曲的序号,及乐曲播放时间,开机时有英文欢迎提示字符。
3.6.2硬件原理说明
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
也可在LED显示歌曲号。
图3-4硬件电路图
3.6.3按键电路
按键电路如图3-5所示:
P1.0-P1.7控制按键,其中P1.0-P1.1扫描行,P1.4-P1.7扫描列。
图3-5按键电路
3.6.4文字型LCD电路
如图3-6所示文字型LCD(16×2)的D0-D07端口与AT89C52端口P0.0-P0.7相连接VSS与VEE两端接地。
P2.0-P2.2作为LCD的RS,R/W,E的控制信号。
用P0.0-P0.7作为LCD的D0-D7的控制信号。
图3-6文字型LCD电路
3.6.5蜂鸣器电路
如图3-7所示用P3.0口控制蜂鸣器。
图3-7蜂鸣器电路
3.6.6按钮说明
按钮如图3-8所示:
1-3:
三首歌曲,A:
下一首歌曲,B:
下一首歌曲C:
歌曲暂停,D:
开机画面。
图3-8按钮电路
第4章软件电路设计
4.1程序流程图
根据电路可以得出流程图如图4-1所示:
主程序开始,液晶初始化、清屏、内存初始化等变量及LCD接口初始化,还有计数器T0、定时器T1初始化。
完成初始化后,LCD显示WELCOME字符。
等待按键,是否有按键按下?
若有LCD显示播放时间及歌曲号,并转到按键对应的程序执行;若无按键按下,处以等待状态。
当按键按下后相应的程序执行完,转到“等待是否有按键按下?
”处。
图4-1程序流程图
4.2音乐程序的设计原理
4.2.1建立音乐的步骤
1.先把乐谱的音符找出,然后建立T值表的顺序。
2.把T值表建立在TABLE1,构成发音符是计数值放在“TABLE”。
3.简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。
4.2.2单片机音乐的产生原理
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2.利用8052的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。
3.例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系公式如下:
N=Fi÷2÷FrN:
计数值;
Fi:
内部计时一次为1us,故其频率为12MHz;
Fr:
要产生的频率;
4.其计数值的求法如下:
T=65536-N=65536-Fi÷2÷Fr
例如:
设K=65536,F=1000000=Fi=1MHz,求低音DO(261MHz)、中音DO(523MHz)、音DO(1046MHz)的计数值。
T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1047=65059
5.C调各音符频率与计数值T的对照表如表4—1所示:
表4—1C调各音符频率与计数值T的对照表
音符
频率(Hz)
简谱码(T值)
音符
频率(Hz)
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
高1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高
1967
65283
表4-2节拍与节拍码对照
节拍码
节拍数
节拍码
节拍数
1
1/4拍
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
A
2又1/2拍
A
1又1/4拍
C
3拍
C
1又1/2拍
F
3又3/4拍