单片机数字音乐盒 1.docx
《单片机数字音乐盒 1.docx》由会员分享,可在线阅读,更多相关《单片机数字音乐盒 1.docx(56页珍藏版)》请在冰点文库上搜索。
单片机数字音乐盒1
《单片机原理与应用》大作业
题目数字音乐盒
院系
专业
姓名
班级学号
指导教师
二○一一年十二月
单片机大作业任务书
作业名称
基于AT89C51单片机的数字音乐盒
姓名
院(系)
班级
专业
学号
电话
QQ号
1、设计任务:
设计一款基于AT89C51单片机的数字音乐盒。
2、设计要求:
(1)利用单片机的I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
(2)共有10首音乐,每首乐曲都由相应的按键控制,并有开关键、暂停键、上一曲及下一曲控制键;
(3)利用LCD液晶显示歌曲的序号、播放时间,开机时显示英文欢迎提示字符。
完成时间
2011-2012学年第一学期
目录
单片机大作业任务书2
1、设计任务2
2、设计要求:
2
1概述4
1.1单片机数字音乐盒有关介绍4
1.2本设计任务6
2总体方案论证与设计7
2.1单片机的选取8
2.2系统总体结构框图8
3系统硬件设计10
3.1AT89C51芯片功能和硬件连接10
3.1.2管脚说明(如图3.1):
图3.110
3.2键盘12
3.5整体硬件电路13
4系统软件设计14
4.1主模块的设计14
4.3基本显示模块设计16
4.4系统初始化程序17
4.6程序流程图21
4.7文档顶端程序清单22
5调试结果32
5.1系统总电路图32
5.2运行结果及分析32
总结33
参考文献34
1概述
随着社会的发展和进步,许多人性化而电子产品被人们用在日常生活之中,而单片机被广泛的运用到人们长期接触的事物上,比如银行交易窗口的滚动字幕,还有各种彩灯的控制,手机、计算机、机器人等各行各业之中。
传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。
但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。
水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。
另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。
基于单片机设计制作的电子式音乐盒。
与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。
电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。
基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。
所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。
另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富。
本设计采用4*4键盘,16*2LCD。
1.1单片机数字音乐盒有关介绍
电子音乐已广泛地应用于社会生活的各个领域。
其类型从音乐卡片到CD、MP3等多种多样,制作原理也各不相同。
声音是通过振动产生的。
单片机对某一I/O引脚以一定的频率循环置1和清0,这一引脚便产生一定频率的方波,该方波通过放大后作用于扬声器便产生一定频率的声音。
若改变输出方波的频率,产生的声音也就改变了。
通过控制输出方波的时间长短,声音的长短也就得到控制。
因此,根据乐谱,单片机就可产生电子音乐。
音乐中最关键的两个要素是音符和节拍。
单片机控制的音乐发生器系统由硬件电路和软件两部分构成。
利用单片机控制的电子音乐发生器软硬件上具有独特的优点,系统的开发周期短,成本低,电路制作容易。
更换歌曲时,硬件电路无需作任何修改,只需修改软件即可实现。
软件编程时,可用51系列单片机的汇编语言或C51语言实现。
同时还可根据个人的习好通过软件改变节拍的延时时间,增加电子音乐的趣味性。
1.1.1发音原理介绍
发音原理:
播放一段音乐需要的是两个元素,一个是音调,另一个是音符。
首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。
对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。
另外,音符的频率有所不同。
基于上面的内容,这样就对发音的原理有了一些初步的了解。
音符的发音主要靠不同的音频脉冲。
利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。
只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
1.1.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以产生不同的频率。
下表1.1是C调各音符频率与计数初值T的对照表:
表1.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,
中音的THTL=65536-500000/523=64580,
高音的DTHTL=65536-500000/1042=65056。
为了方便写谱,对其进行简单的编码,在编程时,根据音符编码(表1.2)查找对应的计数初值。
比如说音乐是C调的,那么出现低音的5SO,直接将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。
表1.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
1.1.3节拍频率的产生
节拍的产生与编码:
音乐中的节拍用延时时间产生。
例如,1拍=0.4s,1/4拍=0.1s,以此类推。
假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。
为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表1.3和表1.4所示。
表1.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
表1.4乐谱节拍编程时的时间延时表
乐谱节拍
1/4拍的延时时间
乐谱节拍
1/8拍的延时时间
4/4
125ms
4/4
62ms
3/4
187ms
3/4
94ms
2/4
250ms
2/4
125ms
音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。
1.2本设计任务
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。
传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。
本设计是基于单片机控制的数字音乐盒的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机数字音乐盒。
若该设计使用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。
若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。
片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
在该设计中利用单片机I/O口产生一定频率的方波,驱动蜂鸣器,发出各种不同的音调,从而演奏乐曲,并能够由LCD显示信息。
键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。
本设计采用4*4键盘,16*2LCD,七段显示数码管LED。
在开机按钮按下时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。
在演奏过程中可通过功能键选择乐曲,暂停,播放。
2总体方案论证与设计
本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。
要求利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲,开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。
本设计采用4*4键盘,16*2LCD。
下面对各模块的设计逐一进行论证比较。
2.1单片机的选取
首先选择单片机中最为普遍的MCS51系列。
其中AT89C2051是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C2051单片机可应用于许多高性价比的应用场合。
主要性能:
●MCS-51产品兼容;
●2KB可重编程FLASH存储器(1000次);
●2.7-6V电压范围;
●全静态工作:
0Hz-24KHz
●2级程序存储器保密锁定
●128*8位内部RAM
●15条可编程I/O线
●两个16位定时器/计数器
●6个中断源
●可编程串行通道
●高精度电压比较器(P1.0,P1.1,P3.6)
●直接驱动LED的输出端口
由于完成核心功能——音频输出只需一个I/O口,并且额外功能LED移位显示可根据所选单片机的剩余I/O口进行设计,因此AT89C2051足以满足基本要求。
其20个引脚体积小巧,内部2k字节的程序存储器容量适中,低压低频工作条件,并且价格低廉容易购得。
综上,本次设计选择AT89C2051单片机。
2.2系统总体结构框图
3系统硬件设计
本设计中用到了AT89C51单片机,4*4键盘,蜂鸣器,16*2LCD等硬件电路常用元器件。
3.1AT89C51芯片功能和硬件连接
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.1.1主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.1.2管脚说明(如图3.1):
图3.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口也可作为AT89C51的一些特殊功能口,如下表所示:
管口管脚备选功能
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.1.3芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE
管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.2键盘
键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。
3.2.1键盘输入的特点
键盘实质上是一级按键开关的集合。
通常,键盘开关利用了机械触点的合、断作用。
3.2.2按键的确认
键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。
为了确保CPU对一次按键动作只确认一次按键有效,必须消除抖动的影响。
按键输入电路由4*4矩阵键盘组成,P1口作为输入控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列。
3.2.3如何消除按键的抖动
采用软件来消除按键抖动的基本思想是:
在一次检测到有键按下时,该键所对应的行线为低电平,执行一段延时10MS的子程序后,确认该行线电平是不否仍为低电平,如果仍为低电平,则确认为该行确实有键按下。
当按键松开时,行线的低电平变为高电平,执行一段延时10MS的子程序后,检测该行线为高电平,说明按键确实已经松开。
3.4音频输出部分
整个输出部分由一个蜂鸣器/喇叭组成,原理图如右图所示:
用P3.7口控制蜂鸣器。
输出显示电路如图所示:
3.5整体硬件电路
如图3.5所示:
图3.5音乐盒硬件电路原理图
3.5.1原理说明:
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。
1) 硬件电路中用P1.0~P1.7控制按键,其中P1.0~P1.3扫描行,P1.4~P1.7扫描列;
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。
3.5.2键盘按键
键盘按键分布如下:
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
按键功能说明:
1—A
十首歌曲
C
下一首歌曲
D
上一首歌曲
E
暂停
F
开机画面
4系统软件设计
4.1主模块的设计
主模块是系统软件的主框架。
结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。
它的合理与否关系到程序最终的功能的多少和性能的好坏。
本系统的主模块的程序框图如下图6所示:
图6
4.2外部中断源系统设计
在本设计中中断源是采用外部中断0方式,其入口地址是0003H。
其中断响应级别最高。
(1)定时器/计数器
工作方式寄存器TMOD用于选择定时器/计数器的工作方式和工作模式。
其格式如下表4.1:
TMOD
D7
D6
D5
D4
D3
D2
D1
D0
GATE
M1
M0
GATE
M1
M0
T1方式字段
T0方式字段
表4.1
下面表4.2对TMOD各位进行说明:
门控位—GATE
工作方式选择位—M1、M0
M1
M0
工作方式
0
0
方式0,为13位定时器/计数器
0
1
方式1,为16位定时器/计数器
1
0
方式2,8位的常数自动重新装载的定时器/计数器
1
1
方式3,仅适用于T0
表4.2
其中,在本设计中采用方式1的16位定时器/计数器。
—计数器模式和定时器模式选择位
=0,为定时器模式。
=1,为计数模式。
定时器/计数器控制寄存器TCON,其格式如下表4.3:
TCON
D7
D6
D5
D4
D3
D2
D1
D0
TF1
TR1
TF0
TR0
IE1
IT1
IE0
ITO
表4.3
其各位的功能如下:
TF1、TF0—计数溢出标志位当计数器溢出时,该位置1。
TR1、TR0—计数运行控制位
4.3基本显示模块设计
基本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
程序流程如图4.4所示。
图4.4
4.4系统初始化程序
RSBITP2.0;定义液晶显示端口标
RWBITP2.1
EBITP2.2
L50MSEQU60H
L1MSEQU61H
L250MSEQU62H
SECEQU65H
MINEQU64H
HOUEQU63H
ORG0000H
LJMPMAIN
LJMPTT0
ORG001BH
LJMPT1INT
ORG1000H
MAIN:
液晶初始化
MOVSP,#70H
MOVP0,#01H;清屏
CALLENABLE
MOVP0,#38H;8位,2行显示
LCALLENABLE
ORG