基于AT89C52单片机的简易电子琴设计毕业设计论文.docx
《基于AT89C52单片机的简易电子琴设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于AT89C52单片机的简易电子琴设计毕业设计论文.docx(38页珍藏版)》请在冰豆网上搜索。
基于AT89C52单片机的简易电子琴设计毕业设计论文
滨江学院
毕业论文
题目简易电子琴设计
声明
本人郑重声明:
1、持以“求实、创新”的科学精神从事研究工作。
2、本论文是我个人在导师指导下进行的研究工作和取得的研究成果。
3、本论文中除了引文外,所有实验、数据和相关材料均是真实的。
4、本论文中除引文和致谢的内容外,没有抄袭其他人或其他机构已经发表或撰写过的研究成果。
5、其他同志对本研究所做的贡献均已在论文中作了声明并表示了谢意。
作者签名:
日期:
简易电子琴设计
张盛杰
南京信息工程大学滨江学院09电子信息工程专业,南京210044
摘要:
本论文主要基于AT89C52单片机进行的简易电子琴设计。
通过LCD显示屏、喇叭、键盘等外部器件,使用按键实现各种音调和音符的输入,LCD显示屏进行被操作的按键显示,用放大电路实现低音频信号的功率放大,最后经过调试用喇叭播放相关音乐。
本设计的优点是安全,硬件电路比较简单,操作起来便捷容易上手。
关键词:
单片机;电子琴;LCD显示屏
1.引言
电子技术伴随着现代社会科学技术的快速发展,它已经改变了人们生活的各个方面,电子琴作为一种新型的的键盘乐器是音乐与现代电子科学技术发展相结合的产物,虽然没有其它乐器那么多鲜明的特点,但是它的简单易学已经让它在现代音乐中占到了一个很重要的位置。
而单片机具有强大的编程实现特性和灵活的控制功能,它成为了电子琴中不可替代的重要一部分,本设计的主要任务是用AT89C52单片机作为核心控制元件,设计一个简易电子琴,主要介绍了电子琴硬件系统的组成并对相关软件程序方面做了相关的分析研究和调试。
虽然单片机产生的时间并不是太长,但它的发展速度令人惊讶,它的高水平发展在集成度、可靠性、速度、应用等领域表现的淋漓精致。
随着单片机性能的不断提高,它的应用变得更加广泛,目前它已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等多个领域。
单片机技术的发展速度非常之快,目前的产品都致力于在各个功能方面进行更加全面的设计研究;在社会消费的需求竞争之下,尽可能地利用单片机的最新技术来研制其应用系统,再利用单片机灵便、性价比高等特点,来确保所设计出来的产品能够具有强大的竞争力和存活力。
在社会活动的各个方面中,始终都有单片机的身影;从简易的到复杂的,各个地点,凡是能看到的地方几乎都有使用单片机的需求。
虽然现在单片机供应的应用已经普及开来了,但还是有许多单片机尚未涉足到的地方,因此,单片机的应用和需求在现在现代社会的运用中还是有发展的。
电子琴在当前的音乐玩具市场上是一个非常好的应用方面。
单片机技术使我们可以利用软硬件开发出电子琴功能,从而实现电子琴的微型化,可以用作教学琴、玩具琴等。
还可以对相关功能作出一些拓展。
参照传统电子琴可以用键盘上的“k0”到“k8”键演奏从低So到高DO等8个音,从而可以用来弹奏喜欢的乐曲。
2.工作原理
声音是周围空气的震动,音调取决于震动的频率,频率越高音调越高。
电子琴按下不同的琴键就会发出不同音调的声音,其实就是产生不同频率的震动。
单片机电子琴就是利用单片机产生不同频率的电压波形,推动扬声器或蜂鸣器来发出不同音调的声音。
假设电子琴有八个音阶,就对应8个不同的频率,频率越高音调就越高。
单片机很容易输出方波信号,那么只要让它产生不同频率的方波就可以了,然后用这个方波信号驱动扬声器就可以了。
单片机的按键可以模拟琴键,按下不同的按键就对应不同的频率的方波,就能发出不同频率的声音。
2.1电子发音原理
由于单片机的强大功能,除了在测试控制领域中有着广泛的运用外,还有一些简单而有趣的应用。
比如,驱动单片机可以使蜂鸣器和扬声器发出声音,还可以控制其发出不同的声调,从而连接起来构成一个曲子。
目前,市场上有很多种音乐模块和音乐芯片,可以直接产生各种曲子,但是,这种模块价格比较昂贵,电路结构比较复杂,如果系统中仅需要产生简单的音符或者简单的曲子,可以使用单片机配合扬声器产生需要的音乐效果。
一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐波频率。
单片机演奏的音乐基本上都是单音频率。
因此单片机演奏音乐比较简单,只需要清楚“音调”和“节拍”。
在这两个当中,音调表示某个音符所表现的频率的高低程度;节拍表示某个音符所表现的时间长久。
音乐播放在本系统中,一般只需按顺序播放音符即可。
用单片机播放音乐的方法如下:
(1)复位单片机定时器
(2)将乐谱中的各个音符的音调及节拍转换成各个对应的音调和节拍参数
(3)将乐谱中音符的参数做成数据表格存放在存储器中
(4)通过程序取出一个音符的相关参数......,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。
2.1.1音调
音调是音乐学中的名词,与平时所说的音高十分相似。
在音乐中标准音高为中音C上方的A音,它的频率是f=440Hz,把其它的音和它进行比较。
和
为两个不同的音符,如果其中一个音符的频率是另外一个音符的两倍时,即
时,则称
比
要高出一个倍频程。
在音乐中音符1(do)与音符ⅰ之间其中一个的频率正好是另外一个音符频率的两倍,它在音乐学中被称为相差一个八度音。
在一个八度音里,有12个半音。
以1--ⅰ八音区为例。
12个半音是:
1--#1,#1--2,2--#2,#2—3,3—4,4--#4,#4—5,5--#5,#5—6,6--#6,#6—7,7--ⅰ。
由于人耳的听觉效果,这12个音节的分度基本上都是以对数关系来划分它们的。
因此,只需要知道这12个音符的音高,也就是它们基本的音乐的频率,就可以根据音符之间的倍频程关系得到其他音符基本的音调频率。
在知道了一个音符的频率后,就可以让单片机发出相应的频率所对应的的振荡信号,从而产生相应的音符声音。
常采用的方法是通过单片机的定时器进行定时中断,在中断服务子程序中将单片机上外界扬声器的I/O口来回置高电平或置低电平,从而让扬声器发出声音。
为了让单片机发出不同频率音符的声音,只需将定时器预置不同的定时值来实现。
以标准音高A为例:
标准音高A的频率f=440Hz,其对应的周期为:
(2-1)
因此需要在单片机I/O口输出周期为T=2272us的方波脉冲,如图2-1所示
图2-1单片机控制音调示意图
由上图可知:
单片机输出高电平和低电平信号均为:
(2-2)
也就是说,单片机上定时器的中断触发时间为1136us。
如果单片机采用定时器工作方式1,它的计数脉冲为振荡器的十二分频信号。
如果外接晶振的振荡器频率为f0,那么定时器的预置初值由下式来显示:
(2-3)
式中,Count=
=65536,
是定时器将要确定的计数初值。
所以定时器的高低计数器的初值为:
(2-4)
(2-5)
如果单片机外接12MHz的晶振,则
,把t=1136us和
代入上面的两式,随之可以求出标准音高A在单片机定时器工作方式1下的定时器高低计数器的初值为:
(2-6)
(2-7)
参考以上的求法,我们就可以得出其他音调相应的计数器的预置初值。
在单片机的晶振频率
,定时器在工作方式1下定时器计数初值见表2-1
音符
频率/Hz
计数初值
音符
频率/Hz
计数初值
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63835
#5SO#
831
64934
#1RE#
311
63928
中6LA
880
64968
低3MI
330
64021
#6LA#
932
64994
低4FA
349
64013
中7SI
988
95030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6LA#
466
64463
高3MI
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
中3MI
659
64777
#6LA#
1865
65268
中4FA
698
64820
高7SI
1967
65283
表2-1晶振频率
定时器在工作方式1下定时器计数初值表
2.1.2节拍
在一张完整乐谱开头,都有如1=C
、1=G
……等等的标识。
这里1=C,1=G标识乐谱的曲调,简单的说就是跟音调有关系;这里的
、
用来表示节拍。
对于音符的节拍,以
为例。
它表示乐谱中以四分音符为节拍,每一小节有三拍。
1=G
的节拍示意图,见图1-2。
在图中,总共有三拍:
1、2为一拍,3、4、5为一拍,6为一拍。
从时长角度看,1、2的时长为四分音的一半,即为八分音符长;3、4的时长为八分音符的一半,即为十六分音符长;5的时长为四分音符的一半,即为八分音符长;6的时长为四分音符长。
图2-2节拍示意图
对于一拍的发音时间,如果乐曲没有特殊说明,一般说来,一拍的时长大约为400~450ms。
如果这里规定一拍的时长为400ms,那么以四分音符为节拍时,四分音符的时长为400ms,八分音符的时长为200ms,十六分音符的时长为100ms。
从而,在单片机上可采用循环延时的办法来实现控制一个音符唱多长时间。
首先要编写一个精确的基本时长的延时程序,比如说以八分音符的时长为基本延时时间,那么对于一个音符,如果它是四分音符,只需调用四次延时程序,如果它是二分音符,则只需调用八次延时程序,以此类推。
单片机电子琴演奏音乐的方法:
步骤一:
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍数。
步骤二:
将这些参数做成数据表格,存放在存储器中。
步骤三:
通过按键调用程序取出一个音符的相关参数,播放该音符。
步骤四:
播放完该音符后,等待下一次按键调用程序去取出下一次的音符的相关参数,再播放音符。
对于演奏乐曲,一般将休止符的音调参数设置为FFH,节拍参数设置为00H。
2.2设计可行性
由于本次设计主要应用在生活相关的教学娱乐当中,所以在设计上要尽量的使其变的简单安全容易操作。
其次,在这次设计可行性上进行分析如下:
技术可行性
技术可行性主要是分析技术条件上是否能够顺利开展并完成课程设计的主要问题,硬件、软件能否满足设计者的需要等。
通过分析各种软件环境,硬件仿真环境等均已经具备。
经济可行性
所谓经济可行性,即在这次设计上需要投入资金的多少,由于课程设计是提高我们的动手能力以及资金有限。
因此在经济上必须能够承受,比较理想化的对于我们课程设计来说是不可行的。
通过分析后,无论是在器件价格或是常见度上均是可行的。
该设计具有以下优点:
可以随意弹奏想要表达的音乐;
制作简单,成本低;
比传统电子琴功能更完善。
2.3设计指标
实现电子琴发声控制系统,要求电路实现如下功能:
利用LCD数码管作为显示部件,喇叭作为发声部件,设置8个按键,实现高音、中音、低音的1、2、3、4、5、6、7、8的发音。
并在存储一首歌曲的内容,可以实现自动播放。
用PROTEUS实现的电子琴仿真设计。
按下音符键可以发出相应的音符
按下音乐播放键可以自动播放预先存在内存中的曲子
AT89C52作为本设计的主控芯片,作为大规模集成电路技术发展的产物,它拥有高性能、高速度、简单、体积小、价格低廉、稳定可靠、应用广泛的特点,也具有编程实现灵活的特性,由于本设计主要用于教学娱乐方面,因此在设计上尽量使其简单易懂。
3.硬件电路
通过LCD显示屏、喇叭、键盘这一些外部器件,经过按键实现各种音调和音符的输入,LCD显示屏进行被操作的按键显示,用放大电路实现低音频信号的功率放大,然后通过调试用喇叭播放相关音乐。
3.1简易电子琴的组成框图
图3-1电子琴系统原理框图
(1)LCD显示屏
LCD液晶显示器是LiquidCrystalDisplay的简称,LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,以此来达到控制住每个像素点偏振光出射与否从而达到显示的目的。
自然界中的物质有气态、液态、固态三种型态。
虽然液体分子质心的排列没有任何规律性,不过如果这些分子是扁形的,那么这些分子的分子指向就有可能具有规律性。
因此人们就可以将液态再次细分成好多型态。
液体直接称为分子方向没有规律性的液体,如果分子具有方向性的液体,那么就可以称它为为“液态晶体”,简称“液晶”。
生活中的电视、手机绝大多数产品都属于液晶产品,因此,液晶对于人们的生活来说并不陌生。
液晶是在1888年由奥地利植物学家莱尼茨尔(Reinitzer)发现的,是一种介于固体与液体之间且具有规则性分子排列的有机化合物。
(2)时钟频率
由于单片机只有在时钟的驱动下才能完成工作。
在单片机内部放置一个时钟振荡电路,它只要外接一个振荡源就能产生相定的时钟信号传输到单片机内部的各个单元,以此决定单片机的工作速度。
外部振荡源电路一般选用石英晶体振荡器,此电路在加电大约延迟10mS后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2,作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
工作中的单片机,由外直接输入的送至内部控制逻辑单元的时钟信号的周期或内部振荡器产生的称为时钟周期。
时钟信号频率的倒数是零大小,通常用fosc表示。
如时钟频率为6MHz,即fosc=6MHz,则时钟周期为1/6µs。
3.2芯片选用
在此次的毕业课程设计中使用Atmel公司所开发的AT89C52单片机。
AT89C52是美国Atmel公司生产的具有低高性能、低电压等特点的CMOS8位单片机,内部含有8KB的可以不断修改的程序存储器和12B的随机存取数据存储器(RAM),它使用了Atmel公司的高质密、不容易失性存储的技术生产,并且和标准MCS-51指令系统所兼容,片内配置通用8位中央处理器(CPU)和Flash存储单元,由于AT89C52的强大功能使它可以广泛的应用到人们生产生活的各个方面。
AT89C52的前身是AT89C51,它在硬件组成、工作特点、引脚排列等方面兼容Intel公司的80C52。
AT89C52的引脚图如图3-2。
图3-2AT89C52的引脚示意图
其主要功能特性:
(1)和MCS51指令系统相兼容
(2)8k可反复擦写(>1000次)FlashROM
(3)32个双向I/O口
(3)3个16位可编程定时/计数器中断
(4)时钟频率0-24MHz
(5)2个串行中断
(6)可编程UART串行通道
(7)2个外部中断源
(8)共6个中断源
(10)2个读写中断口线
3.3单片机最小电路系统
单片机的最小工作系统是单片机加上应用程序和合适的外围器件。
(1)但单片机的应用系统中,单片机是核心部件,它能够自动完成用户的需求所赋予的任务。
(2)电源电路单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应骨。
因此,要使单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。
(3)输入输出口线插座:
单片机通过输入输出口线与外界来完成转换信息的任务。
如,单片机与外设的通讯就是通过输入输出口线来实现的。
单片机输入输出口线的驱动能力有限。
当驱动能力不足的时候,就可以在口线上接驱动器。
时钟电路可以简单定义如下:
就是产生象时钟一样准确的振荡电路。
任何工作都按时间顺序。
构成振荡器的是单片机背部的一个高增益反相放大器。
通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构图3-3中X1、C1、C2。
图3-3时钟电路
单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。
上电复位要求接通电源后,自动实现复位操作。
手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。
手动按钮复位的电路如所示。
即使人的动作再快也会让按钮保持接通的状态达数十毫秒,因此,它能够完全满足复位的时间要求。
手动复位的要求是,在电源接通的条件下,在单片机运行的期间内,使用按钮开关操作将单片机复位。
单片机小系统一般采用手动按键复位和上电复位两种方法来实现系统的复位操作。
上电复位要求是,接通电源后,系统能够自动实现复位操作。
手动复位要求是,在电源接通的条件下,在单片机运行期间内,用按钮开关操作使单片机复位。
它的结构见下图。
图3-4复位电路
3.4键盘设计
在设计的过程中由于键盘中按键数量比较多,为了减少I/O口的占用,一般将按键排列成矩阵形式。
在矩阵式键盘里,各个水平线和垂直线在交叉处是不直接连通的,而是通过一个按键将它们加以连接的。
所以一个端口就可以构成4*4=16个按键,与直接将端口线用于键盘相比之下多出了一倍,而且在线数更多的情况下,区别就会越明显,或者再多加一条线就能够构成20键的键盘,而直接用端口线就只能多出一键(9键)。
综上所述,在需要的键数比较多的情况时,使用矩阵法来做键盘是很合理的。
在单片机的系统中,假如按键比较多,一般就会采用矩阵式(也称行列式)键盘,此次毕业设计就采用了此种键盘。
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。
很明显,在按键数量比较多的时候,矩阵式键盘要节省很多I/O口。
虽然矩阵键盘在硬件电路上相比其他键盘比较复杂,而且在程序算法上还比较麻烦,不过它在节省端口资源上非常具有优势,因所以它比较适合于多按键电路。
采用矩阵式键盘电路,可以大大的节省单片机I/O的开销。
图3-5键盘
4.软件设计
软件主要由初始化程序、键盘扫描程序、音调发生程序、延时程序和曲调播放程序组成。
程序框图如图4-1所示。
4.1主程序流程图
本设计共两种播放模式,包括自动播放存储音乐和按键发音。
上电之后,首第一先开中断,设置定时器0为工作方式1,当自动播放键按下的时候,进入中断,根据乐谱在音频数组中查找相应的音律,给定时器赋上初值,最后开始播放音乐。
当DO、RE、MI、FA、SO、LA、SI、DO(高音)八种音符键按下时,根据音阶值和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。
下为主程序流程图。
【播放程序见附录】
图4-1程序流程图
4.2程序设计内容
(1)4×4矩阵键盘识别处理之中每个按键有它们自己的行值和列值,它们的组合就是能够识别这个按键的编码。
在矩阵中,它的的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态都需要变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地就是通过程序输出数字“0”所实现的。
(2)键盘处理程序的目的是:
确定有没有键按下,再判断是哪一个键按下的,这个键所展示的功能是什么;而且还要消除按键在闭合或断开的状态时的抖动。
两个并行口中,一个输出扫描码,另一个并行口随之输入按键状态,将按键逐行动态接地,行扫描值和回馈信号共同形成键编码而识别按键,该键功能可以通过软件查表来看到。
下为主函数键盘处理部分
voidmain(void)
{
ucharnum,k,i;
lcd_init();
lcd_string(0,10,dis1[0]);//开机画面
lcd_string(11,5,dis1[1]);//开机画面
Init_Timer0();//初始化定时器0,主要用于数码管动态扫描
SPK=0;//在未按键时,喇叭低电平,防止长期高电平损坏喇叭
lcd_string(0x40+0,5,"NOTE:
");
while
(1)
{
switch(KeyPort)
{
case0xfe:
num=1;break;
case0xfd:
num=2;break;
case0xfb:
num=3;break;
case0xf7:
num=4;break;
case0xef:
num=5;break;
case0xdf:
num=6;break;
case0xbf:
num=7;break;
case0x7f:
num=8;break;
default:
num=0;break;
}
lcd_string(0x40+7,1,YINFU[num]);
if(num==0)
{
TR0=0;
SPK=0;//在未按键时,喇叭低电平,防止长期高电平损坏喇叭
}
else
{
High=freq[num-1][1];
Low=freq[num-1][0];
TR0=1;
}
if(tab==0)
{
delayms(10);
if(tab==0)
{
i=0;
while(i<100)
{
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据
High=FREQH[k];
Low=FREQL[k];
Time=MUSIC[i+2];//节拍时长
i=i+3;
if(P1!
=0xff)//长按任意8音键退出播放
{
delayms(10);
if(P1!
=0xff)
i=101;
}
Song();
}
TR0=0;
}
}
}
}
(3)音乐播放设计:
一首曲子是很多种不同的音阶所组成的,而每个音阶对应着各不相同的频率,所以就可以利用不同的频率之间的组合构成人们所想要的音乐了,我们可以利用单片机的定时/计数器T0发出这样方波频率信号,所以,本设计中只需要把一首曲子的音阶对应频率关系弄清楚就行了。
想要产生音频脉冲的话,一般算出某一音频的周期(1/频率),再将此它除以2,就是所谓的半周期的时间。
使用定时器计时半个周期时长,P3.7反相的时间是每次计时结束之后,然后不断重复上面的过程,这个频率的脉冲就能够在P3.7引脚上得到。
利用AT89C52单片机的内部定时器让它的工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同的音阶,比如,频率为523Hz,其周期T=1/523=1912