基于单片机的电子琴设计.docx

上传人:b****1 文档编号:158593 上传时间:2023-04-28 格式:DOCX 页数:42 大小:1.20MB
下载 相关 举报
基于单片机的电子琴设计.docx_第1页
第1页 / 共42页
基于单片机的电子琴设计.docx_第2页
第2页 / 共42页
基于单片机的电子琴设计.docx_第3页
第3页 / 共42页
基于单片机的电子琴设计.docx_第4页
第4页 / 共42页
基于单片机的电子琴设计.docx_第5页
第5页 / 共42页
基于单片机的电子琴设计.docx_第6页
第6页 / 共42页
基于单片机的电子琴设计.docx_第7页
第7页 / 共42页
基于单片机的电子琴设计.docx_第8页
第8页 / 共42页
基于单片机的电子琴设计.docx_第9页
第9页 / 共42页
基于单片机的电子琴设计.docx_第10页
第10页 / 共42页
基于单片机的电子琴设计.docx_第11页
第11页 / 共42页
基于单片机的电子琴设计.docx_第12页
第12页 / 共42页
基于单片机的电子琴设计.docx_第13页
第13页 / 共42页
基于单片机的电子琴设计.docx_第14页
第14页 / 共42页
基于单片机的电子琴设计.docx_第15页
第15页 / 共42页
基于单片机的电子琴设计.docx_第16页
第16页 / 共42页
基于单片机的电子琴设计.docx_第17页
第17页 / 共42页
基于单片机的电子琴设计.docx_第18页
第18页 / 共42页
基于单片机的电子琴设计.docx_第19页
第19页 / 共42页
基于单片机的电子琴设计.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的电子琴设计.docx

《基于单片机的电子琴设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴设计.docx(42页珍藏版)》请在冰点文库上搜索。

基于单片机的电子琴设计.docx

基于单片机的电子琴设计

1概述…………………………………………………………………………4

1.1设计要求………………………………………………………………4

1.2设计思路………………………………………………………………4

2系统总体方案及硬件设计………………………………………………5

2.1系统组成及总体框图…………………………………………………5

2.2元件介绍………………………………………………………………5

2.2.1AT89S52………………………………………………………6

2.2.2三极管…………………………………………………………6

2.2.3LED数码管……………………………………………………6

2.3按键选择方案…………………………………………………………6

2.4总体原理图……………………………………………………………7

2.5各功能模块原理图……………………………………………………7

2.5.1AT89S52模块电路原理图……………………………………7

2.5.2键盘扫描模块电路原理图……………………………………7

2.5.3数码管显示模块电路原理图…………………………………8

2.5.4音频处理模块电路原理图……………………………………8

2.5.5复位模块电路原理图…………………………………………8

3软件设计……………………………………………………………………9

3.1音乐相关知识…………………………………………………………9

3.2如何用单片机实现音乐的节拍………………………………………9

3.3如何用单片机产生音频脉冲…………………………………………9

3.4具体歌谱的设计………………………………………………………11

3.5系统总体方案和设计流程……………………………………………11

3.6系统程序功能流程图…………………………………………………11

3.6.1主程序流程图………………………………………………………11

3.6.2手动弹奏程序流程图………………………………………………12

3.6.3系统功能转换程序流程图…………………………………………15

3.6.4点歌播放音乐程序流程图…………………………………………15

3.6.5播放音乐程序流程图………………………………………………16

4软件仿真…………………………………………………………………18

4.1ISIS软件介绍………………………………………………………18

4.2Keil软件介绍…………………………………………………………18

4.3仿真图………………………………………………………………18

 

5硬件调试……………………………………………………………………19

5.1硬件调试………………………………………………………………19

5.2软件调试………………………………………………………………19

5.3实物图………………………………………………………………19

6设计总结……………………………………………………………………20

参考文献………………………………………………………………………20

附1:

源程序代码……………………………………………………………21

附2:

系统接线图……………………………………………………………31

概述

1.1、设计要求

