基于单片机的电子琴设计.docx
《基于单片机的电子琴设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴设计.docx(29页珍藏版)》请在冰点文库上搜索。
基于单片机的电子琴设计
河南理工大学
《单片机应用与仿真训练》设计报告
题目:
基于单片机的电子琴设计
姓名:
学号:
专业班级:
指导老师:
所在学院:
电气工程与自动化学院
2012年5月18日
摘要
单片机即单片微型计算机(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。
其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
而单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴,以单片机作为主控核心,与键盘、蜂鸣器等模块组成核心主控制模块。
在主控模块上设有11个按键和蜂鸣器,利用蜂鸣器作为发声部件,两个数码管作为显示部件,实现高音、中音、低音的1、2、3、4、5、6、7的发声与显示,并存储一首歌曲的内容,可实现自动播放。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,可以利用不同的频率的组合,构成我们所要的设定的音乐,利用单片机的定时/计数器T0来产生这样方波频率信号,因此,只要将一首歌曲的音阶对应频率关系对照即可。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴的硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的实用和参考价值。
目录
1概述…………………………………………………………………………………3
1.1课题开发背景…………………………………………………………………3
1.2设计任务与要求………………………………………………………………3
2系统总体方案及硬件设计…………………………………………………………4
2.1系统组成及总体框图…………………………………………………………4
2.2硬件电路图……………………………………………………………………4
2.2.1电路总接线图……………………………………………………………4
2.2.2单片机最小应用系统……………………………………………………5
2.2.3数码管显示模块…………………………………………………………7
2.2.4按键及声音控制模块……………………………………………………7
2.3元件介绍………………………………………………………………………8
2.3.1AT89S52……………………………………………………………………8
2.3.2LED数码管………………………………………………………………10
3软件设计…………………………………………………………………………12
3.1音乐相关知识简述…………………………………………………………12
3.2利用单片机实现节拍控制原理……………………………………………12
3.3系统总体功能流程图………………………………………………………13
4Proteus软件仿真………………………………………………………………14
4.1仿真图形……………………………………………………………………14
4.2系统调试……………………………………………………………………14
4.2.1软件仿真调试…………………………………………………………14
4.2.2软件调试………………………………………………………………15
5课程设计体会……………………………………………………………………16
参考文献……………………………………………………………………………16
附:
源程序代码……………………………………………………………………17
1概述
1.1课题开发背景
随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。
单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。
并且可以进行一定的功能扩展。
不但可以实现对乐曲的演奏,同时还具有存储音乐、播放歌曲以及显示按键的功能,使该设计功能更加完善。
1.2设计任务与要求
利用所给键盘的1,2,3,4,5,6,7,七个按键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
前面的发音停止,转到后按的键的发音程序。
发出后按的键的音调。
2系统总体方案及硬件设计
2.1系统组成及总体框图
该设计方案是通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏我们想要的音符或者是音调,电路由复位电路,指示灯电路,和功能按键电路组成,通过功能键可以选择播放音乐或者弹奏音节,硬件主要有下面几个部分组成。
图2-1电子琴硬件设计框图
在本设计中,采用P1.0-P1.6口作为七个音符的输入,通过按下其中任一个键实现1,2,3,4,5,6,7的演奏,P3.0-P3.3口四位作为按键输入实现低、中、高音切换,P0、P2口作为显示输出,实现音符显示和音调显示,P3.4接蜂鸣器作为声音输出,实现音符发声和音乐歌曲播放功能。
2.2硬件电路图
2.2.1电路总接线图
如图所示,本设计包括单片机芯片AT89S52最小应用系统、键盘输入电路、数码管显示电路、蜂鸣器发声电路等模块组成。
图2.1电路总接线图
2.2.2单片机最小应用系统
单片机加上适当的外围器件(保证单片机系统运行的最小外围器件)和应用程序,构成的应用系统称为最小系统。
包括单片机、复位电路和时钟电路,
图2.2单片机最小应用系统接线图
复位电路采用按键复位方式,若要复位,只需按下复位按钮,此时电源Vcc经电阻器R1、R2分压,在RST端产生一个复位高电平。
图2.3按键复位电路图
时钟电路用于产生单片机工作所需要的时钟信号,时序所研究的是指令执行中各信号之间的相互关系。
单片机本身如同一个复杂的同步时序逻辑电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
AT89S52内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2上外接时钟源即可构成时钟电路
图2.4时钟电路图
2.2.3数码管显示模块
数码管显示模块核心是共阳级数码管,通过来自单片机I/O口的电平高低来点亮和熄灭数码管上的发光二极管,通过单片机送来的数码管显示编码可以在数码管上显示数字和字符,可以很容易地理解按键按下所对应的音符。
图2.5数码管显示模块电路原理图
2.2.4按键及声音控制模块
如图2.6、2.7所示,音节按键从P1口进行输入,实现1,2,3,4,5,6,7,播放。
音调切换按键从P3.0-P3.3口输入,实现高、中、低音切换及音乐歌曲播放控制。
蜂鸣器接P3.4实现声音输出。
图2.6按键输入电路图
图2.7音调切换按键输入及发声输出电路图
2.3元件介绍
2.3.1AT89S52
一、功能特性:
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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止[1]。
二、主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz 、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符[2]。
三、管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
表2.1各管脚其它功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(记时器0外部输入)
P3.5
T1(记时器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出
2.3.2LED数码管
本次设计的显示电路采用LED数码管显示,LED(Light-EmittingDiode)是一种外加电压从而流过电流并发出可见光的器件。
LED是属于电流控制器件,使用时必须加限流电阻。
LED有单个LED和八段LED之分,也有共阴和共阳两种。
常用的七段显示器的结构如图下图所示。
(a)外形(b)共阳极(C)共阴极
图2.5数码管引脚图
发光二极管的阳极连在一起的称为共阳极显示器(如图b所示),阴极连在一起的称为共阴极显示器(如图c所示)。
1位显示器由八个发光二极管组成,其中七个发光二极管a~g控制七个笔画(段)的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但控制简单,使用方便[5]。
此外,要画出电路图,首先还要搞清楚他的引脚图的分布,在了解了正确的引脚图后才能进行正确的字型段码编码。
才能显示出正确的数字来。
3软件设计
本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由7音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过蜂鸣器将音乐播放出来。
3.1音乐相关知识简述
音乐听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低,声音就低,不同音调的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。
音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。
一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。
3.2利用单片机实现节拍控制原理
除了音符以外,节拍也是音乐的关键组成部分。
节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数。
如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成[7]。
音乐的音拍,一个节拍为单位(C调)具体如下表:
表3.1音乐节拍表
曲调值
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的对照如表3-2所示。
T的值决定了TH0和TL0的值,其关系为:
TH0=T/256,TL0=T/256
3.3系统总体功能流程图
图3.1主程序框图
4Proteus软件仿真
4.1仿真图形
图4.1Proteus仿真图
4.2系统调试
电路调试是整个系统功能否实现的关键步骤,我们将整个调试过程分为三大部分:
硬件调试、软件调试和综合调试。
4.2.1软件仿真调试
软件仿真调试主要是针对单片机部分进行调试。
在软件运行前,先确保电路中连线正确,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。
在这部分调试中主要通过目测,用来完成检测电路中是否存在断路或者短路情况等。
在确保软件仿真电路正常,无异常情况(断路或短路)方可进行软件运行,在本次设计中,软件运行主要是测试单片机键盘控制部分、数码管点亮部分、和音频功放电路调试。
A、数码管LED电路调试:
软件运行,随机按下按钮可以看到数码管显示数字;
B、单片机键盘控制部分调试:
软件运行,随机按动键盘可以发现各个按键对应的音正确。
4.2.2仿真调试
调试主要方法和技巧:
通常一个调试程序应该具备至少四种性能:
跟踪、断点、查看变量、更改数值。
整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。
5课程设计体会
这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试,下载,最后终于完成了这次具有实际使用价值的实验。
在设计中我运用自己平时学到的一些知识,以及自己在课下所查找的进行设计,刚开始遇到很多困难,包括对使用汇编语言环境语言的不熟悉,后来一起和同学研究,而一些课程设计中的故障,也请同学帮忙参考一下,最终找到了解决问题的答案,在程序修改中用了大量时间,但是是值得的。
我感觉自己在设计方面提高很大,特别是在设计程序时,逻辑思维能力有所加强,同时对以前所学的知识有了更深刻的认识,并进一步的得到了巩固和提高,充分的做到了理论联系实际,也使我认识到理论与实际的差别,通过该课程设计,不但对单片机有了较为全面的认识,而且相关的知识也有了足够的掌握,我感觉最重要的还是设计思维的形成。
更发现自己在平时学习中的缺陷。
对以后的学习也有很大的帮助。
这次的单片机课程设计,我所收获的不仅是学习知识方面,更多的是生活方面。
我了解到,在我们生活中,应该学会与别人共同分享,分享知识,分享问题,这样更有助于我们的交流,有利于我们共同进步,有利于我们对学习养成良好的兴趣。
最后,我要感谢那些带我们课程设计的老师们,感谢你们对我们的耐心,感谢你们对我们的鼓励,让我们有信心继续下去,成功走到最后。
参考文献
[1]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004
[2]龙威林.单片机应用入门:
AT89S51和AVR[M].北京:
化学工业出版社,2008
[3]张虹.单片机原理及应用[M].北京:
中国电力出版社,2009.
[4]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004
[5]徐新艳.单片机原理、应用与实践[M].北京:
高等教育出版社,2005年3月.
附:
源程序代码
ORG00H
JMPSTART
ORG0BH
JMPEXT0
ORG1BH
JMPEXT1
START:
MOVTMOD,#00010001B
MOVIE,#10001010B
SETBP3.4
MOVC,P3.3
JCSTART1
JMPSTART2
START1:
JNBP3.0,DY
JMPSTART11
DY:
MOVP2,#06H
JNBP1.0,DK1
JNBP1.1,DK2
JNBP1.2,DK3
JNBP1.3,DK4
JNBP1.4,DK5
JNBP1.5,DK6
JNBP1.6,DK7
JMPSTART
DK1:
MOVP0,#06H
MOVR1,#0F8H
MOVR0,#8CH
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK2:
MOVP0,#5BH
MOVR1,#0F9H
MOVR0,#5BH
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK3:
MOVP0,#4FH
MOVR1,#0FAH
MOVR0,#15H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK4:
MOVP0,#66H
MOVR1,#0FAH
MOVR0,#67H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK5:
MOVP0,#6DH
MOVR1,#0FBH
MOVR0,#04H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK6:
MOVP0,#7DH
MOVR1,#0FBH
MOVR0,#90H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
DK7:
MOVP0,#07H
MOVR1,#0FCH
MOVR0,#0CH
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
START11:
JNBP3.1,ZY
JMPSTART12
ZY:
MOVP2,#5BH
JNBP1.0,ZK1
JNBP1.1,ZK2
JNBP1.2,ZK3
JNBP1.3,ZK4
JNBP1.4,ZK5
JNBP1.5,ZK6
JNBP1.6,ZK7
JMPSTART
ZK1:
MOVP0,#06H
MOVR1,#0FCH
MOVR0,#44H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
ZK2:
MOVP0,#5BH
MOVR1,#0FCH
MOVR0,#0ACH
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
ZK3:
MOVP0,#4FH
MOVR1,#0FDH
MOVR0,#09H
MOVTH0,R1
MOVTL0,R0
SETBTR0
LCALLDELAY
CLRTR0
JMPSTART
ZK4:
MOVP0,#66H
MOVR1,#0FDH
MOVR0,#34H
MOVTH0,R1
MOVTL0,