毕业论文-基于单片机的简易电子琴系统设计_第1页
毕业论文-基于单片机的简易电子琴系统设计_第2页
毕业论文-基于单片机的简易电子琴系统设计_第3页
毕业论文-基于单片机的简易电子琴系统设计_第4页
毕业论文-基于单片机的简易电子琴系统设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文基于单片机的简易电子琴系统设计Simplekeyboardsystemdesignbasedonsinglechipmicrocomputer学院名称:专业班级:电子信息工程(专升本)2013级学生姓名:学号:指导教师姓名:指导教师职称:2015年5月基于单片机的简易电子琴系统设计摘要:随着科学技术的不断发展,单片机的应用日益成熟。单片机集成度高、处理功能强大、价格低廉使其在各个领域得到广泛应用。电子琴作为科学技术与音乐共同发展的产物,在这个电子信息化的时代,为音乐的大众化做出了不可代替的贡献。本系统是基于单片机的简易电子琴的设计。系统以STC89C52单片机作为主控单元,与4*4矩阵键盘、复位电路、扬声器等组成主控核心模块。利用定时器中断产生不同频率来实现不同音阶,用键盘扫描实现矩阵琴键的识别。音频处理部分采用LM386进行信号放大,通过扬声器发音。简易电子琴可以实现用矩阵琴键弹奏乐曲和播放一段示例音乐的功能。设计中采用了AltiumDesigner画出原理图、PCB图,然后通过Keil软件进行C语言程序进行编译,对电子琴进行软件编程编译,然后在进行软硬件的调试运行并将程序烧录到STC89C52芯片中。此系统运行比较稳定,具有硬件设计电路简单、清晰,成本低,软件功能完善,控制系统牢靠,性价比高等优点,具有一定的实用和参考价值。关键字:简易电子琴;STC89C52;LM386;矩阵键盘SimplekeyboardsystemdesignbasedonsinglechipmicrocomputerAbstract:Withthecontinuousdevelopmentofscienceandtechnology,theapplicationofsingle-chipmicrocomputerisbecomingmoreandmoremature.Singlechipmicrocomputerhighintegration,dealwithpowerfulfunctions,lowpriceiswidelyappliedinvariousfields.Electronicorganasaproductofscienceandtechnologyandthemusiccommondevelopment,intheelectronicinformationage,contributingtotheforthepopularityofthemusic.Thissystemisthedesignofsimpleelectronicorganbasedon51singlechipmicrocomputer.SystemtoSTC89C52single-chipmicrocomputerasmaincontrolunit,and4*4matrixkeyboard,resetcircuit,speakerandsoonmastercoremodules.Usingthetimerinterruptproduceddifferentfrequenciestoachievedifferentscales,thekeyboardscanachievedtheidentificationofthekeysofmatrix.ProcessingpartadoptsLM386audiosignalamplification,pronunciationthroughthespeaker.Simplekeyboardkeyscanbeachievedwithmatrixplaymusicandplayasamplefunctionofmusic.ThissystemmainlyUSESmicrocontrollerhardwaredesignandsoftwarestructuredesign,combiningtomakeelectronicorgan.UsingtheAltiumDesignerdrawaschematicdiagramandPCBdiagram,andthenthroughKeilsoftwarewithClanguageprogramming,softwareprogrammingcompilationwascarriedoutonthekeyboard,andthentorunthehardwareandsoftwaredebuggingandwillburntoSTC89C52chipintheprogram.Thesystemrunningisstable,hasthehardwarecircuitissimple,cleardesign,lowcost,softwarefunctionisperfect,reliablecontrolsystem,highcostperformance,hascertainpracticalandreferencevalue.Keywords:simpleelectronicorgan;STC89C52;LM386;matrixkeyboard目录TOC\o"1-3"\h\u摘要 4Abstract 5引言 7第一章 绪论 91.1设计目的及其意义 91.2设计方案选择 9第二章系统概述 112.1系统结构图 112.2软件设计流程图 112.3整体设计要求 122.4单片机发音选择 122.5按键模块方案选择 122.6音频处理模块方案选择 122.7单片机语言程序的选择 13第三章系统主要硬件电路设计 133.1单片机控制系统原理 133.1.1芯片选用 133.1.2芯片引脚介绍 143.1.3STC89C52时钟介绍 163.2音频处理模块 163.2.1LM386简介 163.3键盘控制电路 183.3.1矩阵式键盘的概述 183.3.2矩阵式键盘按键识别原理及方法 183.4晶振电路 203.5复位电路 203.6音频放大电路 21第四章软件部分 214.1音乐产生原理 214.2音阶产生方法 224.3利用单片机实现音乐节拍 224.4用单片机产生音频脉冲 224.4.1音符和频率的关系 224.4.2定义初值 244.5音乐发声程序流程图 24第五章调试 255.1Proteus简介 255.2keil简介 255.3利用keil与Proteus进行的调试 26结论 28致谢 29参考文献 30附录 31附录一:电子琴电路原理图 31附录二:PCB电路图 32附录三:电子琴实物图 32附录四:程序清单 33引言随着现代社会科学技术的快速发展,电子技术已经改变了人们生活的各个方面。电子琴作为一种新型的键盘乐器,是音乐与现代电子科学技术发展相结合的产物,虽然没有其它乐器那么多鲜明的特点,但是电子琴的简单易学已经让它在现代音乐中占到了一个很重要的位置。而单片机具有强大的编程实现特性和灵活的控制功能,单片机成为了电子琴中不可替代的重要一部分,这次系统设计的主要任务是用STC89C52单片机作为核心控制元件,设计一个简易电子琴,主要介绍了电子琴硬件系统的组成并对相关软件程序方面做了相关的分析研究和调试。虽然单片机产生的时间并不是太长,但它的发展速度令人惊讶,它的高水平发展在集成度、可靠性、速度、应用等领域表现的淋漓精致。随着单片机性能的不断提高,单片机的应用变得更加广泛,目前它已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等多个领域。单片机技术的发展速度非常之快,目前的产品都运用于各个功能方面进行更加全面的设计研究;在社会消费的需求竞争之下,尽可能地利用单片机的最新技术来研制其应用系统,再利用单片机灵便、性价比高等特点,来确保所设计出来的产品能够具有强大的竞争力和存活力。在社会活动的各个方面中,始终都有单片机的身影;从简易的到复杂的,各个地点,凡是能看到的地方几乎都有使用单片机的需求。虽然现在单片机供应的应用已经普及开来了,但还是有许多单片机尚未涉足到的地方,因此,单片机的应用和需求在现在现代社会的运用中还是有发展的。电子琴在当前的音乐玩具市场上是一个非常好的应用方面。单片机技术可以利用软件和硬件开发出电子琴功能,从而实现电子琴的微型化,可以用作教学琴、玩具琴等。还可以对相关功能做出一些拓展。参照传统电子琴可以用键盘上的“k0”到“k8”键演奏从低So到高DO等8个音,从而可以用来弹奏喜欢的乐曲。绪论1.1设计目的及其意义单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。随着社会的发展进步,人们的生活水平也逐步提高,音乐已经成为了人们生活中很重要的一部分,在工作和学习之余,欣赏音乐不仅使身心得到放松,同时也提高人们的精神品质和个人素养。当代,爱好音乐的年轻人越来越多,也有不少人自己练习弹奏乐器,作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需花费太多精力,且其价格太过于高昂,使得一部分有这种想法的人不得不放弃这种想法,而电子琴又是一种新型的键盘乐器,是现代电子科技与音乐结合的产物,价格相对便宜,能够满足一般爱好者的需求,在现代音乐中扮演着重要的角色,简易电子琴的研制具有一定的社会意义。1.2设计方案选择实现本次设计的方案有多种,下面比较说明一下最佳方案的选择。方案一:采用单个的逻辑器件组合音乐是有由不同的音阶组成的,而不同的音阶又是由不同的按键频率发出的,那么利用不同的频率,就可以发出不同的音乐了。计数器8253可以产生任意频率的方波频率信号,因此,只要把一首歌曲的音阶对应频率与计数器的频率对应起来就可通过计数器产生音乐了。根据本实验要求,采用8279将按键上扫描得到的键值,通过查表得到相应的8253的频率值,将从8253得到相对应的按键弹奏信号经过LM386进行放大,再用喇叭输出,就实现了简易电子琴的基本功能,也就完成了实验的要求。方案二:采用STC89C52单片机作为主控芯片,设置键盘、扬声器等外围器件,另外还用到一些简单器件如:晶振、有极电容、4*4矩阵键盘及电阻等。利用按键实现音符和音调的输入,用LM386音频放大器实现低音频功率放大,最后用扬声器发音。二种方案的比较:方案一采用单个的逻辑器件组合实现。这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然,但是由于元器件种类、个数比较多,太过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。例如七个不同的音符是由七个不同的频率来控制发出的,所用仪器之多显而易见。方案二与前一种方案相比,主控芯片采用STC89C52单片机,它是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。同时具有强大的控制功能和灵活的编程实现特性,由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。而第三种方案具有经济可行性、技术可行性、实物应用性。综上所述,本次课程设计采用第二种方案。第二章系统方案确定2.1系统结构图单片机晶振电路4*4矩阵键盘单片机晶振电路4*4矩阵键盘音频处理电路复位电路电源电路抚慰系统结构图图2.1系统结构图系统图显示的是设计电子琴所需要的所有硬件结构,通过这些硬件来完成电子琴的系统设计。在下面的写作中,会详细的介绍各个模块的作用和功能。2.2软件设计流程图软件流程图如图2.2。初始化初始化扫描按键扫描按键开关?开关?图2.2软件设计流程图本系统采用STC89C52单片机作为核心处理器件,按下复位键,进入初始化,调用键盘扫面子程序,获得键值,获取定时初值,向喇叭输入相应频率的脉冲驱动,发出相应的音调,若按键没有释放,则一直发声;若按键松开,则停止发声。可以选择自动播放音乐。