利用51系列单片机、按键、扬声器等器件,设计一个电子琴。

具体功能要求如下:

设计键盘电路,使其具有数字键1、2、3、4、5、6、7、8、9、10、11作为电子琴按键,演示键DEMO,其中1~7号键按下后即发出相应的音调。

8~10作为音调键,8为高音,9为中音,10为低音。

11作为DEMO键,用于播放存储好的音乐,按下DEMO键,自动演示一首歌曲,用单片机某一接口发出音频脉冲,驱动扬声器发音。

可利用LED指示当前是弹奏音乐或自动播放音乐的状态。

利用定时器定时,可以发出不同频率的脉冲,不同频率的脉冲经扬声器驱动电路放大滤波后,就会发出不同的音调.定时器按设置的定时参数产生中断,一次中断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不同频率的脉冲.按键一次,发50个脉冲.发完后继续检测键盘,如果键还按下,继续发音,发脉冲个数的多少可以决定节拍的长短。

1.2、设计思路

从系统实现的功能上来看,电子琴的设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。

手动弹奏乐曲是根据具体的硬件键盘设置了7个音符按键,3个高、中、低音模式切换键和1个功能转换键,自动播放音乐是在单片机的存储器中通过软件编程的方法放置音乐代码和相关播放程序来实现。

从系统硬件结构上来看,主要使用到51系列单片机、7个键输入电路、LED数码管显示电路、扬声器以及电源电路等等。

将这些硬件电路有机地结合起来使之满足电子琴设计的基本硬件要求。

从系统软件设计角度来看,将电子琴的设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。

此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲到自动播放音乐的切换。

从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。

用软件延时来控制发音时间的长短,控制节拍。

把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。

因此,我们可以综合上述的不同角度的方案设计原理,主要从软件和硬件两部分进行有计划有步骤的系统分析与设计,最终确立总体的设计方案。

 

系统总体方案和硬件设计

2.1系统组成与总体框图

硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具有确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。

该设计要实现一种有单片机控制的电子琴,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号.该设计具有11个音节键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来,本设计可以实现用户自由弹奏音乐。

用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大器,本设计采用三极管就可以实现信号放大功能。

基于单片机系统的电子琴的基本结构如图

(1)所示:

2.2元件介绍

2.2.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内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8位微控制器8K字节在系统可编程FlashAT89S52。

主要性能:

与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:

0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。

2.2.2三极管

晶体三极管也称三极管,是通过一定的工艺,将两个PN结结合在一起的器件.由于PN结之间的相互影响,使三极管变现出不同于单个PN结的特性而具有电流放大功能,从而使PN结的应用发生了质的飞跃。

本设计采用了S8050三极管,它是小功率、NPN型的信号放大器。

它的外型与封装如下图所示:

2.2.3LED数码管

本次设计的显示电路采用LED数码管显示,LED(Light-EmittingDiode)是一种外加电压从而渡过电流并发出可见光的器件。

LED是属于电流控制器件,使用时必须加限流电阻。

LED有单个LED和八段LED之分,也有共阴和共阳两种。

常用的七段显示器的结构如图下图所示。

发光二极管的阳极连在一起的称为共阳极显示器(如图b所示),阴极连在一起的称为共阴极显示器(如图c所示)。

1位显示器由八个发光二极管组成,其中七个发光二极管a~g控制七个笔画(段)的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但控制简单,使用方便。

此外,要画出电路图,首先还要搞清楚他的引脚图的分布,在了解了正确的引脚图后才能进行正确的字型段码编码。

才能显示出正确的数字来。

(a)外形(b)共阳极(C)共阴极

图3-6数码管引脚

本次实验采用的是共阳极的数码管来作为显示设备,其显示与二进制编码关系如下LED表:

数码管显示值

二进制编码

数码管显示值

二进制编码

0

80H

5

92H

1

F9H

6

82H

2

A4H

7

F8H

3

B0H

8

00H

4

99H

2.3按键选择方案

传统电子琴可以用键盘上的“1”到“A”键演奏从低So到高Do等11音。

