可控LCD数字音乐盒.docx
- 文档编号:29916025
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:37
- 大小:637.74KB
可控LCD数字音乐盒.docx
《可控LCD数字音乐盒.docx》由会员分享,可在线阅读,更多相关《可控LCD数字音乐盒.docx(37页珍藏版)》请在冰豆网上搜索。
可控LCD数字音乐盒
本科生毕业设计
可控LCD数字音乐盒
学院电气(机电)工程学院
专业电子信息工程
班级2010级本1班
学号[学号]
学生姓名[姓名]
联系方式电话
指导教师×××职称:
××
2014年5月
独创性声明
本人郑重声明:
所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。
除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表的研究成果。
与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。
签名:
____________________
年_____月日
授权声明
本人完全了解许昌学院有关保留、使用本科生毕业论文(设计)的规定,即:
有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。
本人授权许昌学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。
本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”):
无。
学生签名:
年 月 日
指导教师签名:
年 月 日
可控LCD数字音乐盒
摘要
本设计的数字音乐盒以AT89C51单片机为核心,用C语言编写。
利用单片机的定时器产生不同频率的声波,由I/O口输出,继而启动蜂鸣器发出音乐。
通过外部中断进行歌曲切换,通过按键控制播放/暂停。
实现几首乐谱的循环播放,同时LCD1602显示自定义字符“♫”、正在播放曲谱编号、曲谱总数、曲谱名滚动。
关键词:
AT89C51;LCD;数字音乐盒
ControllableLCDDigitalMusicBox
ABSTRACT
ThisdigitalmusicboxisdesignedwithAT89C51microcontrollerasthecore,theprogramwrittenintheClanguage.ThemusicboxproducesdifferentfrequencysquarewavesfromtheI/OportbycontrollingtheMCUinternaltimer,afterwardsactivatesthebuzzertosound.Switchsongsthroughexternalinterrupt,pushingthekeytocontrolthemusicplayorpause.Achievingsomemusicloops,whileLCD1602showsacustomcharacter"♫",thenumberoftheplayingmusic,thetotalnumberofmusic,andthesongnamescrolls.
Keywords:
AT89C51;LCD;Digitalmusicbox
目录
1.绪 论1
1.1设计的背景与意义1
1.2国内外的研究现状2
2.设计原理及总体方案3
2.1设计要求3
2.2音乐的产生原理3
2.3总体方案5
3.硬件电路设计6
3.1AT89C51芯片简介6
3.2时钟振荡电路7
3.3LCD显示电路7
3.4功能键与蜂鸣器电路8
3.5LCD1602使用说明9
4.软件设计12
4.1程序流程图12
4.2部分程序解析13
4.3系统仿真与分析14
总结17
参考文献18
附录A完整系统电路仿真图19
附录BBillOfMaterials20
附录C系统源程序21
致谢31
基于单片机的可控LCD数字音乐盒的设计
1.绪 论
1.1设计的背景与意义
音乐是无国界的,它是世界各国交流的通用语言,它能表达人们的不同情感,又给人们美妙的艺术享受。
如今,音乐已遍布世界各个角落,音乐已得到飞速发展,与此同时各种形式的音乐盒也应运而生。
虽然已无法考证音乐到底在什么时期产生的,但可追溯到音乐盒的起源,是中古时代(约476年西罗马帝国灭亡——1640年英国资产阶级革命为时限)欧洲文艺复兴时期。
当时产生的音乐盒就是所谓的传统音乐盒,是机械式的,他们往往比较笨重,发音易受外界干扰,发出的音乐过于单调,不够悦耳动听,不能够给人们美妙的精神享受。
故传统的机械式音乐盒早已不能满足人们今天的需求。
在今天这个时代,人们早已不满足于过去机械式音乐盒仅仅作为制造音乐的单一声源功能。
人们在享受美妙的音乐的同时,还希望能够将这美妙的音乐存储起来,以便在需要的时候可随时听到自己想要的歌曲。
更进一步的,人们还期盼随时向音乐盒中存储音乐,更新音乐。
有需求,便有了产物,一种新型的音乐盒——电子音乐盒便产生了。
当今这个信息时代是一个数字时代,数字信号相较模拟信号通用性强,抗干扰,精度高,便于长期存储等诸多优势。
正是这些优势满足了人们的需求,得以应用到了音乐盒身上。
基于单片机的音乐盒便是一种简单的数字音乐盒,在很多方面都有应用,如更成熟的音频播放器MP3、音视频播放器MP4,音乐门禁,音乐喷泉等。
以往的发音单一、笨重的机械音乐盒已经不够令人满意。
本设计以单片机为核心的数字音乐盒体积小,轻便,可以演奏多首音乐,带有LCD显示功能,可变换多种显示花样,容易使用。
虽然当下更为完美的音乐播放器已经诞生,但本设计的音乐盒工艺简单、成本低——核心部件单片机3元左右,LCD显示屏7元左右;再有,很多地方并不要求音乐盒十分完美,所以该音乐盒还是值得开发。
这种音乐盒可以做成不同的样式,可以设计成精美的艺术品,颇受热爱收藏的音乐爱好这青睐。
另外,对于热爱DIY的人们来说,单片机音乐盒也有很多用处,他们可以利用它DIY出精美的礼品,经过添加一些其他元素来设计出具有创意性的物品,值得收藏。
如今嵌入式的应用十分广泛,发展前景十分可观,做为嵌入式的基础,利用单片机设计一些东西是很有意义的。
我们可以利用单片机音乐盒设以嵌入式计成一些产品,增添产品的特色。
本设计的音乐盒是音乐播放器的基础,有必要了解其基本原理,为以后探究更完美的产品做铺垫,具有一定的研究价值。
1.2国内外的研究现状
现今,单片机技术已经很成熟,其应用也更加广泛,在各个领域中单片机所起的重要作用更是不必多说。
特别是此刻嵌入式体系蓬勃发展,其成长空间极其广漠。
数码时期,信息时期让嵌入式产品有了非常泛博的成长机缘,嵌入式的成长前途非常可观。
而嵌入式体系便是基于单片机这类微处理器的,故而这就为单片机的成长提供了更阔的空间。
单片机实质上也是一种计算机,结合了控制功能和计算机结构,利用大规模集成电路技术集成在一个芯片上[]。
现在,电子音乐的利用已非常普遍,其花样也很不少。
简单的音乐卡片,高保真的CD,流行的MP3都是电子音乐的范畴。
在音质已经得到保证的今天,音乐盒正朝着迷你化,更加轻便,简单易用的方向发展。
人们正在研究设计出更加精美、炫酷的音乐播放器,追求在娱乐的同时享受音乐的美妙。
联合嵌入式将音乐盒设计成不同形式,像现在的智能手机中的音乐播放器,车载音乐播放器等。
这都是为了人们更便利地利用。
所以,现在音乐盒的研究归根结底还是向着简洁,易用,携带方便,功能更强,娱乐性更强的方向发展。
2.设计原理及总体方案
要设计一个基于单片机的可控并带有显示特性的数字音乐盒,就得了解音乐的原理,显示载体等问题。
了解到这些之后,便可制定出一个完整的可行方案,完成音乐盒的设计了。
2.1设计要求
1)设计一个数字音乐盒,能播出几首乐曲。
2)具有显示功能,如正在播放乐曲的名字,乐曲数目。
3)可以按键操控,能中途控制乐曲的暂停/播放,具备选曲功能。
2.2音乐的产生原理
简而言之,音乐的产生有两个要素:
音调和节拍。
固然,现实动听的音乐更复杂,但单片机通常处理的是单音音频,无相对应振幅的谐波频率,因此表达不出多种音色。
故对单片机来说,只需明确节拍和音调两个定义方可,它们构成一个音符,多个音符组成一首音乐。
1)音调和节拍
常见的简谱1、2、3、4、5、6、7是音乐的7个基本音调,不同的发音实质是音调的频率不同所决定的[]。
使用单片机可方便地在输入/输出口生成不同频率的脉冲以获得不同音调。
让定时器轮回计时某音频周期的一半时间,每当计时到后变换输出脉冲的高低电平,便获取此音频。
若定时器选取方式0工作,晶振频率
,定时初始计数值N与音符频率F的关系为:
(21)
即
(22)
假设频率523Hz,1046Hz,587Hz的计数初始值为
,
,
,则。
本文采用12MHz晶振,定时器0在方式0下工作,所涉及的音符频率对应于计数初值关系均可由公式(22)得到。
节拍(Beat)表示音调持续时间的长短,用拍数表示,见表2-1。
音乐的旋律变化便是用节拍来调节各个音的快慢实现的。
1拍持续的时间,非硬性规定,同一首乐谱可以有多种基准的节奏,只要设定延迟时间就可求得拍数。
设1/4拍为t,则1拍应为4t,以此类推。
于是,求得1/4拍的延时t,其余的节拍就是t的倍数,即4t×拍数[]。
表2-1 节拍的定义
音符名称
写法
拍数
全音符
5———
四拍
二分音符
5—
二拍
四分音符
5
一拍
八分音符
5
半拍
十六分音符
5
四分之一拍
三十二分音符
5
=
八分之一拍
2)音调和节拍的编码
Do~Si分别编码为1~7,重音Do~Si分别编为8~E。
节拍以十六分音符为基准编为1,4个十六分音符为四分音符即是一拍,编为4。
同理,可得其余节拍的编码。
这里,一个音符编为一字节码,高4位是音调,而低4位作为节拍,曲子结束标志为0xff。
比如:
音调Fa发音长度为1拍,即四分音符,编码为0x44;半个节拍长度发音Si为八分音符记为0x72。
见表2-2音调与节拍的编码。
将乐谱的各个音符编码后,存放在一个无符号字符型数组中,便得到了该乐谱的代码表。
要播放该曲,只需从数组中依次取出一个元素,再截取高4位得到音调,继而获取对应的计数初始值传递给定时器0,进而定时器0工作启动蜂鸣器发出该音;截取余下的低4位,获得延时长度,接着通过延时函数完成节拍延迟。
如此循环,便将一首完整的曲子演奏了出来。
表2-2 音调与节拍的编码
简谱
发音
简谱码
简谱
发音
简谱码
节拍码
节拍数
5
低音So
1
1
高音Do
B
1
1/4拍
6
低音La
2
2
高音Re
C
2
2/4拍
7
低音Ti
3
3
高音Mi
D
3
3/4拍
1
中音Do
4
4
高音Fa
E
4
1拍
2
中音Re
5
5
高音So
F
5
1又1/4拍
3
中音Mi
6
6
1又1/2拍
4
中音Fa
7
8
2拍
5
中音So
8
A
2又1/2拍
6
中音La
9
C
3拍
7
中音Ti
A
F
3又3/4拍
2.3总体方案
前面了解了音乐的简单原理,也就找到了突破口——音调的产生与节拍的延时。
这里,选用的核心芯片是AT89C51单片机,利用定时器0在工作方式1下产生方波,利用延时函数实现节拍。
本设计信息的显示是利用1602液晶显示屏。
播放/暂停按键连接一个I/O口,通过每周期查询一次I/O口状态的方式确定是否有按键动作,进而控制播放和暂停。
通过单片机的两个外部中断分别实现上一曲和下一曲的选曲功能。
总体设计框图见图21。
图21 总体设计框图
3.硬件电路设计
由总体设计框图(图21),分别设计各模块电路。
3.1AT89C51芯片简介
AT89C51芯片内部ROM共4K字节,能进行上千次擦写,内部RAM共256字节,这其中包括可供用户使用低128单元和高128单元的专用寄存器,两个16位定时器和4个8位I/O口,俗称单片机[]。
如图31、图32所示。
图31 AT89C51单片机引脚图
图32 AT89C51单片机实物图
部分芯片引脚介绍:
1)输入/输出口线
AT89C51有4个I/O口线:
P0、P1、P2、P3,均为8位并行I/O口[]。
其中P0口内部没有提供上位电阻,故不能提供高电平,仅有低电平和悬空状态。
在使用该口时,若要输出高电平,必须人为在外部通过上位电阻与电源连接。
P1~P3口内置了上位电阻,自身可提供高、低两种电平,无需再外接上为电阻。
2)P3口除了普通I/O口的功能外还有第二功能,平时用的多的就是它的第二功能,其详细说明见表3-1。
表3-1 P3口线的第二功能
口线
第二功能信号
第二功能信号名称
P3.0
RXD
串行数据接受
P3.1
TXD
串行数据发送
P3.2
INT0
外部中断0申请
P3.3
INT1
外部中断1申请
P3.4
T0
定时器/计数器0计数输入
P3.5
T1
定时器/计数器1计数输入
P3.6
WR
外部数据存储器(RAM)写选通
P3.7
RD
外部数据存储器(RAM)读选通
3)EA——ROM选择控制信号,低电平时,程序从外部ROM(0000H~FFFFH)开始执行;高电平时,从内部0000H~0FFF共4K字节ROM开始,超出4K字节范围后便转向外部ROM[]。
3.2时钟振荡电路
AT89C51是用三点式电容振荡电路作为时钟振荡电路的,其具体原理可参考相关“三点式电容振荡电路”的资料[]。
时钟振荡电路连接如图33所示。
为计算方便,这里晶振频率选用12MHz。
该三点式电容振荡电路中,晶振X1为感性元件,相当于一个电感,与C1、C2形成谐振,产生180°的相移,为此,根据参考资料电容C1、C2取值22pF。
图33 时钟振荡电路
3.3LCD显示电路
本设计采用液晶显示器1602(仿真中用的LM016l与LCD1602原理相同,区别在于Proteus中LM016L无15、16引脚,故没有背光)进行显示,接于P0口。
由于P0口是8位漏级开路双向I/O口,只有低电平和悬空状态,不能提供高电平,所以当向LCD输出指令字节时或显示数据时,要外接上拉电阻RP1[]。
采用模拟口线方式将LM016L的控制信号RS、RW、E分别接到单片机的P2.0、P2.1、P2.2,如图34所示。
图34 LCD显示电路
3.4功能键与蜂鸣器电路
音乐盒设有3个功能键:
播放/暂停、上一首、下一首,均采用轻触式,即按下按键再弹起有效,也就是脉冲触发方式。
播放/暂停键接P1.0口,程序每周期查询一次P1.0口的状态,每改变一次状态就切换一下播放和暂停。
选曲功能采用中断方式,上一首按键接INT0,下一首按键接INT1,按下任一按键便发出与之对应的外部中断申请,进而响应中断以实现选曲。
这里选择无源蜂鸣器作为发声装置,接于P3.7口。
是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。
图35 功能键和蜂鸣器电路
3.5LCD1602使用说明
常见的1602LCD有16个引脚,少数LCD有14个,没有15、16背光引脚[]。
1602的各个引脚说明见表3-2。
表3-2 1602引脚功能说明
符号
引脚说明
符号
引脚说明
VSS
电源地
D2
Data I/O
VDD
电源正极
D3
Data I/O
VL
液晶显示偏压信号
D4
Data I/O
RS
数据/命令选择(H/L)
D5
Data I/O
R/W
读/写选择(H/L)
D6
Data I/O
E
使能信号
D7
Data I/O
D0
Data I/O
BLA
背光源正极
D1
Data I/O
BLK
背光源负极
1602LCD的显示功能都是有指令完成的,共有11条控制指令,如表3-3所示。
表3-3 1602指令表
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数据到RAM
1
0
要写的数据内容
11
从RAM中读数据
1
1
读出的数据内容
1602液晶的指令需要用到四种基本操作:
读状态、写指令、读数据、写数据[]。
具体操作规则如表3-4所示。
表3-4 1602LCD的4种基本操作
操作
输入
输出
读状态
RS=L、RW=H、E=H
D0~D7=状态字
写指令
RS=RW=L、D0~D7=指令码、E=下降沿
无
读数据
RS=H、RW=H、E=H
D0~D7=数据
写数据
RS=H、RW=L、D0~D7=数据、E=下降沿
无
实际操作中先根据四种基本操作对RS、R/W、E进行相应设置,再将指令码送入D7~D0即可。
部分指令说明如下:
1)光标和显示模式:
I/D为光标移动方向标志。
I/D=0,操作后光标向左移1字符;ID=1,操作后光标自动右移。
S=0,禁止画面滚动;S=1,允许[]。
按照我们一般的习惯,即显示一个字符后光标自动移动到下一个位置,就像word那样输入一个字符后不必手动设定下一个位置,以方便我们连续显示字符。
这时只要将指令码06H送入D7~D0即可。
2)显示开关控制:
常用指令码0CH,即D=1,C=B=0——显示屏开,不闪烁光标;指令码08H,即D=C=B=0,关闭显示屏,也不闪烁光标。
3)置功能:
常用指令码038H,即DL=1,D7~D0有效,N=1,F=0——2行显示,5×7点阵字符体;指令码03CH,即DL=1,8位数据线,N=1,F=1——2行,5×11点阵[]。
4)置数据存贮器地址:
设置显存位址,第一行:
80H-A7H,其中80H-8FH与LCD显示区域一一对应;第二行:
C0H-E7H,其中C0H-CFH与显示区域一一对应[]。
由此,我们可自定义字符——首先设置CGRAM起始地址,再将自定义字符代码写进CGRAM。
这样自定义字符便和1602内置的字符一样,有自己的显示代码了,要显示自定义字符,只需把该字符的代码写入DDRAM即可。
0x00~0x3F为6位CGRAM有效地址,共64字节,可定义8个5×8或4个5×11点阵字符。
仅使用每个CGRAM存储单元低5位作为字符代码数据[]。
具体字符代码与CGRAM的关系见表3-5。
表3-5 字符代码与CGRAM地址对应关系
5×8点阵字符
5×11点阵字符
字符代码
CGRAM地址
字符代码
CGRAM地址
0x00(0x08)
0x00~0x07
0x00(0x08)
0x00~0x0F
0x01(0x09)
0x08~0x0F
0x01(0x09)
0x10~0x1F
0x02(0x0A)
0x10~0x17
0x02(0x0A)
0x20~0x2F
0x03(0x0B)
0x18~0x1F
0x03(0x0B)
0x30~0x3F
0x04(0x0C)
0x20~0x27
0x05(0x0D)
0x28~0x2F
0x06(0x0E)
0x30~0x37
0x07(0x0F)
0x38~0x3F
如图36所示自定义字符“月”的字符代码数据存储在00H~07H单元中,所以字符代码为0x00。
图36 “月”字的5×8点阵字模数据
4.软件设计
本程序设计包含两个文件:
MusicBox.c和LCD1602.h,前者为本设计的主文件,后者是LCD1602的驱动头文件,被包含在主文件中。
编译环境为KeilC51uV4。
音乐盒通电后,LCD第一行显示“♫ 1/3”(1/3表示曲号/乐曲总数),第二行显示乐曲名;按下播放/暂停键,乐曲名从右端开始滚动,到达左端时又返回右端继续滚动,这样循环直到本首结束或切换乐曲。
当一首结束或按下选曲键,LCD第一行曲号相应变化,其他不变;第二行曲名也相应切换,亮约1秒后开始滚动。
播放/暂停键循环切换播放和暂停的状态。
若切换至暂停,乐曲停止播放,LCD保留画面;再次切换为播放时,乐曲从上次暂停处继续播放,LCD画面也继续滚动。
4.1程序流程图
图41为程序流程图,完整程序见附录C。
图41 N-S流程图
4.2部分程序解析
1)头文件“LCD1602.h”用来驱动1602LCD,完整程序见附录C。
延时函数delay_ms(),参数:
整型变量ms;作用:
产生ms×1毫秒的延时时间。
见下方程序,若ms=1,则执行120次循环,循环体中没有任何指令操作,仅改变循环变量的值和循环条件的判断。
经过反汇编可根据每条指令执行时间算出循环的总时间;在晶振12MHz下,经Keil测试得出该循环时间接近1毫秒(ms=1时)。
值得提出的是,该函数产生的延时并非准确;当然,无论什么方法产生的延时都不会精确无误,但在多数情况下不需十分精确,如人耳很难分辨出声音细微的差别,故可用该延时确定节拍。
voiddelay_ms(uintms)
{
uchart;
while(ms--)for(t=0;t<120;t++);
}
读忙函数ucharBusy_Check()用来检测1602是否允许读写,即忙标志位BF是否为1,函数返回值LCD_Status的最高位就是BF的值。
以后可用语句while(Busy_Check()&0x80);来等待BF变为0以进行下面的读写操作。
写指令/写数据函数原型:
voidwrite(ucharcmd_dat,bitr_s);参数:
cmd_dat表示要通过D7~D0写进LCD的指令代码或数据;r_s为位数据类型的参数,来作为写指令还是写数据的标志。
因为写数据和写指令操作都是向D7~D0输送cmd_dat,使能信号E的控制也相同,唯一不同就是寄存器的选择不同,故可将r_s赋值给RS,当r_s=0时,指向指令寄存器,函数为写指令操作;当r_s=1时,指向数据寄存器,函数执行写数据操作。
设置显示位置用下面两条语句完成,其中x=0~16,表示LCD显示区域从到右的16个位置。
第一行:
write(0x80|x,0);我们知道设置显示数据存储地址指令要求D7位必须为高,低6位D6~D0为显示的数据有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可控 LCD 数字 音乐盒