2.3整体设计要求本系统的主要内容是用STC89C52单片机为核心控制元件,设计一个简单的电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。利用LM386作音频放大器,可以根据设计要求来改变功率,来控制声音的大小。先根据系统设计要求设计硬件电路和编写相应的程序,然后进行仿真调试,最后细心焊接硬件电路图,将程序拷入芯片中,最终达到设计目的。具体实现的功能:按下音符键可以发出相应的音符也可以自动播放一段音乐。2.4单片机发音选择由于单片机的强大功能,除了在测试控制领域中有着广泛的应用外,还有一些有趣的应用。比如,使用单片机可以驱动蜂鸣器或者扬声器发出声音,还可以控制其发出不同的声调,从而连接起来构成一个曲子。目前,市场上有很多种音乐模块或者音乐芯片,可以直接产生各种曲子。但是,这种模块价格比较昂贵,电路结构比较复杂。如果系统中仅需要产生简单的音符或者简短的曲子,可以使用单片机配合简单的扬声器而产生需要的音乐效果。一般说来,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐波频率。单片机演奏的音乐基本都是单音频率。因此单片机演奏音乐比较简单,只需要清楚“音调”和“节拍”2.5按键模块方案选择使用简易电子琴弹奏音乐时,需要中音区的8个音阶和低音与高音区的一部分音阶。独立式按键占用的I/O口太多,而使用4*4矩阵键盘可以仅用一个四根行输出线和四根列输入线,同时可以弹奏低音3至高音5之间的音阶,已完全满足简单的弹奏需要。所以,根据设计要求我选择的是4*4矩阵键盘,这样既节约了成本,也节约了时间,制作起来比较简单。2.6音频处理模块方案选择这次的设计主要靠扬声器最终发出声音。由于单片机驱动能力不够,在处理音符信号时,需加功率放大装置。使用LM386:LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为保证声音效果,本设计使用LM386作放大器件。2.7单片机语言程序的选择当我定了这个题目以后,我和帮助我的同学在一起讨论语言程序用哪一种,我对于汇编语言不是很懂,学的不是很好,同学就建议我用C语言来进行编程,C语言相对于汇编语言简单易懂。相比较以后,最后我选择了C语言作为我这次设计的语言程序。第三章系统主要硬件电路设计3.1单片机控制系统原理3.1.1芯片选用STC89C52芯片的最小系统如图3.1。图3.1单片机最小系统STC89C52是由STC公司生产一款功耗低、性能高的8位微控制器,兼容MSC51指令系统,8K可反复擦写FlashROM。在单块芯片上,具有8位CPU和可编程的Flash,使得STC89C52能为大多数嵌入式控制体统提供灵活度且有效的解决方案。3.1.2芯片引脚介绍(1)电源引脚电源引脚用于是接入单片机的工作电源。Vcc(pin40):电源接入,接+5V电源。Vss(pin20):接数字地。(2)时钟引脚XTAL1(pin19):片内振荡电路的输入端。当使用片内振荡器时,此引脚接微调电容和石英晶体;当采用外接时钟源时,引脚接振荡器信号。XTAL2(pin20):片内振荡电路的输出端。当使用片内振荡器时,和pin19的接法一样;当采用外部时钟源时,此引脚悬空。(3)控制引脚RST(pin9):复位信号输入端,引脚上出现2个机器周期的高电平时单片机复位。Vpp具有第二引脚功能,当对片内Flash进行编程时,此引脚接入编程电压。ALE/PROG(pin30):用于地址锁存。若访问外部程序存储器(ROM)和数据存储器(RAM),ALE将用于锁存低8位的地址。此时,ALE仍会以时钟振荡频率的1/6输出一个固定的脉冲信号,因此它可用于对外输出时钟或定时。但是要注意:每次访问外部数据存储器(RAM)时需要跳过一个ALE脉冲。进行Flash存储器编程时,此引脚还可用于输入编程脉冲(PROG)。此外,还可通过对特殊功能寄存器(SFR)中的8EH单元的D0位置位,可以禁止ALE操作。该位置位后,只有MOVX和MOVC指令才能把ALE激活。此外,该引脚将会被拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN(pin29):片外存储器读选通信号,低电平有效。EA/Vpp(pin31):程序存储器的内部读选通。接低电平从外部存储器读取指令,若接高电平从内部程序存储器读取指令。(4)并行I/O口引脚(32根)STC89C52有4组8位可编程的I/O口,分别为P0、P1、P2、P3口,共32根。P0口(pin39~pin32):8位双向I/O口线,分别为P0.0~P0.7。P0口是一个漏极开路的I/O口。作为输出口,每一位均可以驱动8个TTL负载。当对P0端口写入“1”的时侯,该引脚可以用作高阻抗输入。当访问外部程序存储器或者数据存储器时,P0口也被作为地址总线(低8位)和数据分时复用。在这种模式下,P0不需要外加上拉电阻。P0口也可以作为I/O口使用,也可以用来接收指令字节;在程序校验时,输出指令字节,此时需要加10K~4.7K的外部上拉电阻。P1口(pin1~pin8):8位准双向I/O口线,分别为P1.0~P1.7。P1口内部具有上拉电阻,P1口输出缓冲器能够驱动4个TTL逻辑电平。若对P1口写入“1”的时候,内部上拉电阻就会把端口拉高,此时可以用作输入口。当作为输入口使用时,被外部拉低的引脚因为其内部电阻,将输出电流。此外,P1.0和P1.2分别可以作定时器/计数器2的外部计数输入和定时器/计数器2的触发输入。具体如下表1-1所示。在Flash编程和校验时,P1口用于接收低8位地址。表1-1P1口引脚第二功能引脚第二功能说明P1.0T2计数输入,时钟输出P1.1T2EX捕捉/重载触发信号P1.5MOSI在线系统编程用P1.6MISO在线系统编程用P1.7SCK在线系统编程用P2口(pin21~pin28):8位双向I/O口线,分别为P2.0~P2.7。P2输出缓冲器能够驱动4个TTL逻辑电平。当对P2端口写入“1”的时候,内部上拉电阻就会把端口拉高,此时就可以作为输入口使用。当作为输入使用时,被外部拉低的引脚因为其内部电阻,就会输出电流。在访问其外部ROM或用16位地址读取外部RAM时,P2口就会送出高八位地址。此时,P2口利用内部上拉发送“1”。当使用8位地址,访问其外部数据存储器(RAM)时,P2口将会输出P2锁存器的内容。在Flash编程或者校验时,P2口也用于接收高8位地址和某些控制信号。P3口(pin10~pin17):8位双向I/O口线,分别为P3.0~P3.7。P3口其内部具有上拉电阻,P2口输出缓冲器能够驱动4个TTL逻辑电平。当对P3口写入“1”的时候,内部上拉电阻就会把端口拉高,此时就可以作为输入口使用。当作为输入使用时,被外部拉低的引脚因为其内部电阻,将会输出电流。P3口也作为STC8C52具有第二功能的引脚使用,如下表2-2所示。当然,在Flash编程和校验时,P3口也接收某些控制信号。表2-2P3口引脚第二功能P3.0RXD串行输入口P3.1TXD串行输出口P3.2INT0外中断0P3.3INT1外中断1P3.4T0定时/计数器0P3.5T1定时/计数器1P3.6WR外部数据存储器写选通P3.7RD外部数据存储器读选通3.1.3STC89C52时钟介绍STC89C52内部有一个高增益的反相放大器,此放大器用于构成振荡器,其引脚TXD和RXD分别是这个放大器的输出端和输入端。STC89C52的时钟可以由内部方式产生,也可以由外部方式产生。其内部方式的时钟电路如图3.2(a)所示,在TXD和RXD引脚上接定时元件,其内部振荡器就会产生自激振荡。定时元器件一般采用石英晶体和电容组成并联谐振回路。晶体振荡频率选择范围为:1.2~12MHz,电容值范围为:5~30pF,电容频率起到微调的作用。XTAL1XTAL2外部振荡器时钟采用外部方式连接的电路如图3.2(b)所示,TXD接外部振荡器,RXD接地。对外部振荡信号没有特殊要求,只需要保证脉冲的宽度,所以一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供XTAL1XTAL2外部振荡器XTAL1XTAL1XTAL2(a)内部方式时钟电路(b)外部方式时钟电路图3.2时钟电路3.2晶振电路单片机的时钟信号用来提供单片机内各种位操作的时间基准,时钟信号通常有两种电路形式得到:内部振荡方式和外部振荡方式。时钟电路如图3.3所示。图3.3时钟电路在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部震荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。晶振通常选用6MHz、12MHz或者24MHz。本设计中采用的是12MHz。电容器C1、C2起稳定振荡频率、快速起振的作用,电容值一般5~30pF。内部振荡方式所得的时钟信号比较稳定,电路中使用较多。3.3复位电路系统复位电路如图3.4。图3.4复位电路复位操作完成单片机内电路的初始化,是单片机从一种确定的状态开始运行。当单片机的复位引脚RET出现5ms以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。因此要求单片机复位后能脱离复位状态。根据应用要求,复位操作通常有2种基本形式:上电复位、开关复位。上电复位要求接通电源后,自动实现复位操作。开关复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。上电后,由于电容要充电,是RST持续一段时间高电平时间。当单片机已经在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择C=10~30uF,R=10~1kᾨ3.4音频处理模块3.4.1LM386简介LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。LM386特性:静态功耗低,约为4mA,可用于电池供电;工作电压范围宽,4V-12V或5V-18V;外围元件少;电压增益可调,20-200;低失真度。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。LM386应用电路原理图如图3.5所示。图3.5LM386应用电路图LM386的封装形式有塑封8引线双列直插式和贴片式。图3.6LM386的封装形式电压增益内部设置固定为20倍。如果在①脚与⑧脚外接电容器,可增加到200倍,外围元件少效率高。在音响要求不高的设备中得到广泛运用

