基于51单片机设计多功能电子琴.docx
《基于51单片机设计多功能电子琴.docx》由会员分享,可在线阅读,更多相关《基于51单片机设计多功能电子琴.docx(33页珍藏版)》请在冰豆网上搜索。
基于51单片机设计多功能电子琴
2015-2016学年第一学期
《单片机原理及应用》
课程设计报告
课程名称:
单片机原理及应用
项目名称:
基于51单片机设计多功能电子琴
所在分院:
信息工程学院
班级:
组员:
指导教师:
设计报告成绩评定表:
评分内容
成绩
报告内容的完整性(10%)
硬件原理图及说明(20%)
程序流程图(20%)
程序清单(10%)
调试及结果分析(20%)
系统改进建议或者方案(10%)
格式规范(10%)
总分
摘要
本设计是用AT89S52单片机为核心操纵元件,设计一个模拟电子琴发声操纵系统。
以单片机作为主控核心,与键盘、扬声器、LED显示器等模块组成核心主操纵模块。
在主控模块上设有11个按键,其中7个按键操纵7个音符,1个作为功能转换键利用,具有手动随意弹奏和自动播放乐曲的功能,另外3个按键用来实现高、中、低音的音符发音。
下面具体介绍一下单片机各端口的分派功能:
单片机的为输入端口,用来操纵7个音符的选择弹奏;为功能转换键,它能切换手动随意弹奏和自动播放乐曲的功能;为单片机操纵电子琴实现弹奏高、中、低的功能切换键;P0端口通过上拉电阻接到+5V上,然后接LED共阴数码管;为单片机的输出端口,它通过限流电阻R与三极管级基极相接,三极管的集电极接扬声器。
本设计通过操纵单片机按时器的定不时刻产生不同频率的音频脉冲,经三极管放大信号后驱动蜂鸣器发出不同音节的声音。
要实现7个音符的各自的高、中、低音,需要成立三个表,别离存储高音、中音和低音的频率值;当三个拨码开关中某一个按下,通过软件选择相应的音频。
按下弹奏键就可弹奏出不同的声音。
另外用软件延时来操纵发音时刻的长短,来操纵节拍。
通过把乐谱中的音符和相应的节拍变换为按时常数和延时常数,作为数据表格寄存在存储器中。
由程序查表取得按时常数和延时常数,别离用来操纵按时器产生的脉冲频率和发出该音频脉冲的持续时刻,如此就能够够实现乐曲的演奏。
为了实现按键的准确判定和完善电子琴发声的成效,本设计采纳了软件防抖的方式,有效的解决了按键抖动的问题。
另外当按下功能切换键,切换至音乐自动播放功能时,本系统能实现七首歌曲的有选择播放,另附带数码管显示提示。
如此使得电子琴的功能变的加倍壮大。
本设计为实物电路板设计开发,报告中详细的论述了电子琴设计的方式和进程。
并通过软硬件的调试,该音乐发生器不但能通过键盘弹奏出专门好的音调,而且还能够通过键盘选择播放不同的音乐。
除此之外,本电子琴还带有显示功能,能显示哪个按键按下,而且相当准确。
本系统运行稳固,其优势是硬件电路简单,软件功能完善,操纵系统靠得住,性价比较高等,具有必然的有效和参考价值。
一概述
引言
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
目前市场上各类品牌、型号的电子琴有上百种,由几十块的玩具电子琴到几百,几千的学习、演奏用琴真是琳琅满目,电子琴能够仿照各类音色和具有自动伴奏功能,这些是电子琴最大体的特点。
档次的高低无非是音色仿照的是不是传神,自动伴奏设计的是不是丰硕,或增加了其他制作,编曲功能的。
本设计要紧对利用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴系统硬件组成。
利用单片机产生不同频率来取得咱们要求的7个音符,最终可随意弹奏想要表达的音乐。
而且本设计别离从原理图,要紧芯片,各模块原理及各模块的程序的调试来详细论述。
一首音乐是许多不同的音阶组成的,而每一个音阶对应着不同的频率,如此咱们就能够够利用不同的频率的组合,即可组成咱们所想要的音乐了,固然关于单片机来产生不同的频率超级方便,咱们能够利用单片机的按时/计数器T0来产生如此方波频率信号,因此,咱们只要把一首歌曲的音阶对应频率关系弄正确即可。
设计思路
从系统实现的功能上来看,电子琴的设计要紧分为手动弹奏乐曲和自动播放音乐两大部份组成。
手动弹奏乐曲是依照具体的硬件键盘设置了7个音符按键,3个高、中、低音模式切换键和1个功能转换键,自动播放音乐是在单片机的存储器中通过软件编程的方式放置音乐代码和相关播放程序来实现。
从系统硬件结构上来看,要紧利用到52系列单片机、7个键输入电路、LED数码管显示电路、扬声器和电源电路等等。
将这些硬件电路有机地结合起来使之知足电子琴设计的大体硬件要求。
从系统软件设计角度来看,将电子琴的设计采纳程序模块化设计方式,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换操纵模块、音乐产生模块等等。
另外,采纳程序设计思想,将中断按时方式与外部按键查询方式相结合,实现手动弹奏乐曲到自动播放音乐的切换。
从音乐产生原理方面来看,通过操纵单片机的按时器的定不时刻产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。
用软件延时来操纵发音时刻的长短,操纵节拍。
把音乐的音符和相应的节拍变换为按时常数和延时常数,作为数据表格寄存在程序存储器中,由程序查表取得按时常数和延时常数,别离用来操纵按时器产生的脉冲频率和发出音频脉冲的持续时刻。
因此,咱们能够综合上述的不同角度的方案设计原理,要紧从软件和硬件两部份进行有打算有步骤的系统分析与设计,最终确立整体的设计方案。
方案论证
采纳AT89C51单片机进行操纵,由于它不具有ISP功能,而且其ROM只有4K,系统在以后升级方面没有潜力。
采纳AT89S52单片机进行操纵,由于其性价比高,完全知足了本系统设计的要求,它的内部程序存储空间达8K,使软件设计有足够的内部利用空间而且方便往后系统升级,利用方便,抗干扰性能提高。
二系统整体方案及硬件设计
系统组成与整体框图
硬件设计的任务是依照整体设计要求,在选择的机型的基础上,具有确信系统中所要利用的元器件,设计出系统的原理框图、电路原理图。
该设计要实现一种有单片机操纵的电子琴,单片机工作于12MHZ时钟频率,利用其按时/计数器T0,工作模式为1,改变计数值TH0和TL0能够产生不同频率的脉冲信号.该设计具有11个音节键盘,用户能够依照乐谱在键盘上进行演奏,音乐发生器会依照用户的弹奏,通过扬声器将音乐播放出来,本设计能够实现用户自由弹奏音乐。
用单片机产生的音频脉冲直接驱动扬声器并非能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大器,本设计采纳三极管就能够够实现信号放大功能。
基于单片机系统的电子琴的大体结构如下图所示:
元件介绍
作品设计所需器件如下表:
元件名称
型号
数量/个
用途
单片机
AT89S52
1
控制核心
晶振
12MHz
1
晶振电路
电容
30pF
2
晶振电路
电解电容
10uF/25V
1
复位电路
按键开关
6*6*6
12
按键/复位电路
电阻
1K
1
电源指示电路
电阻
1
复位电路
电阻
220
2
限流/复位电路
三极管
S8550
1
扬声器电路
扬声器
1
扬声器电路
排针
间距
2
电源接口
数码管
八位
1
显示电路
排阻
A103g
1
显示电路
AT89S52
功能特性:
AT89S52是一种低功耗、高性能CMOS8位微操纵器,具有8K在系统可编程Flash存储器,利用Atmel公司高密度非易失存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash许诺程序存储器在系统可编程,亦适于常规编程器。
在单芯片上拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式操纵应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下便准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗按时器,2个数据指针,三个16位按时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,许诺RAM、按时器/计数器、串口、中断继续工作。
掉电爱惜方式下,RAM内容被保留,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微操纵器8K字节在系统可编程FlashAT89S52。
要紧性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、 三级加密程序存储器 、32个可编程I/O口线 、三个16位按时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗按时器、双数据指针、掉电标识符。
三极管
晶体三极管也称三极管,是通过必然的工艺,将两个PN结结合在一路的器件.由于PN结之间的彼此阻碍,使三极管变现出不同于单个PN结的特性而具有电流放大功能,从而使PN结的应用发生了质的飞跃。
本设计采纳了S8050三极管,它是小功率、NPN型的信号放大器。
它的外型与封装如以下图所示:
LED数码管
本次设计的显示电路采纳LED数码管显示,LED(Light-EmittingDiode)是一种外加电压从而渡过电流并发出可见光的器件。
LED是属于电流操纵器件,利历时必需加限流电阻。
LED有单个LED和八段LED之分,也有共阴和共阳两种。
经常使用的七段显示器的结构如图以下图所示。
发光二极管的阳极连在一路的称为共阳极显示器(如图b所示),阴极连在一路的称为共阴极显示器(如图c所示)。
1位显示器由八个发光二极管组成,其中七个发光二极管a~g操纵七个笔画(段)的亮或暗,另一个操纵一个小数点的亮和暗,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但操纵简单,利用方便。
另外,要画出电路图,第一还要弄清楚他的引脚图的散布,在了解了正确的引脚图后才能进行正确的字型段码编码。
才能显示出正确的数字来。
按键选择方案
传统电子琴能够用键盘上的“1”到“A”键演奏从低So到高Do等11音。
该设计有11个按钮矩阵,设计成21个音阶,能够实现音阶在低音1-高音7之间。
比传统音阶范围大,弹奏成效好。
各功能模块原理图
最小系统模块电路原理图
键盘扫描模块电路原理图
数码管显示模块电路原理图
音频处置模块电路原理图
三软件设计
音乐相关知识
乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母确实是乐音的音名,它们一样依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,因此叫唱名。
音持续时刻的长短即时值,一样用拍数表示,停止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每一个音符对应着不同的频率,如此就能够够利用不同频率的组合,加以与拍数对应的延时,组成音乐。
如何用单片机实现音乐的节拍
除音符之外,节拍也是音乐的关键组成部份。
节拍事实上确实是音持续时刻的长短,在单片机系统中能够用延时来实现,若是1/4拍的延时是秒,那么1拍的延时是秒,只要明白1/4拍的延不时刻,其余的节拍延不时刻确实是它的陪数。
若是单片机要自己播放音乐,那么必需在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,因此节拍由用户把握,不由程序操纵。
关于不同的曲调咱们也能够用单片机的另外一个按时/计数器来完成。
音乐的音拍,一个节拍为单位(C调)具体如下表:
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
如何用单片机产生音频脉冲
了解音乐的一些大体知识后可知,产生不同频率的音频脉冲即能产生音乐,关于单片机而言,产生不同频率有脉冲超级方便,能够利用它的按时/计数器来产生如此的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,和单片机按时计数的关系。
在本设计中,单片机工作于12MHZ时钟频率,利用其按时/计数器T0,工作模式为1,改变计数值TH0和TL0能够产生不同频率的脉冲信号,在此情形下,C调的各音符频率与计数值T的对照如下表:
T的值决定了TH0和TL0的值,其关系为:
TH0=T/256,TL0=T/256。
系统整体功能流程图
该程序设计思路比较清楚既从开始到声明变量与函数再到读取按钮开关,判定是不是按下,然后确实是一个一个按钮的动作。
其主程序框图如下:
四软件仿真
ISIS软件介绍
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真。
能够仿真、分析(SPICE)各类模拟器件和集成电路,该软件的特点是:
它实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各类虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
它支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列和各类外围芯片。
它提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时能够观看各个变量、寄放器等的当前状态,因此在该软件仿真系统中,也必需具有这些功能;同时支持第三方的软件编译和调试环境,如KeiC51uVision2等软件。
另外,它具有壮大的原理图绘制功能。
仿真图
本设计系统的仿真图如下所示:
五系统调试
硬件调试
硬件调试主若是针对单片机部份进行调试。
在上电前,先确保电路中不在断路或短路情形,这一工作是整个调试工作的第一步,也是超级重要的一个步骤。
在这部份调试中要紧利用的工具是万用表,用来完成检测电路中是不是存在断路或短路情形等。
注意焊点之间,确保焊点没有短接在一路,同时注意焊点的美观,确保没有开路和短路的现象显现。
在确保硬件电路正常,无异样情形(断路或短路)方可上电调试,上电调试的目的是查验电路是不是接错,同时还要查验原理是不是正确,在本次设计中,上电调试要紧键盘单片机操纵部份、数码管点亮部份、和音频转换电路硬件调试。
数码管LED电路调试:
接通电源,随机按下按钮能够看到数码管显示数字。
键盘单片机操纵部份调试:
上电后,随机按动键盘能够发觉各个按键对应的音正确。
软件调试
调试要紧方式和技术:
通常一个调试程序应该具有至少四种性能:
跟踪、断点、查看变量、更改数值。
整个程序是一个主程序挪用各个子程序实现功能的进程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,因此在软件调试的最初时期确实是把各个子程序模块进行别离调试。
六课程设计体会
通过各方面的尽力,本次设计任务顺利完成,系统部份功能已完全实现课程的要求。
能够随意演奏一首喜爱的曲子,并能显示在数码管上;而且还能通过切换功能键实现弹奏和播放音乐功能的切换,进入播放功能时,能够通过按键任意选择七首音乐,并能通过数码管进行显示,因此大体达到预定的要求和良好的成效。
一样作品也有有所改善的地方,在显示电路模块不能很清楚的感受到电子琴的工作状态,将在后期改善中提高作品功能。
通过这次比较系统的项目设计提高了咱们运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了咱们查阅各类文献资料、设计手册、设计标准和软件编程的水平。
附录
附1源程序代码
KEYBUFEQU30H;列号保留单元
STH0EQU31H;按时器T0初值高8位寄存单元
STL0EQU32H;按时器T0初值低8位寄存单元
TEMPEQU33H;按时器初值偏移地址寄存单元
SPKEQU;发声器所在端口
ORG0000H
LJMPSTART;上电转向主程序
ORG000BH;按时器T0中断向量地址
LJMPINT_T0;转向按时器T0中断效劳子程序
START:
MOVDPTR,#TABLE2;默以为中音模式
MOVTMOD,#11H;设置按时器的工作方式,按时器T0和T1都是方式1,作为16为按时计数器利用(按时方式)
SETBET0;开各中断开关
SETBEA;开放中断总许诺和源许诺
ZAICI:
ACALLSAOMIAO;进入手动弹奏程序
SJMPZAICI
;********手动弹奏程序********
SAOMIAO:
;********高中低音模式选择*******
MOVP3,#0FFH;判定P3口模式键是不是有键按下
MOVA,P3
XRLA,#0FFH
CJNEA,#00H,MOSHI;有键按下,转向模式转换子程序
AJMPTANZOU;没有按下模式不变
MOSHI:
LCALLDELY10MS;延时消抖
JB,ZHONGYIN;高音键没有按下,转向中音
MOVDPTR,#TABLE1;高音键按下将模式设定为高音
LJMPTANZOU;转向扫描音符键
ZHONGYIN:
JB,DIYIN;中音键没有按下,转向低音
MOVDPTR,#TABLE2;中音键按下将模式设定为中音
LJMPTANZOU;转向扫描音符键
DIYIN:
JB,TANZOU;低音键没有按下,转向扫描音符键
MOVDPTR,#TABLE3;低音键按下将模式设定为低音
LJMPTANZOU;转向扫描音符键
;手动弹奏程序
;*******音符键扫描********
TANZOU:
MOVP2,#0FFH;先将键盘的列全数置为高电平
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NEQ;有键按下转向NEQ
CLR;没有键按下,蜂鸣器不发声
LJMPNOKEYS;没有按键按下即跳转到NOKEYS
NEQ:
LCALLDELY10MS;延时10ms消抖
MOVA,P2;排除扰动和干扰
XRLA,#0FFH
CJNEA,#00H,NK1
LJMPNOKEYS;为扰动信号没有键按下转NOKEYS
NK1:
MOVA,P2;判定是不是按下#1键
CJNEA,#0FEH,NK2;按下#1键即顺序执行程序,不然跳到NK2检查下一键位
MOVKEYBUF,#0;保留列号#0
MOVP0,#06H;让LED显示为1
LJMPDK1
NK2:
CJNEA,#0FDH,NK3;判定是不是按下#2键
MOVKEYBUF,#1;保留列号#1
MOVP0,#5BH;让LED显示为2
LJMPDK1
NK3:
CJNEA,#0FBH,NK4;判定是不是按下#3键
MOVKEYBUF,#2;保留列号#2
MOVP0,#4FH;让LED显示为3
LJMPDK1
NK4:
CJNEA,#0F7H,NK5;判定是不是按下#4键
MOVKEYBUF,#3;保留列号#3
MOVP0,#66H;让LED显示为4
LJMPDK1
NK5:
CJNEA,#0EFH,NK6;判定是不是按下#5键
MOVKEYBUF,#4;保留列号#4
MOVP0,#6DH;让LED显示为5
LJMPDK1
NK6:
CJNEA,#0DFH,NK7;判定是不是按下#6键
MOVKEYBUF,#5;保留列号#5
MOVP0,#7DH;让LED显示为6
LJMPDK1
NK7:
CJNEA,#0BFH,NK08;判定是不是按下#7键
MOVKEYBUF,#6;保留列号#6
MOVP0,#07H;让LED显示为7
LJMPDK1
NK08:
CJNEA,#7FH,NK8;判定是不是按下#8功能切换键
NK8:
LJMPCHOICE;转向功能转换程序
DK1:
MOVA,KEYBUF;取列号
MOVB,#2;初值为双字节,乘以2
MULAB;对应读取表格TABLE1的数据
MOVTEMP,A;保留初值高八位偏移地址
MOVCA,@A+DPTR;取初值高八位
MOVSTH0,A;保留值高八位
MOVTH0,A;装初值高八位
INCTEMP;初值高八位偏移地址加一取得初值低八位偏移地址
MOVA,TEMP
MOVCA,@A+DPTR;取初值低八位
MOVSTL0,A;保留值低八位
MOVTL0,A;装初值低八位
SETBTR0;开启按时器T0,T0开始计数
DK1A:
;判定音符键是不是松开
MOVA,P2
XRLA,#0FFH
JNZDK1A;没有松开,等待
CLRTR0;松开,按时器T0停止计数
NOKEYS:
RET;返回
;*******功能转换程序********
CHOICE:
MOVP2,#0FFH
MOVA,P2
CJNEA,#7FH,NEXT1111;按下了功能转换键后,顺序执行,不然那么跳转到NEXT1111
NEXT111:
MOVP2,#0FFH
MOVA,P2
XRLA,#0FFH
JNZNEXT111;若是A不为0,即按键有转变,等待键释放
ACALLDISPLAY;若是没有键按下,即挪用DISPLAY
MOVSP,#60H;设定堆栈指针指向60H
MOV40H,#00H;歌谱偏移地址存储单元清零
ACALLDIANGE;转向点歌程序
NEXT1111:
LJMPSAOMIAO;返回弹奏程序
;*******点歌播放音乐程序********
DIANGE:
MOVP2,#0FFH;先将键盘的列全数置为高电平
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NNEQ;判定有没键按下,
CLR;没有键按下,蜂鸣器不发声
LJMPDIANGE;等待点歌
NNEQ:
;有按键按下即跳到NNEQ
LCALLDELY10MS;延时10ms消抖
MOVA,P2
XRLA,#0FFH
CJNEA,#00H,NNEQ1;有键按下转向NNEQ1
LJMPDIANGE;没有键按劣等待点歌
NNEQ1:
MOVA,P2;判定是不是按下#1键
CJNEA,#0FEH,NNK2;按下#1键即顺序执行程序,不然跳到NNK1检查下一键位
MOVDPTR,#TABLE10;DPTR指向第一首歌歌谱
MOVP0,#06H;让LED显示为1
LJMPMUSIC;转向歌曲播放程序
NNK2:
CJNEA,#0FDH,NNK3;判定是不是按下#2键
MOVDPTR,#TABLE20;DPTR指向第二首歌歌谱
MOVP0,#5BH;让LED显示为2
LJMPMUSIC;转向歌曲播放程序
NNK3:
CJNEA,#