1、电子琴目 录绪 论 2DXP功能介绍 3芯片介绍 3单片机功能介绍 3LM386介绍 5硬件设计 6晶振电路原理 6复位电路 6输入输出(I/O)引脚 7串行口设计 8硬件框图 10软件设计 10音乐产生的原理 10按键功能识别 12软件编程流程图 13系统调试 14调试环境 14调试步骤 14程序传输 16调试结果 17总 结 18参考文献 19附录一 20附录二 22附录三 23绪 论单片微型计算机是大规模集成电路技术发展的产物,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一
2、项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。 本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
3、 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。传统乐器的声音是通过机械的方法产生的,电子琴的声音是用“电”产生的。振荡器是根据需要产生一定频率的振荡信号,振荡信号通过分频器分解成不同频率的信号输送到放大器,放大器将信号放大,推动扬声器发出声音。键盘实际是一些开关,如果没有键盘,许多种频率的信号一齐进到放大器里,通过扬声器发出的声音就会乱七八糟,不成音乐。按下键盘的
4、一支键,就等于接通一只开关,只允许某一种频率的信号通过到放大器里去,扬声器就发出一个音来。这样,按照一定的演奏规律来按键,就能奏出美妙的音乐来。电源的任务是给各部分供电。这次的电子琴是由7个按按钮,设计成7音符。然后再用一个模拟音频放大模块来使音乐播出的声音变大。DXP功能介绍Protel DXP在前版本的基础上增加了许多新的功能。新的可定制设计环境功能包括双显示器支持,可固定、浮动以及弹出面板,强大的过滤和对象定位功能及增强的用户界面等。Protel DXP是第一个将所有设计工具集于一身的板级设计系统,电子设计者从最初的项目模块规划到最终形成生产数据都可以按照自己的设计方式实现。Protel
5、 DXP运行在优化的设计浏览器平台上,并且具备当今所有先进的设计特点,能够处理各种复杂的PCB设计过程。通过设计输入仿真、PCB绘制编辑、拓扑自动布线、信号完整性分析和设计输出等技术融合,Protel DXP提供了全面的设计解决方案。整合式的元件与元件库 在Protel DXP 2004中采用整合式的元件,在一个元件里连结了元件符号(Symbol)、元件包装(Footprint)、SPICE元件模型(电路仿真所使用的)、SI元件模型(电路板信号分析所使用的)。版本控制可直接由Protel设计管理器转换到其他设计系统,这样设计者可方便地将Protel DXP 2004中的设计与其他软件共享。如可
6、以输入和输出DXP、DWG格式文件,实现和Auto CAD等软件的数据交换,也可以输出格式为Hyperlynx的文件,用于板级信号仿真。多重组态的设计 Protel DXP 2004支持单一设计多重组态。对于同一个设计文件可指定要使用其中的某些元件或不使用其中的某些元件,然后产生网络表等文件。重复式设计Protel DXP 2004提供重复式设计,类似重复层次式电路设计,只要设计其中一部分电路图,即可以多次使用该电路图,就象有很多相同电路图一样。这项功能也支持电路板设计,包括由电路板反标注到电路图。硬件设计芯片介绍单片机功能介绍AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k
7、 Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚(引脚图如图1-2所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个
8、16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。图2-1 管脚图VCC(40):5V;GND(20):接地;P0口(3932):P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流;P1口(18):P1口是从内部提供上拉电阻器的8位双向
9、I/O口,P1口缓冲器能接收和输出4个TTL门电流;P2口(2128):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流; P3口(1017):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口;RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对
10、外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲; PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现;EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000HFFFFH)不管是否有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP);XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2(18):来自反向振荡器的输出。LM386介绍LM386是美国国家半导体公司生产的音频功率放大
11、器,主要应用于低电压消费类产品。LM386特性:静态功耗低,约为4mA,可用于电池供电;工作电压范围宽,4V-12V或5V-18V;外围元件少;电压增益可调,20-200;低失真度。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。图2-2 LM386内部电路LM386内部电路原理图如图2-2所示。与通用型集成运放相类似,它是一个三级放大电路.第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入
12、,从T2管的集电极输出,为双端输入单端输出差分电路。使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。二极管D1和D2为输出级提供合适的偏置电压,可以消除交越失真。引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电,故为OTL电路。输出端(引脚5)应外接输出电容后再接负载。电阻R7从输出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈,使整个电路具有稳定的电压增益
13、。硬件设计晶振电路原理图3-1 晶振电路图P19:时钟XTAL1脚, P18:时钟XTAL2脚,XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。如AT89C51 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。复位电路在振荡器运行时
14、,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的0000H处开始运行程序。复位操作不会对内部RAM有所影响。当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。什么叫复位?复位是单片机重新执行程序代码的意思。8051的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET还是一复用脚,Vcc掉电期间,此脚可接上备用电源, 以保证单片机内部R
15、AM的数据不丢失。时钟与复位电路如下图所示。图3-2时钟复位电路输入输出(I/O)引脚键盘可以分为两类:非编码键盘和编码键盘。非编码键盘是利用按键直接与单片机相连接而成,这种键盘通常使用在按键数量较少的场合。使用这种键盘,系统功能通常比较简单,需要处理的任务较少,但是可以降低成本、简化电路设计。常见的非编码键盘有两种结构:独立式键盘和矩阵式键盘。独立式键盘:其特点是:一键一线,各键相互独立。每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,可以很容易的判断哪个按键被按下。这种键盘的优点是:电路简单,各条检测线独立,识别按下按键的软件编写简单。适用于键盘按键数目较少的场合,不适合用于键
16、盘按键数目较多的场合,因为将占用较多的I/O口线。矩阵式键盘:这种键盘用于按键数目较多的场合。本设计中的按键功能:第一个按键发出do的音;第二个按键发出re的音;第三个按键发出m的音;第四个按键发出fa的音;第五个按键发出so的音;第六个按键发出la的音;第七个按键发出xi的音;第八个按键自动演奏歌曲粉刷匠。P1.0-P1.7输入输出脚,称为P1口,是一个8位准双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P1口能以吸收电流的方式驱动四个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动多个数码管。P2.0-P2.7输入输出脚,称为P2口,是一个带内部上拉电阻的8位双向I/0口。P2口
17、能驱动4个LSTTL负载。 通常在使用时外不需要外接上拉电阻,就可以直接驱动发光二极管。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。输入端口输出端口见下图。图3-3键盘电路图3-4显示电路串行口设计异步通信(asynchronous communication)在异步通信中,数据通常以字符为单位组成字符帧传送。字符帧由发送端一帧一帧的发送,通过传输线为接收设备一帧一帧的接收。发送端和接收端可以有各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。在异步通信中,字符帧份额是和波特率是两个重要指标,由用户根据实际情况选定。(1)字符帧(character frame)字符帧也
18、叫数据帧,由起始位、数据位、奇偶校验位和停止位等四部分组成。起始位:位于字符帧开头,只占一位,始终为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息。数据位:紧跟起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位在后。若所传数据为ASC字符,则常取7位。奇偶校验位:位于数据位后,仅占一位,用于表征串行通信中采用奇校验还是偶校验,由用户根据需要决定。停止位:位于字符帧末尾,为逻辑“1”高电平,通常可取1位、1.5位或2位,用于向接收端表示一帧字符信息已发送完毕,也为发送下一帧字符做准备。(2)波特率(baud rate)波特率的定义为每秒钟传送二进制数码的位数,单位是bps,
19、即位/秒。波特率是串行通信的重要指标,用于表征数据传输的速度。波特率越高,数据传输速度越快,但和字符的实际传输速率不同。字符的实际传输速率是指每秒钟内所传字符帧的帧数,和字符帧格式有关。同步通信(synchronous communication)同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。它们均由同步字符、数据字符和校验字符CRC等三部分组成,其中,同步字符位于帧结构开头,用于确认数据字符的开始;数据字符在同步字符之后,个数不受限制,由所需传输的数据块长度决定;校验字符有12个,位于帧结构末尾,用于接收端对接收到的数据字符的正确性校验。同步通信的数据传输速率较高,通常可
20、达56Mbps或更高。同步通信的缺点是要求发送时钟和接收时钟保持严格同步,故发送时钟除应和发送波特率保持一致外,还要求把它同时传送到接收端去。在串行通信中,数据是在两个站之间传送的。按照数据传送方向,串行通信可分为半双工和全双工两种制式。MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1I
21、N)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5v)如下图所示。图3-5串口电路硬件框图单片机电子琴电路由AT89C51芯片、复位电路、时钟电路、传送电路、键盘电路和发音电路六个部分组成,各部分有自己独立
22、的功能,如下图所示。图3-6硬件框图软件设计音乐产生的原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1
23、)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系式是:Nfi2f式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下:T65536N65536fi2fr例如:设K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。 T65536N65536fi2fr655361000000
24、2fr65536500000/fr 低音DO的T65536500000/26263627 中音DO的T65536500000/52364580 高音DO的T65536500000/104665059单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表下表所示音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO78464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33064021# 693264994低 4 F
25、A34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260# 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 6 LA44064400# 2 RE#124565134# 646664463高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO52364580# 4 FA#148065198# 1 DO#55464633高 5 SO156865217中 2 RE58764684# 5 SO#166165235# 2 RE#622647
26、32高 6 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765283表4-1音符表我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据低音019之间,中音在2039之间,高音在4059之间TABLE:61719,62435,62506,62679,62985,63263,63512, 63628,63835,64021,64103,64260,64400,64524, 64580,64684,64777,64820,64898,64968,65030、音乐的音拍,一个节拍为单位(C调)曲调值DELAY曲调值
27、DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms表4-1延时表对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。对音调的控制:根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波。不同音调下各个音阶的定时器。在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。按键功能识别DO: MOV R6,#127LJMP OUTPUTRE: MOV R6,#113LJMP
28、 OUTPUTMI: MOV R6,#100LJMP OUTPUTFA: MOV R6,#95LJMP OUTPUTSO: MOV R6,#85LJMP OUTPUTLA: MOV R6,#75LJMP OUTPUTSI: MOV R6,#67LJMP OUTPUTDOH: MOV R6,#63LJMP OUTPUT软件编程流程图系统调试调试环境此次调试是在工训415,利用串口与电子琴相连,运用keil软件进行编程的,再通过计算机将编写好的程序通过串口输入到单片机里去执行。调试步骤打开keil软件,出现如图7-1所示界面图5-1单击Project打开New Project出现如图7-2所示界面
29、,取完名字后保存图5-2保存后弹出如图所示界面,在Atmel下选择AT89S52 图5-3点击File打开New,并以.c为后缀进行保存图5-4右键单击Source Group 1打开Add File To Group Source Group 1,将保存的文件打开,单击Add,将文件添加进去,如图所示图5-5程序传输打开STC_ISP_V483,出现如图所示界面图5-6选择单片机的型号STC89C52RC,再打开程序文件,最后点击Download下载,等待程序传送完毕即可。调试结果调试时自己犯了一个很低级的错误,当我编完程序且编译完后,本想打开文件进行传送程序,可是原来保存的文件没有生成te
30、xt文件,我很是不理解,因为我每部都做了,后来让同学帮我看看问题的所在,原来是忘了添加文件。其实当我们做一些事情时往往忽略细节,有时候一个细节或许能够决定成败。总 结将程序传入芯片,调试成功后,可任意弹奏自己想要的旋律。本研究通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。不足之处有:1.可弹奏的音符数较少,只能在一定范围内满足用户需要。可通过改进键盘识别模块和发生模块来增加其复杂度。 2.音量不可调。可通过改进功放电路,即在lm386的1脚和8脚间增加一直外界电阻和电容,将3脚与地之间的电阻换为10k的变阻,即可调节其放大增益。参考文献1 陈明荧8051单片机课程设计实训教材M北京:清华大学出版社,2003年9月2 徐新艳单片机原理、应用与实践M北京:高等教育出版社,2005年3
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1