1、R3和R18是用来分压的。因为单片机输出电平是TTL电平,电压太高,所以通过两个电阻分压。

2、从VOUT到LS1接电容C17是输出电容,用来隔直流。如果不加,很易烧坏喇叭

3、R19不是单独用的,它与C18组成高频滤波,滤除高频信号。

5、VS是电源,两个并联电容是滤波用的。

3.5键盘控制电路3.5.1矩阵键盘的概述本系统采用的是非编码键盘中的矩阵键盘。矩阵键盘也称为行列式键盘,一般用于按键数目较多的场合。它是由行和列组合而成,一组是行线,另一组是列线,按键就位于行和列的交叉点。如图8所示,一个4*4的矩阵键盘,有16个按键,我们分别用着16个键来模拟电子琴的按键:低音3、4、5、6、7;中音1、2、3、4、5、6、7;高音1、2、3、4。可以很明显地看出,较独立键盘而言,矩阵式键盘节省了I/O口线。图3.54*4矩阵式键盘接口3.5.2矩阵式键盘按键识别原理及方法若矩阵键盘中没有按键按下,那么键盘的行线就会处于高电平;若有键按下时,行线电平的状态由和它相连的列线的电平决定。假设列线电平为低电平那么行线电平则为低电平;反之,同理。这一点就是识别矩阵式键盘哪个按键按下的关键所在。由于矩阵式键盘的行线和列线被多键共用,所以各按键会相互影响,因此必须将行线和列线的信号配合,才能确定闭合键的位置所在。矩阵式键盘一般有两种识别方法,它们分别是扫描法和线反转法。首先,我们来介绍一下扫描法。它识别按键可以分为两步:第一步,识别有没有按键按下;第二步,若有键按下,确定按下键的具体位置。举个简单的例子来说明这个过程。第一步,识别有没有按键按下。先将所有的列线都置为0电平,接着检查各行线是不是都是高电平,若不全是高电平,说明有按键按下,否则就没有。例如,当按键2被按下,第一行的行线为低电平,但是我们不能确定是哪个键被按下了,若是同一行的1、3、4键被按下,第一行也会呈现低电平,因此我们只能得出第一行有键被按下。第二步,确定哪个键被按下。采用扫描法,在某个时刻只让一条列线处于低电平,其他所有列线都处于高电平。当第1列为低电平的时候,其他各列均处于高电平时,因为是2键被按下,所以第1行仍高电平。而当第二列为低电平的时候,其他各列均为高电平,第1行的行处于低电平,故可以判断第1行第二列的交叉处有键被按下,即2号键被按下。综上所述,扫描法的思想就是,先把某一列置为低电平,其他的各列均为高电平,然后检查各行线的变化,若某行线为低电平,则可以确定被按下的键处于此行此列的交叉点上。本系统采用的就是扫描法。其次,我们再简单的介绍一下线反转法。扫描法要一列一列的去扫描查询,若被按下的键处于最后一列时,需要经过多次才能获得正确的行列值。而线反转法则很简练,不论是哪个键被按下,均只需要两步就可以知道是哪个键被按下了。具体操作步骤如下:第一步,让行线编程为输入线,列线均为输出线,并使输出线全部为低电平,那么行线中电平由高变为低的行,就是按键所在的行。第二部,把行线全部变成为输出线,列线编程为输入线,并使输出线全部为低电平,则列线中由高电平变为低电平的列,就是按键所在的列。综上所述,可以确定按键所在的行和列,从而得出按键所在位置。因此,线反转法非常的简单适用,但是在实际的编程中不要忘记还要进行按键去抖动处理。3.6音频放大电路系统音频放大电路如图3.7所示。图3.7音频放大电路通过LM386音频放大器来对声音音频进行放大,得到系统所需要的,然后由软件编程的程序发出相应的音符,通过扬声器把声音传递出来。第四章软件部分4.1音乐产生原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,只需将一首歌的音阶和频率相对应即可。4.2音阶产生方法本系统主要是要实现由单片机控制的简单的音乐发生器,矩阵键盘代表16个不同的音阶,用户可以根据乐谱在键盘上弹奏出音乐,通过喇叭将音乐播放出来。4.3利用单片机实现音乐节拍物体规则震动发出的声音称为乐音,音乐听起来有高、有低,这就是音高,发声物体的振动频率决定着音高。频率低声音就会低,频率高声音就会高。不同的音高的乐音分别用1、2、3、4、5、6、7来表示,这七个乐音名分别念成:DO、RE、ME、FA、SO、LA、SI,这就是唱曲时乐音的发音,我们把它称作唱名。音持续的时间长短,通常用节拍来表示。一首歌通常有不同的音符表示,不同的音符对应着不同的频率,不同频率的组合加上节拍就构成了音乐。节拍实际上就是音持续时间的长短,在单片机中我们可以利用延时来实现。如果是四分之一节拍就延时0.4s,那么一拍就延时1.6s。只需要知道四分之一节拍需要延时多久,其他的节拍就是它延时的倍数了。如果要单片机自己放音乐就要在程序中设置节拍的延时时间,但是此系统是简易的电子琴,只需要用户自己弹奏时把握节拍就可以了,不需要程序设置。对于不同的曲调我们可以由单片机的定时器/计数器来实现音乐,一个节拍为单位(C调),如表3-3所示:表3-3音乐节拍表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms4.4用单片机产生音频脉冲4.4.1音符和频率的关系用单片机播放音乐亦或是弹奏电子琴,实际上就是按照一定的频率,输出一连串的方波。为了输出适合的方波,首先我们应该知道音符与频率之间的关系。注意观察一下几个6(LA)的频率,它们都是整数,很容易看出成2倍的关系。其它的音符也是一样的。如220、440等这些频率,它们在琴键上的位置是统一的,不论是电子琴、钢琴还是手风琴,都是一样的。包含黑键和白键在内的所有音符的频率数值都是成“等比数列”的关系,因此它们之间有一个公比q,可以按照“2倍”的规律推算出来。例如:已知最低音的6(LA)的频率是220Hz,我们设它的公比为q,则可以推出7(SI)的频率为220*q*q。因为6(LA)、7(SI)之间隔了一个黑键,所以要乘以两个q。以此类推,两个6之间,一共有12个琴键,可以得出:220*q*q*q*q*q*q*q*q*q*q*q*q=440。马上就可以得出,12个q相乘,等于:440÷220=2。可以求出q=2,q的12次方根为:1.059463094。

