• 3.07 MB
  • 2022-04-22 11:15:35 发布

基于AT89C52单片机的简易电子琴设计毕业论文.doc

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'滨江学院毕业论文题目简易电子琴设计院系滨江学院专业电子信息工程学生姓名张盛杰学号20092305017指导教师吴大中二O一三年五月二十五日 声明本人郑重声明:1、持以“求实、创新”的科学精神从事研究工作。2、本论文是我个人在导师指导下进行的研究工作和取得的研究成果。3、本论文中除了引文外,所有实验、数据和相关材料均是真实的。4、本论文中除引文和致谢的内容外,没有抄袭其他人或其他机构已经发表或撰写过的研究成果。5、其他同志对本研究所做的贡献均已在论文中作了声明并表示了谢意。作者签名:日期: 目录1.引言12.工作原理22.1电子发音原理22.1.1音调22.1.2节拍52.2设计可行性52.3设计指标63.硬件电路63.1简易电子琴的组成框图63.2芯片选用73.4键盘设计94.软件设计104.1主程序流程图104.2程序设计内容11 5.调试155.1Proteus简介155.2keil简介155.3仿真步骤176.总结19致谢20附录22 简易电子琴设计张盛杰南京信息工程大学滨江学院09电子信息工程专业,南京210044摘要:本论文主要基于AT89C52单片机进行的简易电子琴设计。通过LCD显示屏、喇叭、键盘等外部器件,使用按键实现各种音调和音符的输入,LCD显示屏进行被操作的按键显示,用放大电路实现低音频信号的功率放大,最后经过调试用喇叭播放相关音乐。本设计的优点是安全,硬件电路比较简单,操作起来便捷容易上手。关键词:单片机;电子琴;LCD显示屏1.引言电子技术伴随着现代社会科学技术的快速发展,它已经改变了人们生活的各个方面,电子琴作为一种新型的的键盘乐器是音乐与现代电子科学技术发展相结合的产物,虽然没有其它乐器那么多鲜明的特点,但是它的简单易学已经让它在现代音乐中占到了一个很重要的位置。而单片机具有强大的编程实现特性和灵活的控制功能,它成为了电子琴中不可替代的重要一部分,本设计的主要任务是用AT89C52单片机作为核心控制元件,设计一个简易电子琴,主要介绍了电子琴硬件系统的组成并对相关软件程序方面做了相关的分析研究和调试。虽然单片机产生的时间并不是太长,但它的发展速度令人惊讶,它的高水平发展在集成度、可靠性、速度、应用等领域表现的淋漓精致。随着单片机性能的不断提高,它的应用变得更加广泛,目前它已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等多个领域。单片机技术的发展速度非常之快,目前的产品都致力于在各个功能方面进行更加全面的设计研究;在社会消费的需求竞争之下,尽可能地利用单片机的最新技术来研制其应用系统,再利用单片机灵便、性价比高等特点,来确保所设计出来的产品能够具有强大的竞争力和存活力。在社会活动的各个方面中,始终都有单片机的身影;从简易的到复杂的,各个地点,凡是能看到的地方几乎都有使用单片机的需求。虽然现在单片机供应的应用已经普及开来了,但还是有许多单片机尚未涉足到的地方,因此,单片机的应用和需求在现在现代社会的运用中还是有发展的。电子琴在当前的音乐玩具市场上是一个非常好的应用方面。单片机技术使我们可以利用软硬件开发出电子琴功能,从而实现电子琴的微型化,可以用作教学琴、玩具琴等。还可以对相关功能作出一些拓展。参照传统电子琴可以用键盘上的“k0”到“k8”键演奏从低So到高DO等8个音,从而可以用来弹奏喜欢的乐曲。28 2.工作原理声音是周围空气的震动,音调取决于震动的频率,频率越高音调越高。电子琴按下不同的琴键就会发出不同音调的声音,其实就是产生不同频率的震动。单片机电子琴就是利用单片机产生不同频率的电压波形,推动扬声器或蜂鸣器来发出不同音调的声音。假设电子琴有八个音阶,就对应8个不同的频率,频率越高音调就越高。单片机很容易输出方波信号,那么只要让它产生不同频率的方波就可以了,然后用这个方波信号驱动扬声器就可以了。单片机的按键可以模拟琴键,按下不同的按键就对应不同的频率的方波,就能发出不同频率的声音。2.1电子发音原理由于单片机的强大功能,除了在测试控制领域中有着广泛的运用外,还有一些简单而有趣的应用。比如,驱动单片机可以使蜂鸣器和扬声器发出声音,还可以控制其发出不同的声调,从而连接起来构成一个曲子。目前,市场上有很多种音乐模块和音乐芯片,可以直接产生各种曲子,但是,这种模块价格比较昂贵,电路结构比较复杂,如果系统中仅需要产生简单的音符或者简单的曲子,可以使用单片机配合扬声器产生需要的音乐效果。一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐波频率。单片机演奏的音乐基本上都是单音频率。因此单片机演奏音乐比较简单,只需要清楚“音调”和“节拍”。在这两个当中,音调表示某个音符所表现的频率的高低程度;节拍表示某个音符所表现的时间长久。音乐播放在本系统中,一般只需按顺序播放音符即可。用单片机播放音乐的方法如下:(1)复位单片机定时器(2)将乐谱中的各个音符的音调及节拍转换成各个对应的音调和节拍参数(3)将乐谱中音符的参数做成数据表格存放在存储器中(4)通过程序取出一个音符的相关参数......,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。2.1.1音调音调是音乐学中的名词,与平时所说的音高十分相似。在音乐中标准音高为中音C上方的A音,它的频率是f=440Hz,把其它的音和它进行比较。和为两个不同的音符,如果其中一个音符的频率是另外一个音符的两倍时,即时,则称比要高出一个倍频程。在音乐中音符1(do)与音符ⅰ之间其中一个的频率正好是另外一个音符频率的两倍,28 它在音乐学中被称为相差一个八度音。在一个八度音里,有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)28 (2-5)如果单片机外接12MHz的晶振,则,把t=1136us和代入上面的两式,随之可以求出标准音高A在单片机定时器工作方式1下的定时器高低计数器的初值为:(2-6)(2-7)参考以上的求法,我们就可以得出其他音调相应的计数器的预置初值。在单片机的晶振频率,定时器在工作方式1下定时器计数初值见表2-1音符频率/Hz计数初值音符频率/Hz计数初值低1DO26263628#4FA#74064860#1DO#27763731中5SO78464898低2RE29463835#5SO#83164934#1RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964013中7SI98895030#4FA#37064185高1DO104665058低5SO39264260#1DO#110965085#5SO41564331高2RE 117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO52364580#4FA#148065198#1DO#55464633高5SO156865217中2RE58764684#5SO#166165235#2RE#62264732高6LA176065252中3MI65964777#6LA#186565268中4FA69864820高7SI196765283表2-1晶振频率定时器在工作方式1下定时器计数初值表28 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的时长为四分音符长。1=G图2-2节拍示意图对于一拍的发音时间,如果乐曲没有特殊说明,一般说来,一拍的时长大约为400~450ms。如果这里规定一拍的时长为400ms,那么以四分音符为节拍时,四分音符的时长为400ms,八分音符的时长为200ms,十六分音符的时长为100ms。从而,在单片机上可采用循环延时的办法来实现控制一个音符唱多长时间。首先要编写一个精确的基本时长的延时程序,比如说以八分音符的时长为基本延时时间,那么对于一个音符,如果它是四分音符,只需调用四次延时程序,如果它是二分音符,则只需调用八次延时程序,以此类推。单片机电子琴演奏音乐的方法:步骤一:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍数。步骤二:将这些参数做成数据表格,存放在存储器中。步骤三:通过按键调用程序取出一个音符的相关参数,播放该音符。步骤四:播放完该音符后,等待下一次按键调用程序去取出下一次的音符的相关参数,再播放音符。对于演奏乐曲,一般将休止符的音调参数设置为FFH,节拍参数设置为00H。2.2设计可行性由于本次设计主要应用在生活相关的教学娱乐当中,所以在设计上28 要尽量的使其变的简单安全容易操作。其次,在这次设计可行性上进行分析如下:①技术可行性技术可行性主要是分析技术条件上是否能够顺利开展并完成课程设计的主要问题,硬件、软件能否满足设计者的需要等。通过分析各种软件环境,硬件仿真环境等均已经具备。②经济可行性所谓经济可行性,即在这次设计上需要投入资金的多少,由于课程设计是提高我们的动手能力以及资金有限。因此在经济上必须能够承受,比较理想化的对于我们课程设计来说是不可行的。通过分析后,无论是在器件价格或是常见度上均是可行的。该设计具有以下优点:①可以随意弹奏想要表达的音乐;②制作简单,成本低;③比传统电子琴功能更完善。2.3设计指标实现电子琴发声控制系统,要求电路实现如下功能:利用LCD数码管作为显示部件,喇叭作为发声部件,设置8个按键,实现高音、中音、低音的1、2、3、4、5、6、7、8的发音。并在存储一首歌曲的内容,可以实现自动播放。用PROTEUS实现的电子琴仿真设计。①按下音符键可以发出相应的音符②按下音乐播放键可以自动播放预先存在内存中的曲子AT89C52作为本设计的主控芯片,作为大规模集成电路技术发展的产物,它拥有高性能、高速度、简单、体积小、价格低廉、稳定可靠、应用广泛的特点,也具有编程实现灵活的特性,由于本设计主要用于教学娱乐方面,因此在设计上尽量使其简单易懂。3.硬件电路通过LCD显示屏、喇叭、键盘这一些外部器件,经过按键实现各种音调和音符的输入,LCD显示屏进行被操作的按键显示,用放大电路实现低音频信号的功率放大,然后通过调试用喇叭播放相关音乐。3.1简易电子琴的组成框图28 晶振电路AT89C52供电及复位电路发音电路键盘LCD显示屏图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单片机。28 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)输入输出口线插座:单片机通过输入输出口线与外界来完成转换信息的任务。如,单片机与外设的通讯就是通过输入输出口线来实现的。单片机输入输出口线的驱动能力有限。当驱动能力不足的时候,就可以在口线上接驱动器。时钟电路可以简单定义如下:  ①就是产生象时钟一样准确的振荡电路。  ②任何工作都按时间顺序。28 构成振荡器的是单片机背部的一个高增益反相放大器。通常在引脚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键)。综上所述,在需要的键数比较多的情况时,使用矩阵法来做键盘是很合理的。在单片机的系统中,假如按键比较多,一般就会采用矩阵式(也称行列式)键盘,此次毕业设计就采用了此种28 键盘。矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。很明显,在按键数量比较多的时候,矩阵式键盘要节省很多I/O口。虽然矩阵键盘在硬件电路上相比其他键盘比较复杂,而且在程序算法上还比较麻烦,不过它在节省端口资源上非常具有优势,因所以它比较适合于多按键电路。采用矩阵式键盘电路,可以大大的节省单片机I/O的开销。图3-5键盘4.软件设计软件主要由初始化程序、键盘扫描程序、音调发生程序、延时程序和曲调播放程序组成。程序框图如图4-1所示。4.1主程序流程图本设计共两种播放模式,包括自动播放存储音乐和按键发音。上电之后,首第一先开中断,设置定时器0为工作方式1,当自动播放键按下的时候,进入中断,根据乐谱在音频数组中查找相应的音律,给定时器赋上初值,最后28 开始播放音乐。当DO、RE、MI、FA、SO、LA、SI、DO(高音)八种音符键按下时,根据音阶值和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。下为主程序流程图。【播放程序见附录】开始开中断并设置工作式寄存器有键按下自动播放键按下进入中断查找相应音律给定时器赋值播放音乐进入中断查找相应音律给定时器赋值播放键值对应音符图4-1程序流程图4.2程序设计内容(1)4×4矩阵键盘识别处理之中每个按键有它们自己的行值和列值,它们的组合就是能够28 识别这个按键的编码。在矩阵中,它的的行线和列线分别通过两并行接口和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;28 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];//节拍时长28 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μs,所以只要让计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。下为歌曲处理函数部分voidSong(){TH0=High;//赋值定时器时间,决定频率TL0=Low;TR0=1;//打开定时器28 delayjie(Time);//延时所需要的节拍}另,计数脉冲值与频率的关系式为:N=fi÷2÷fr在上式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr就是想要产生的频率。其计数初值T的求法如下:T=65536-N=65536-fi÷2÷fr5.调试5.1Proteus简介Proteus是英国Labcenter公司嵌入式系统仿真开发平台。Proteus由两个主要程序系统构成ISIS.EXE(电路原理图设计系统)和ARES.EXE(印刷电路版设计系统)。本论文设计主要是运用ISIS.EXE(电路原理图设计系统)仿真单片机控制16×16LED点阵,下面将简单介绍Proteus的电路原理图设计系统。Proteus的元件库:有分离元件、集成器件、还有多种带CPU的可编程序器件。既有理想元件模型。还有各种不同厂家及时更新的实际元件模型。Proteus的电路原理图设计系统的仿真实验功能:电路不仅能做电路基础实验、模拟电路实验与数字电路实验,而且能做单片机与接口实验。为课程设计与毕业设计提供综合系统仿真。它的仿真要求为:1.建立数字电路模型,检测数字电路模型是否连通,有无连接错误。2.Keil软件编译C语言,要求最终编译结果程序0错误,将其导入到Proteus仿真软件中。3.Proteus仿真电路最终能成功显示C语言程序编译后的结果。5.2keil简介28 单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果使用C语言编程,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会使工作事半功倍。该软件的优点为:(1)KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。(2)与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。注意事项:(1)仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。(2)仿真器上的复位按钮只复位仿真芯片,不复位目标系统。(3)仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。28 5.3仿真步骤1、首先用Protel99se软件绘制电路原理图,如图5-1图5-1电路原理图2、电路原理图绘制完成之后就可以进行电路功能的仿真。(1)用Keil软件编写程序(2)编译和生成hex文件,如图5-2图5-2编译生成hex文件28 3、打开Proteus,设计硬件电路图,见图5-3图5-3硬件电路图4、然后在"菜单"—>"Debug(调试)"中,选中"UseRemoteDebugMonitor(使用远程调试监控)",再左键双击芯片将所生成的.hex文件写入AT89C52芯片中,将.hex文件载入,就完成了序的写入。导入文件如图5-4所示图5-4hex文件导入28 5、此时程序已经写入芯片中,这时就可以进行电路图功能的仿真了。点击左下方的运行按钮。如图5-5图5-5点击开始仿真6、仿真结果,摁下相关键位发出相应声音LCD显示屏显示相关音符,如图5-6图5-6仿真结果6.总结经过两个多个月的努力,简易电子琴的电路设计成功了,简易电子琴的设计有众多的方法,此次选择了以单片机为基础的简易电子琴历,当然这和我们所学的专业有很大的关系,首先我们所学的课程中有关电子硬件的知识占了多数,在大学期间学习了单片机原理等基础电子有关知识。基于单片机原理的电子琴大大简化了以前传统的音乐产生电路,使得元件得到减少,生产成本降低而且性能也得到了提高,并且耗能也降低了。将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。不足之处有:(1)可弹奏的音符数较少,只能在一定范围内满足用户需要。可通过改进键盘识别模块和发生模块来增加其复杂度。(2)音量不可调。28 以单片机基础铺以外部设备设计的简易电子琴,它可以被制造成一个电子产品,应用方便,可以广泛的应用与我们的日常生活中。伴随着科技水品的提高,电子产品会朝着节能、使用寿命长,故障发生频率低、体积小、功能强大等方面迅踊发展,而单片机的发展必然会促进其发展,在不久的将来,高性能的单片机系统会在电子领域得到广泛应用,所以现在对单片机进行初步的研究对以后个人的发展很有帮助。我通过收集、查阅与发声原理、声音的产生电路有关的文献资料以及仿真调试软件的使用使我对单片机的应用前景有了深刻的了解。致谢通过两个多月的学习查资料终于将这篇论文顺利完成,在这个过程中遇到了不少的问题,都在各位同学朋友和导师的帮助下得以解决,同时也认识到了自身综合知识方面的欠缺。在这里我首先要强烈谢谢我的论文指导老师——吴大中老师,他对我进行了无数次的指导,不厌其烦的帮助我进行论文的修改和改进。其次感谢这篇论文所涉及到的各位学者,本文引用了各位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文。最后感谢我的同学和朋友,在论文的撰写和排版的过程中提供热情的帮助。由于我的学术水平有限,所写论文难免还有许多缺点和错误,恳请各位老师批评和指正。参考文献:[1]张鑫,华臻,陈书谦.单片机原理与应用.(M).电子工业出版社,2009,6[2]肖婧.单片入门与趣味实验设计(M).北京航空航天大学出版社,2008,4[3]陈明荧.8051单片机课程设计实训教材(M).清华大学出版社,2004,3[4]赵建领.51系列单片机开发宝典(M).电子工业出版社,2007,4[5]求是科技.8051系列单片机C程序设计完全手册(M).人民邮电出版社,2006,4[6]楼然苗,李光飞.51系列单片机设计实例(M).北京航空航天大学出版社,2003,3[7]百度百科.音符(Online).http://baike.baidu.com/view/373613.htm?fr=ala0_1_1[8] 周琛晖.基于 AT89S51单片机的电子琴设计[J] .中国矿业大学计算机学院,江苏徐州(221008). [9] 韩改宁.基于AT89C52实现简单音乐发生器[J] .咸阳师范学院计算机科学系.陕西成阳(712000). [10]ChenTianzhou,ZbaoYi,HuWe.Assigning program to cache-aware scratchpad concerning the influence of the whole embedded sys- tem 28 [C].Networking,Architecture,and Storages.IEEE Conf of International Workshop on Aug.2006ResearchandDesignfortheSimpleElectronicOrganDepartmentofelectronicsofNanjingUniversityofInformationScienceandTechnology,NanjingShengjieZhang210044ABSTRACTAbstract: This design study based on AT89C52 simple flower design. It is based on the microcontroller as a master core set of peripheral devices such as keyboard, buzzer; also use some simple devices such as: two digital tube, and an NPN transistor and resistors, etc.. Keys to input notes and tones; button to display two digital tube operation; achieve low audio power amplifier with an NPN transistor 8550 play "Farewell"; final buzzer.Keywords: AT89C52 ; ElectronicOrgan;LCDscreen28 附录1、实物图2、电子琴程序#include#defineucharunsignedchar#defineuintunsignedint#defineKeyPortP1#definecomm0#definedat1/*------------------------------------------------变量------------------------------------------------*/ucharHigh,Low;//定时器预装值的高8位和低8位28 sbitSPK=P2^1;//定义喇叭接口sbittab=P3^4;//功能键sbitRS=P2^5;//液晶数据命令选择sbitRW=P2^6;//液晶读写选择sbitEN=P2^7;//液晶使能端ucharcodefreq[][2]={0xD8,0xF7,//00440HZ10xBD,0xF8,//00494HZ20x87,0xF9,//00554HZ30xE4,0xF9,//00587HZ40x90,0xFA,//00659HZ50x29,0xFB,//00740HZ60xB1,0xFB,//00831HZ70xEF,0xFB,//00880HZ`1};ucharTime;ucharcodeYINFU[9][1]={{""},{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"}};//世上只有妈妈好数据表ucharcodeMUSIC[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0};//音阶频率表高八位ucharcodeFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,28 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};//音阶频率表低八位ucharcodeFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};ucharcodedis1[2][10]={"ELECTRONIC","ORGAN"};/*------------------------------------------------函数声明------------------------------------------------*/voidInit_Timer0(void);//定时器初始化/*------------------------------------------------延时函数大约约2*z+5us------------------------------------------------*/voiddelay2xus(ucharz){while(z--);}/*------------------------------------------------延时函数大约约1ms------------------------------------------------*/voiddelayms(ucharx){while(x--){28 delay2xus(245);delay2xus(245);}}/*------------------------------------------------1602液晶写命令comm/数据dat------------------------------------------------*/voidlcd_wr(ucharcomm_dat,ucharxdat){RS=comm_dat;RW=0;delay2xus(10);P0=xdat;EN=1;delayms(1);EN=0;}/*------------------------------------------------1602液晶写字符串命令------------------------------------------------*/voidlcd_string(ucharadd,ucharmun,uchar*pstring){lcd_wr(comm,0x80+add);while(mun--)lcd_wr(dat,*(pstring++));}/*------------------------------------------------*1602初始化*------------------------------------------------*/voidlcd_init()28 {P0=0x00;EN=0;lcd_wr(comm,0x38);delayms(2);lcd_wr(comm,0x0c);delayms(1);lcd_wr(comm,0x06);delayms(1);lcd_wr(comm,0x01);}/*------------------------------------------------节拍延时函数各调1/4节拍时间:调4/4125ms调2/4250ms调3/4187ms------------------------------------------------*/voiddelayjie(uchart){uchari;for(i=0;i