该设计有11个按钮矩阵,设计成21个音阶,可以实现音阶在低音1-高音7之间。

比传统音阶范围大,弹奏效果好。

2.4总体原理图

2.5各功能模块原理图

2.5.1AT89C51单片机模块

2.5.2键盘扫描模块原理图

2.5.3数码管显示模块原理图

2.5.4音频处理模块原理图

2.5.5复位模块原理图

软件设计

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拍的延时时间,其余的节拍延时时间就是它的陪数。

如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

音乐的音拍,一个节拍为单位(C调)具体如下表:

曲调值

DELAY

曲调值

DELAY

调4/4

125ms

调4/4

62ms

调3/4

187ms

调3/4

94ms

调2/4

250ms

调2/4

125ms

音乐节拍表

3.3单片机产生音频脉冲

了解音乐的一些基本知识后可知,产生不同频率的音频脉冲即能产生音乐,对于单片机而言,产生不同频率的脉冲非常方便,可以利用它的定时/计数器来产生这样的方波频率信号,因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数初值T的关系。

在本设计中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号。

T的值决定了TH0和TL0的值,其关系为:

TH0=T/256,TL0=T%256。

具体的计算方法:

(1)计数脉冲值与频率的关系式:

N=fi÷2÷fr

式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

(2)计数初值T的求法:

T=65536-N=65536-fi÷2÷fr

经计算后可以的到所有的音符所对应的频率表如下:

最终在程序中设计出3个表分别存放高、中、低音的频率值如下:

TABLE1:

DW65058,65110,65157,65178;高音

DW65217,65252,65283,65312

TABLE2:

DW64580,64684,64777,64820;中音

DW64898,64968,65030,65058

TABLE3:

DW63628,63835,64021,64103;低音

DW64260,64400,64524,64580

在设计具体的歌谱时是将上面的TABLE1~TABLE3合并为TABLE00,然后将高、中、低音的对应频率存放在表中:

TABLE00:

DW64580,64684,64777,64820;音乐播放频率表

DW64898,64968,65030,64260

DW64400,64524,65058,63835,64021

3.4具体歌谱的设计

(1)歌谱的高位对应于音乐播放频率表TABLE00中的初值的偏移地址,由于歌曲中有着休止符和普通音符,为了区分这两者,设计时让休止符的第一位有区分的设计为0,而将普通的音符的第一位用初值的偏移地址加一处理,这样当读到第一位为0时,只要调用延时子程序即可实现休止符的停顿,当读到第一位为非零数时,将其减1作为偏移地址读取TABLE00中的频率值对应的计数初值实现不同的频率输出。

(2)歌谱的低位对应于每个音节的节拍长短,调用延时子程序DELAY30来停顿一段对应于歌谱低位数值的时间。

3.5软件总体方案及设计流程

(1)键盘扫描程序:

检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测;

(2)功能转移程序:

对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲功能;

(3)琴键处理程序:

根据检测到得按键值,查询音律表,给计时器赋值,使发出相应频率的声音;

(4)自动播放歌曲程序:

检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下。

3.6系统程序功能流程图

该程序设计思路比较清晰既从开始到声明变量与函数再到读取按钮开关,判断是否按下,然后就是一个一个按钮的动作。

3.6.1主程序框图

系统总体流程图

3.6.2手动弹奏程序流程图

接下页

3.6.3功能转换程序流程图

3.6.4点歌播放音乐程序流程图

3.6.5歌曲播放程序(MUSIC)

软件仿真

4.1ISIS软件介绍

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真。

可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

它实现了单片机仿真和SPICE电路仿真相结合。

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

它支持主流单片机系统的仿真。

目前支持的单片机类型有:

68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

它提供软件调试功能。

在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeiC51uVision2等软件。

另外,它具有强大的原理图绘制功能。

4.2Keil软件介绍

Keil是目前最流行开发MCS-51系列单片机的软件。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。