用这个公比q,和已知的220进行计算,我们就可以得出全部琴键所对应的频率,如表4-4所示表4-4音符和频率的关系音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1DO26263628#4FA#74064860#1DO#27763731中5SO78464898低2RE29463835#5SO#83164934#2RE#31163928中6LA88064968低3M33064021#693264994低4FA34964103中7SI98865030#4FA#37064185高1DO104665058低5SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400

#2RE#124565134#646664463高3M131865157低7SI49464524高4FA139765178中1DO52364580#4FA#148065198#1DO#55464633高5SO156865217中2RE58764684#5SO#166165235#2RE#62264732高6LA176065252中3M65964777#6186565268中4FA69864820高7SI1967652834.4.2定义初值用单片机来模拟产生音符,只需要计算出音频的周期T=1/f,利用音频的变化来产生不同的电平,从而驱动喇叭发声。利用STC89C52的内部定时器使它工作在计数器的模式下,工作方式设为“1”,改变TH0和TH1来产生不同的频率,从而产生不同的音阶。比如:频率为中音DO(532Hz),它的周期为:T=1/532=1912us,所以计数器只需要计数:956us/1us=956次,每一次计数956次时将I/O口反向,我们就可以得到我们所需要的音阶中音(DO)了。计数脉冲和频率的关系式:N=fi÷2÷fr上式中的N为计数值,fi为机器频率,fr为想要产生的频率。计数的初值T求法如下:T=65536-N=65536-fi÷2÷fr例如:K=65536,fi=1MHz,求低音DO(261Hz),中音DO(523Hz),高音DO(1046Hz)的计数值。T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-50000/fr低音DO(261Hz)的T=65536-50000/261=63627中音DO(523Hz)的T=65536-50000/523=64580高音DO(1046Hz)的T=65536-50000/1046=65059采用12MHz的晶振,音符与计数值T0的关系如表6所示。本系统主要用到的音符为低音:3、4、5、6、7,中音:1、2、3、4、5、6、7,高音1、2、3、4;用到频率分别为:64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178。4.5音乐发声程序流程图主程序流程图如图所示识别按键功能按键是识别按键功能按键是否按下?开始去抖动扫描按键位置N做一次按键处理,播放相应的音符或音乐按键按下?Y 图4.1主程序流程图图4.1主程序流程图第五章调试5.1Proteus简介Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。

