基于单片机的简易电子琴毕业设计资料.docx
《基于单片机的简易电子琴毕业设计资料.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易电子琴毕业设计资料.docx(32页珍藏版)》请在冰豆网上搜索。
基于单片机的简易电子琴毕业设计资料
( 2015 届)
毕业设计
题目:
基于单片机的简易电子琴设计
姓 名:
林初丰
专 业:
电气工程及其自动化
班 级:
电气N111
学号:
201145679226
指导教师:
程海玉
导师职称:
讲师
嘉兴学院南湖学院教学事务管理中心
年 月 日
诚信声明
我声明,所呈交的设计是本人在老师指导下进行的研究工作及取得的研究成果。
据我查证,除了文中特别加以标注和致谢的地方外,设计中不包含其他人已经发表或撰写过的研究成果,也不包含为获得嘉兴学院南湖学院或其他教育机构的学位或证书而使用过的材料。
我承诺,设计中的所有内容均真实、可信。
设计作者签名:
签名日期:
年月日
授权声明
学校有权保留送交设计的原件,允许设计被查阅和借阅,学校可以公布设计的全部或部分内容,可以影印、缩印或其他复制手段保存设计,学校必须严格按照授权对设计进行处理,不得超越授权对设计进行任意处置。
设计作者签名:
签名日期:
年月日
基于单片机的简易电子琴设计
摘要
本设计核心内容是关于基于AT89C51单片机的简易电子琴设计。
系统由单片机AT89C51、独立键盘模块、功率放大模块、扬声器、数码管所组成。
其软件部分主要有主程序模块、播放模块、按键模块、显示程序。
本设计首先要对AT89C51单片机有一定的认识,继而按照电子琴功能制作出硬件电路并编写源程序,最后对其进行仿真调试。
系统带有10个独立按键,其中8个独立按键分别代表8个音符,8个按键每个按键在数码管也会对应一个字符来指示用户所按下的按键,还有两个为功能按键按键。
同时本系统还带有一个存储播放音乐的功能,使用者可以通过按下功能按键来播放存储的歌曲,系统会把用户程序内存储的音符进行播放,在自动播放的过程中如果按下另外一个功能按键则中断播放歌曲。
本次设计的主要优点有硬件电路结构简单易实现,电子琴所需功能基本具备,系统稳定可靠.
关键词:
at89c51,电子琴,弹奏
Designofasimpleelectronicorganbasedonsinglechipmicrocomputer
Abstract
ThisdesignisthecorecontentofsimpleelectronicorganbasedonAT89C51isdesigned.SystembysinglechipmicrocomputerAT89C51,independentkeyboardmodule,poweramplificationmodule,speaker,digitaltube.Itssoftwarepartmainlyhasthemainprogrammodule,themodule,keysmodule,displayapplications.
ThisdesignmustfirsthaveacertainunderstandingofAT89C51,thenaccordingtotheelectronicorganfunctionsproducehardwarecircuitandtheprogramsarethesource,finallycarriesonthesimulationdebugging.Systemwith10independentkey,includingeightindependentkeysrepresenttheeightnotes,eachkeyeightbuttonsinthedigitaltubewillalsocorrespondstoacharactertoindicatetheuserpressthebutton,andtwoforthekeybutton.Simultaneouslythissystemalsocomeswithastorageplaythefunctionofmusic,theusercanpressthefunctionbuttontogoodsongs,storagesystemwillstoretheuserprograminthenotestoplay,intheprocessofautomaticplaybackifpressbuttonsonanotherfunctionistheinterruptplaysongs.Thedesignofthemainadvantageofthehardwarecircuitstructureissimpletoimplement,electronicorganfunctionbasically,thesystemisstableandreliable.
Keywords:
At89c51,electronicorgan,playing,recording.
1绪论
1.1单片机背景
单片机是经典的嵌入式微控制器(MicrocontrollerUnit),缩写为MCU,最早是被利用于工业控制领域。
因为在工业控制领域单片机有着广泛的应用,所以诞生了单片机开发板这样的系统使更多的产品开发人员、业内人士、学生来学习单片机这门技术,其中比较出名的单片机开发板有电子人DZR-01A。
单片机是从芯片内部仅有的特殊处理器发展起来的,它最开始的设计思路是将CPU与大量的外围设备通过一个微处理器集成在一起,从而使得计算机系统变得更迷你,组装到繁杂的且对体积要求比较小的控制装备之中更简单。
Zilog公司的Z80便是最早使用这种设计思想做出来的的cpu,自此以后,单片机和计算机CPU的发展便成为了两个不同的方向。
早期的单片机都是8位或4位的,当中做的最好的是英特尔的8031,因为简单稳定和不错的性能而获得了广大好评。
此后,英特尔又在8031的基础上发展出了MCS-51系列的单片机系统。
由于这一单片机系统的简单可靠,直到现在还在被人们广泛的使用。
随着技术的发展,工业控制领域的要求越来越高,便出现了16位单片机,但是因为性价比不高所以没有得到大量的应用。
随着电子消费产品的大发展,单片机技术在90年代后也得到了很大提升。
随着英特尔i960系列和ARM系列的广泛应用,16位单片机的高端地位也被32位单片机迅速取代,自此32位单片机进入主流市场。
同时传统的8位单片机性能也得到了很大的提升,比80年代的处理能力提升了数百倍。
现在,高端的32位单片机主频已经超越了300MHz,其性能已经相当于90年代中期的专用处理器,而其价格也降低了很多,普通的型号出厂价格只需1美元,最高端的型号的单片机也只要10美元。
现在的单片机系统已经不是只在裸机环境下使用和研发,单片机开始广泛应用海量的专用的嵌入式操作系统。
甚至有些作为手机和掌上电脑核心处理的高端单片机已经可以直接应用专用的Windows操作系统和Linux操作系统。
对于嵌入式系统来说,单片机比专用处理器更加适合应用,所以它在这方面得到了最多的应用。
事实上,单片机这一计算机类别是世界上数量最多的计算机,因为它出现在现代人类生活中所用的几乎所有机械与电子产品中。
电子玩具、家用电器、计算器、电话、手机、掌上电脑以及鼠标等电脑配件中都会配有1-2块单片机,个人电脑中也会拥有不少数量的单片机在运作。
普通汽车上都会装备40多块单片机,而复杂庞大的工业控制系统中甚至会发生数百块单片机同时运行的情况!
单片机相当于把一个复杂的计算机系统浓缩到一个微小的芯片上,它计算机相比只缺少了输入/输出设备,所以可以把它看作一个微型的计算机。
可以概况的讲成:
一块相当于一台计算机的芯片。
它的质量轻、体积小、价格便宜、为开发、应用和学习提供了便利条件。
所以,如果你想要了解计算机原理与结构,那么学习使用单片机是最简单的选择。
1.2单片机电子琴应用
而电子琴是大规模集成电路和音乐结合的产物,它因为能模拟各种乐器的音色而受到群众们喜爱。
本设计制作了一种除了有普通电子琴弹奏功能外,还拥有一种存储播放乐曲功能。
本设计是以AT89C51单片机作为一个简单电子琴系统设计的核心部件,其原理是因为每个表有固定的振动频率,所以可以利用89C51单片机内部的定时/计数器改变计数值来产生各个音调对应的方波频率来驱动扬声器播放出不同音调。
这仅仅只是单片机应用的一个点,希望能由点到面,更好的了解和应用单片机技术。
2电子琴方案设计
2.1设计要求
利用AT89C51单片机作为主要控制元件设计一个简单按键式的电子琴系统。
要求可以弹奏出8种基本的音调,包括中音段的Do、Re、Mi、Fa、SO、La、Si全部音符和高音Do,弹奏键盘的同时扬声器会产生当前的播放音调,数码管会显示出所对应的数字,以便于培养乐感。
而且要有一个功能按键,按下此按键可以自动播放已存储的歌曲,在自动播放的过程中如果按下停止键则中断播放歌曲,另外还可适当调节音量的大小。
2.2电子琴设计方案
电子琴的硬件总体设计框架和系统思路拟采用以下模块结构,如图1所示。
图1系统结构框图
系统由AT89C51单片机、独立键盘、音频功率放大模块、扬声器、数码管、存储播放模块所组成。
键盘模块的8个弹奏按键分别代表8个音调,使用者按下每个按键,单片机就会产生每个音调对应频率的方波,并且通过音频功率放大模块驱动扬声器发出对应的声音。
用户按下每个弹奏按键时,数码管也会将每一个对应字形显示出来。
这个电子琴系统还设有存储播放功能,当用户按下功能按键来切换到特定播放音乐模式时,单片机就会把用户事先存储好的乐曲进行播放,在自动播放的过程中如果按下停止键则中断播放歌曲。
本次设计采用AT89C51单片机的两个定时器(如T0,T1)控制频率,在P1.0引脚上输出方波周期信号,产生声音,按下不同的模拟按键就会产生不同的音符,所以使用者可以通过本电子琴系统畅所欲为的弹奏自己想要弹的乐曲。
因为一首乐曲是由许多不同的音调组成的,而每个音调都有其一一对应着的不同频率,所以需要组合各个不同的频率来构成所想要得到的歌曲了。
但是对于单片机来说,想要产生不同的频率非常便捷,因为如果单片机某个引脚输出的高低电平的频率和某个音调的频率一样,那么在此引脚接上扬声器就可以发出和此音调相同的声音,所以在单片机上想要产生规定频率的方波信号只要先在某一口线输出高电平,接着延迟一小段时间输出低电平,这样重复循环的输出信号就会产生一个规定频率的方波,简单来说就是通过定时/计数器T0改变输出信号延迟的时间来改变输出方波的频率。
因此,想要通过单片机得到一个音调,只要找到这个音调对应频率即可。
而播放歌曲部分,需要在编程的时候将每一音调的时间常数作为一组,延时节拍常数再作为一组,将乐曲中的所有常数按照固定顺序排列成一个表,通过循环语句依次播放,就能产生具有一定节奏的音调,就可以实现播放歌曲了。
3硬件设计
3.1单片机
3.1.1AT89C51简介
AT89C51是一种闪速存储器,内置的高性能CMOS微处理器芯片具有低电压、低功耗的特点,在其内置的通用的Flash和8位CPU的帮助下,使其功能非常的强大。
89c51是用静态逻辑设计的,跟8051相比,它还带有省电模式,即休闲方式和掉电方式。
它用FlashROM替换了ROM/EPROM,但是芯片外部引脚和指令系统却是与早期的8051/8751/8031完全兼容。
由于内部使用了FlashROM,单片机的开发及应用就别以前更加简单了。
外形及引脚排列如图2所示。
3.1.2主要的功能特性
1.4K字节可编程闪烁存储器
2.与MCS-51兼容
3.寿命:
1000写/擦循环
4.数据保留时间:
10年
5.全静态工作:
0Hz-24Hz
6.三级程序存储器锁定
7.128*8位内部RAM
8.32可编程I/O线
9.两个16位定时器/计数器
10.5个中断源
11.可编程串行通道
12.低功耗的闲置和掉电模式
13.片内振荡器和时钟电路
图2AT89C51
3.1.3I/O端口介绍
P0口:
每一个P0接口引脚可以接受8个TTL门电流。
它的工作原理是当更改P0口的管脚电平,当P0口的管脚的电平被改写为1的时候,此时P0口的输出状态就被定义为高阻输出。
如果通过端口对单片机的Flash进行编程的时候,P0接口可以作为一个源代码的输入端口,就相当于输入端,而在对单片机的Flash进行校验的时候,P0接口可以作为一个源代码的输出端口,此时P0端口的外部必须接一个上拉电阻。
除此之外,P0端口还能够外部程序数据的储存器,这时P0引脚的作用与之前的有所不同,其功能被重新定义为数据地址的低8位。
P1口:
P1口作为一个其内部自带上拉电阻的一个8位的双向I/O接口,可以作为一个缓冲器来使用,当它作为缓冲器的时候能够接受4个TTL门电路的电流缓冲器。
而当P1口的管脚的电平被改写为1的时候,其内部的电平也跟着被拉高,而这个时候,P1口可以作为输入口来输入电流。
相反,如果当P1口的管脚的电平被改写为0的时候,P1口可以作为输出口来输出电平,这是因为其内部上拉的缘故。
P1口还有一种功能就是作为低八位地址接收数据,而在实现这个功能时只有在内部的Flash在进行编程和校验。
P2口:
P2口的作用基本和P1口相同,其内部和P1口一样,也是一个自带上拉电阻的8位双向I/O接口,同样也可以作为一个缓冲器来使用。
与P1口不同的是,P2口在作为缓冲器的时候能够同时接受或输出4个TTL门电路的电流缓冲器。
跟P1相同,当P2口的管脚的电平被改写为1的时候,其内部的电平也跟着被拉高,而这个时候,P2口就作为输入口来输入电流。
相反,如果当P2口的管脚的电平被改写为0的时候,P2口就作为输出口来输出电平。
P3口:
P3口管脚的内部也集成了8个同样拥有上拉电阻功能的双向I/O接口。
其功能大致与P2口、P1口相同,能够同时接受或者输出4个TTL门电流。
当P3口的电平被改写为高电平的时候,其内部的电平会在其内部上拉电阻的作用下变成高电平,当P3口的电平被改写成低电平的时候,内部电平也被下拉为低电平,这时候的P3口将输出ILL电流。
P3口也可作为特殊功能口,如下所示:
P3.0串行输入口
P3.1串行输出口
P3.2外部中断0
P3.3外部中断1
P3.4T0外部输入
P3.5T1外部输入
P3.6外部数据存储器写选通
P3.7外部数据存储器读选通
3.1.4定时/计数器的应用
AT89C51单片机内部有两个定时/计数器,它们实际上是个16位加1计数装置。
它对片内振荡器输出的脉冲计数时称为定时器,对外部脉冲信号计数时称为计数器。
当对单片机片内振荡器输出的脉冲计数时,每隔一个机器周期定时器就加1计数值,当计数值计满溢出时计数完毕并通知单片机。
改变AT89C51的定时器里面的特殊功能寄存器TH0及TL0在模式1下的计数值,便会产生不同方波频率,然后通过扬声器产生对应的音调。
例如,需要频率为1046Hz时,其周期为T=1/1046=956μs,因此只要令定时/计数器计数956/2=478次,相应的取反输出也是478次,就可得到高音DO(1046Hz)。
脉冲计数值与频率的关系式为:
(3-1)
此式中,N是计数值;fi是单片机计数频率(采用12MHz晶振时,经12分频后其输出频率为1MHz);fr为所需要转换的频率。
其计数初值T的求法如下:
(3-2)
公式中K为单片机的定时/计数器在模式1下的最大计数值,即K=2^16=65536;所以可以根据这个公式算出T值:
(3-3)
例如,中音DO的fr为523,那么它的计数值就为T=65536-500000/523=64580
从网上查阅到各音调对应的频率,并通过计算解出T值,最后得到下表:
表1各音调频率(HZ)与计数值T的对照表
音调
频率
T值
中1DO
523
64580
中2RE
587
64633
中3MI
659
64732
中4FA
698
64820
中5SO
784
64898
中6LA
880
64968
中7SI
968
65030
高1DO
1046
65058
所以可设置定时器初值变化以产生相应频率的定时
unsignedcharcodeyinfu[]={0xfb,0xe9,//Do
0xfc,0x5c,//Re
0xfc,0xc1,//Mi
0xfc,0xef,//Fa
0xfd,0x45,//So
0xfd,0x92,//La
0xfd,0xd0,//Si
0xfd,0xee,//Do#
0x00,0x00//音调间的间隔}
而歌曲的节拍部分,采用了一个15MS的延时,对它进行循环来达到节拍的作用。
3.2按键设计
本设计共含有10个按键,其中8个按键分别接着P2.0~P2.7引脚,代表着8个音符。
当按下这八个按键其中一个按键时,数码管也会显示一个与音调对应的数字来指示用户所按下的按键。
而另外两个按键为功能按键,按下可播放已存储的歌曲,另一个按下可中断播放音乐。
这两个功能按键连接着的引脚分别是P3.2、P3.3。
如图3所示。
图3键位图
3.3LED数码管
3.3.1数码管的驱动方式
若要使数码管正常发光,就必须使用驱动电路来驱动数码管的各段发光二极管,然后通过不同的组合得到想要的数字。
而数码管的驱动方式又可以分为两种,分别是静态式和动态式。
①静态显示驱动:
静态驱动也被叫作为直流驱动。
直流驱动是指每一段数码管都由一个单片机的输入/输出接口执行驱动,也可以用像BCD码二-十进制译码器这样的译码执行驱动。
直流驱动的优点是二极管发光高而稳定,编写程序容易,缺点为占用输入/输出接口多,比如要驱动四个数码管静态显示就需要4×8=32根输入/输出端口来驱动(一个89C51单片机的输入/输出接口也就才32个!
),所以一般实际应用时都是以增加译码器来驱动,以避免单片机的I/O端口不够用这个尴尬局面。
②动态显示驱动:
在单片机应用中数码管的显示方式普遍采用动态显示,动态显示驱动是将数码管的"a,b,c,d,e,f,g,dp"8个字段的同极端都连接在一起,并且为数码管的公共极增加一个位选通控制电路,位选通控制电路由本身独立的输入/输出口线控制,当全部数码管都接收到经由单片机控制输出的数字时,控制数码管显示的数字是取决于单片机对位选通控制电路接地端电路的控制,因此需要某个数字的时候,只要将该位数码管的位选通开启就会亮,而没有开启位选通的数码管字段就不会亮。
通过对各个数码管的接地端的分时轮流控制,各个数码管也会被分时轮流受控显示数码管状态,这就是动态显示驱动。
在动态驱动过程中,每段数码管的亮灯时间为1~2ms,因为发光二极管的余晖效应与人的视觉暂留现象,所以各段数码管尽管实际上并非是同时点亮,但只要给出非常快的速度来扫射,人们所看到的东西就是一组稳定的数据,而且不会出现一闪一闪的感觉,所以动态显示实际上出来的成效和静态显示是差不多的,还能够节省很多的输入/输出端口。
3.3.2数码管的选择
通过以上了解,由于本次毕业设计需要的单片机I/O端口不多,所以数码管显示方式采用了静态显示驱动,数码管将直接由单片机I/O端口驱动,又因为LED数码管是电流控制元件,所以使用时要上一个加限流电阻。
数码管显示是通过单片机查表得出编码,然后单片机再驱动端口决定数码管显示的数字,按键与数码管显示程序的一致性就是这么实现的。
连接在P0.1-P0.3,4个引脚上,并加一个排阻。
如图4所示。
图4数码管与单片机的连接图
3.4扬声器
扬声器采用两个三极管来放大音频,串连着一个可调节电阻,用来调节声音大小,整个模块由单片机P1.0引脚控制。
如图5所示
图5扬声器的连接图
4软件设计
4.1程序流程
本设计的基本流程是对初始化的单片机进行键盘扫描,判断其有无按键按下,若有则需要继续判断按键的类别,判断它是功能选择键还是独立键盘上的音调键,若是独立键盘,则通过P1.0发生频率播放音调,通过P0显示数码管数字。
若是功能选择键,则播放程序储存好的音乐歌曲,然后检测是否按下中断键,若是则停止播放,不是则一直播放到结束。
程序流程图如图6。
图6程序流程图
4.2程序语言的选择
对于汇编语言来说,它是面向特定机型的需要,在不同的计算机指令系统上和不同的微控制器上,指令结构有着云泥之别,就算指令大同小异,它也不能够移植。
一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。
掌握汇编语言程序并不简单,因为它需要读透各个寄存器的说明以及微控制器的指令手册。
简而言之,汇编语言的优点就是编写代码实时性强,程序执行效率高,缺点是不简洁,可读性差,移植性差。
对于C语言来说,它是一种高级语言,可以结构化编程,还可以移植。
使用标准C语言的程序编程,完全可以不作任何修改就能够移植到不同的系统平台上。
标准C语言在嵌入式等的微控制芯片上也很少需要修改,而且程序上手简单,内容易懂。
总的来说,C语言编写程序结构清晰明了,具有很好的移植性,也很容易进行维护和修改。
基于以上对比,本设计系统更适合C语言来进行编程。
5仿真调试
5.1Proteus简介
Proteus(海神)的ISIS是一款Labcenter出品的EDA工具软件,可以仿真各种EDA工具软件的电路和IC,并支持仿真单片机及其外围器件,元件库齐全,使用简单,是不可多得的专业的单片机软件仿真系统。
Proteus具备普遍EDA工具软件的功能,比如:
1.原理布图
2.PCB自动或人工布线
3.SPICE电路仿真
革命性的特点
1.互动的电路仿真
用户甚至可以实时采用诸如ROM,RAM,马达,键盘,LCD,LED,AD/DA,部分IIC器件,部分SPI器件。
2.仿真处理器及其外围电路
由于PROTEUS能够进行仿真调试,拥有着实验室无法比拟的元器件库,因而也成为了学生们课程设计、毕业设计的一款重要软件,同时也培养学生实践与创造精神。
5.2keil简介与教程
单片机开发过程中除了要画硬件电路图外,程序编译也是它必不可少的一个环节,所以在这里往往需要使用到将源程序转换为机器码传送给单片机的汇编软件。
随着科学技术的进步,像C语言、C++这样的高级语言也渐渐地代替了汇编语言的作用,单片机程序编译的软件也在一直进步,Keil便是现在最普遍使用的MCS-51单片机程序编译的软件。
Keil具有一个全面的开发环境,其中包括宏汇编、实时操作系统、C编译器、项目管理器、库管理和调试器等等功能。
Keil几乎是使用C语言编程的不二之选,即使使用的不是C语言,而是利用用汇编语言来编程,其简单易用的集成系统和实用的软件仿真调试工具也会让你事半功倍。
KEIL使用教程如下:
第一步,打开下载完成的KEIL软件。
如图7