仿真过程中通过运行keil软件生成.hex文件,导入在Proteus即可实现单片机的仿真。

4.3仿真图

 

硬件调试

5.1硬件调试

硬件调试主要是针对单片机部分进行调试。

在上电前,先确保电路中不在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。

在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况等。

注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

在确保硬件电路正常,无异常情况(断路或短路)方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要键盘单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。

数码管LED电路调试:

接通电源,随机按下按钮可以看到数码管显示数字。

键盘单片机控制部分调试:

上电后,随机按动键盘可以发现各个按键对应的音正确。

5.2软件调试

调试主要方法和技巧:

通常一个调试程序应该具备至少四种性能:

跟踪、断点、查看变量、更改数值。

整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。

5.3实物图

设计总结

通过各方面的努力,本次设计任务顺利完成,系统部分功能已完全实现课程的要求。

可以在七首歌曲里随意选择一首喜欢的曲子,并能显示在数码管上;而且还能通过切换功能键实现弹奏和播放音乐功能的切换,进入播放功能时,可以通过按键任意选择七首音乐,并能通过数码管进行显示,因而基本达到预定的要求和良好的效果。

这次设计从软件方面来讲不是很难,程序相对长一点,但都是书本上所学的知识,主要是中端及其服务程序的编写。

在protues上仿真,则起到很好的效果,因为元器件都是理想状态的,但做出实物来却不是那么简单啦。

经过多次调试、修改才得以出结果。

将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。

同时可以播放一首示例歌曲,但是也有不足之处的,声音杂音时而有点大,不稳定。

经过本次课程设计,我们比较好的把理论知识与实践相结合,而我们在也本次设计中收获不少。

设计过程中,首先,对于汇编语言多了一层了解,其次,还有硬件的接线,还有8051芯片的引脚方面,都让我们收获不少。

加强了自身的动手能力。

通过这次比较系统的项目设计提高了我们运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我们查阅各种文献资料、设计手册、设计规范以及软件编程的水平。

 

参考文献

[1]余发山,王福忠,杨凌霄.单片机原理及应用技术.中国矿业大学出版社.2008.6

[2]王守中.51单片机开发入门与典型实例.北京:

人民邮电出版社,2007.8

[3]胡辉.单片机应用系统设计与训练.北京:

中国水利水电出版社,2004.8

[4]孙育才,孙华芳.MCS-51系列单片机及其应用.东南大学出版社,2012.6

[5]单片机应用系统设计与实践教程.东南大学仪器科学与工程学院,2013.8

 

附1源程序代码

KEYBUFEQU30H;列号保存单元

STH0EQU31H;定时器T0初值高8位存放单元

STL0EQU32H;定时器T0初值低8位存放单元

TEMPEQU33H;定时器初值偏移地址存放单元

SPKEQUP1.0;发声器所在端口

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;延时消抖

JBP3.0,ZHONGYIN;高音键没有按下,转向中音

MOVDPTR,#TABLE1;高音键按下将模式设定为高音

LJMPTANZOU;转向扫描音符键

ZHONGYIN:

JBP3.1,DIYIN;中音键没有按下,转向低音

MOVDPTR,#TABLE2;中音键按下将模式设定为中音

LJMPTANZOU;转向扫描音符键

DIYIN:

JBP3.2,TANZOU;低音键没有按下,转向扫描音符键

MOVDPTR,#TABLE3;低音键按下将模式设定为低音

LJMPTANZOU;转向扫描音符键

;手动弹奏程序

;*******音符键扫描********

TANZOU:

MOVP2,#0FFH;先将键盘的列全部置为高电平

MOVA,P2

XRLA,#0FFH

CJNEA,#00H,NEQ;有键按下转向NEQ

CLRP1.0;没有键按下,蜂鸣器不发声

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,#0F9H;让LED显示为1

LJMPDK1

NK2:

CJNEA,#0FDH,NK3;判断是否按下#2键

MOVKEYBUF,#1;保存列号#1

MOVP0,#0A4H;让LED显示为2

LJMPDK1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2