该软件的特点:①全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

③目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

④支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真51、AVR、PIC。5.2keil简介单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为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语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。5.3利用keil与Proteus进行的调试打开keil,建立工程,输入程序编译和生成hex文件,如图5.1所示图5.1利用keil进行编译打开Proteus,设计硬件仿真电路图,见图5.2图5.2仿真电路图4.导入hex文件,见图5.3图5.3导入hex文件将鼠标置于电路图中STC89C52器件上,右击后再左击,弹出图5-3中的对话框,在红线框中导入dzq.hex文件。5.点击面板左下角的,开始调试如图5.4。图5.4仿真过程图将程序导入芯片以后,点击面板左下角的开始按键,程序就可以开始仿真了。系统的功能有两个,一个是把开关SW1扳到上面的位置时,可以自由的弹奏琴键,键盘会发出相应的音符,可以自己弹奏喜欢的音乐。二是把开关扳到下面的位置时,可以播放里面设定好的音乐。结论将程序导入STC89C52芯片,调试成功后,可任意弹奏自己想要的旋律。这次设计通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得要求的音阶,最终可随意弹奏想要表达的音乐。说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样就可以利用不同的频率的组合,即构成了所想要的音乐,也可以把一首歌曲的音阶对应频率关系弄正确,然后利用功放电路来将音乐声音放大确知自己所弹的音符。通过这次课程设计,我感觉收获了很多:首先,通过实践,加深对单片机系列知识及其系统的认识。这个设计题目并不是新的,但从中能体现到一个系统开发设计的过程,足于让我们受益。第二,通过设计学习到了很多软件的使用。本次设计,软件部分用到了protues进行硬件设计,用keil进行程系编译,用protel进行制板。第三,提高了自己的动手能力。动手在一定程度上反映了一个人的能力,作为当代大学生,社会要求的我们不是只能说而不能做的人才;这次设计更让我清醒地认识到,实际动手能力无比重要。从这次实物制作中,我的动手能力提高了。感谢学院给了我这次实践动手的机会,更感谢我的老师段老师教了我们单片机相关知识。本系统设计还可以扩展其他功能,比如可以利用显示模块来显示所弹奏的音符,在比如记忆功能,即可以存储弹奏者所弹奏的音乐且保存,待弹奏完后播放给弹奏者听。还可以做得更加娱乐一点,增加一些彩灯使彩灯随着音调变化而产生不同的样式。致谢

这次毕业论文能够得以顺利完成,是曾经指导过我的老师,帮助过我的同学,一直支持着我的家人对我的教诲、帮助和鼓励的结果。我要在这里对他们表示深深的谢意!

首先,要特别感谢我的指导老师——段德功老师。段老师在我毕业论文的撰写过程中,给我提供了极大的帮助和指导。从开始选题到中期修正,再到最终定稿,段老师给我提供了许多宝贵建议。老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。

其次,要感谢所有曾经教我们电子信息的任课老师,老师们教会我的不仅仅是专业知识,更多的是对待学习、对待生活的态度。

第三,感谢我的父母亲,你们是我力量的源泉,只要有你们,不管面对什么样的困难,我都不会害怕,谢谢你们对我的支持与鼓励!

再次,感谢我的室友及其他好友,因为有你们的帮助,我的论文得以顺利完成。感谢你们,大学四年给我了那么多的帮助与鼓励,在我不开心的时候,总能让我开心起来。不会忘记,大学四年里我们一起度过的欢乐时光,那些开心的日子,总是那么令人难以忘怀。

最后对老师、同学和家人再次致以我最衷心的感谢!教导过我的老师,你们的人格魅力永记我心间。身边的同学和朋友,有你们,我的大学才算完整。寝室的好友,你们的天赋犹如上天恩赐,有了你们我的生活更加精彩。参考文献[1]李广弟,朱月秀,冷祖祁.单片机基础.北京航空航天大学出版社[2]马忠梅,籍顺心,张凯等.单片机的C语言应用程序设计(第四版).北京航空航天大学出版社[3]周航慈.单片机应用程序设计技术(第三版).北京航空航天大学出版社,2011[4]高玉芹.单片机原理与应用及C51编程技术.机械工业出版社,2011年[5]徐煜明.C51单片机及应用系统设技.电子工业出版社,2009年[6]常喜茂,孔英会.C51基础与应用实例,电子工业出版社2009年[7]王景景.单片机原理及应用.机械工业出版社,2010年[8]李建忠.单片机原理及应用.西安电子科技大学,2002年[9]贺敬凯,刘德新.单片机系统设计、仿真与应用-基于keil和proteus仿真平台.西安电子科技大学,2011年[10]熊建平.基于proteus电路及单片机仿真教程.西安电子科技大学,2013年[11]周润景.Proteus在MCS-51&ARM7系统中的应用.电子工业出版社,2006年[12]王守中.51单片机开发入门与典型实例.人民邮电出版社,2007年[13]陈权昌.单片机原理及应用.华南理工出版社,2007年[14]胡宴如.模拟电子技术.高等教育出版社,2006年[15]陈权昌.单片机原理及应用.华南理工大学,2007年附录附录一:电子琴电路原理图图简易电子琴电路原理图附录二:PCB电路图图电子琴PCB电路附录三:电子琴实物图附录四:程序清单#include<reg51.h> #defineucharunsignedchar #defineuintunsignedint uintkey,i,j,time,m,k; uchartemp; ucharSTH0,STL0,STH1,STL1; sbitsw=P2^7; sbitspeaker=P2^4; sbitP37=P3^7; sbitP36=P3^6; sbitP35=P3^5; sbitP34=P3^4; //樱花数据表 codeunsignedcharsszymmh[]={6,2,2,6,2,2,7,2,4,6,2,2,6,2,2,7,2,4,6,2,2,7,2,2,1,3,2,7,2,2,6,2,2,7,2,1,6,2,1,4,2,4,3,2,2,1,2,2,3,2,2,4,2,2,3,2,2,3,2,1,1,2,1,7,1,4,0,0,0 }; //音阶频率表高八位 codeunsignedcharFREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, }; //音阶频率表低八位 codeunsignedcharFREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i 0xEE,0x44,0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, }; unsignedintcodetab[]={64021,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178,65217}; voidkey_music() { P3=0xff; P34=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=0; break; case0x0d: key=1; break; case0x0b: key=2; break; case0x07: key=3; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } TR0=0; } } P3=0xff; P35=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) { temp=P3; temp=temp&0x0f; switch(temp) { case0x0e: key=4; break; case0x0d: key=5; break; case0x0b: key=6; break; case0x07: key=7; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp&0x0f; while(temp!=0x0f) {

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论