ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:863.95KB ,
资源ID:4506104      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4506104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的电子琴.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的电子琴.docx

1、基于单片机的电子琴摘 要电子琴的设计以AT89C52单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌、存储及显示功能。设计中应用中断系统和定时/计数原理控制演奏器发声,对音乐发生所必须确定的音符和节拍分别用程序语言实现。特点是设计思路简单、清晰,成本低。 关键词:电子琴;演奏;单片机1绪 论电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。电子琴是高科技在音乐领域的一个代表,它是古典文化与现代文明的一个浓缩体。它不但可以帮助我们的音乐教师进行传统音乐文化的教育教学工作,而且由于它

2、又具备现代音乐,特别是电子音乐、电脑音乐的基本结构、特征,因而使我们的教师在进行现代音乐、电子音乐、电脑音乐的教学时,更直接、更简便。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点

3、。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。本文主要对使用单片机设计微型电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。2设计任务2.1课程设计的目的及意义基于单片机的电子琴发声系统设计。认真分析和领会课程设计题目含意,查阅和运用相关技术资料,提倡独立思考,锻炼动手能力;仔细观察实验现象,认真做好实验记录,要准确、规X、独立地完成实验内容,自觉培养严谨XX的科学作风;2.2课程

4、设计任务与要求(1) 设计一个(44)的键盘4,并将16个键设计成两个八度的音阶对应的16个琴键,可以进行弹奏表演;(2) 演奏的同时数码管会以数字显示当前按键对应的音符;(3) 有音乐存储功能,能自动演奏歌曲。演奏时可选择键盘输入乐曲,自己存入的乐曲或随机存储的乐曲。按播放键能播放5首歌曲,第一首歌曲播放结束,再按播放键播放下一首歌曲。(4) 发光二极管会指示当前按键是否按下。2.3实验器材单片机AT89C52、键盘、扬声器、实验电路板。3 系统硬件3.1主控制器AT89C52图3.1 AT89C51引脚图AT89C52各管脚功能: VCC:供电电压。 GND:接地。 P0口:P0口为一个8

5、位漏级开路双向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口缓冲器可接收,

6、输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口

7、将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3.0RXD(串行输入口) P3.1TXD(串行输出口) P3.2/INT0(外部中断0)P3.3/INT1(外部中断1) P3.4T0(记时器0外部输入) P3.5T1(记时器1外部输入) P3.6/WR(外部数据存储器写选通) P3.7/RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间将使单片机复位。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲,用以锁

8、存地址的低8位字节。一般情况下,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由AT89C51执行外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低

9、电平时,则在此期间外部程序存储器(0000H-FFFFH),必须同GND相连接。需要主要的是,不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,复位时EA端会自动内部锁存。当执行内部编程指令时, 应该接到VCC端。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。特点:1.小巧灵活,嵌入性好,控制功能强,成本低; 2.可靠性好,温度X围宽; 3.扩展性好; 4.低电压,低功耗; 5.易于多机和分布式控制。3.2运算放大器LM324运算放大器(

10、简称“运放”)是具有很高放大倍数的电路单元。在实际电路中,通常结合反馈网络共同组成某种功能模块。由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”。运放是一个从功能的角度命名的电路单元,可以由分立的器件实现,也可以实现在半导体芯片当中。随着半导体技术的发展,大部分的运放是以单芯片的形式存在。运放的种类繁多,广泛应用于电子行业。LM324运算放大器如图3.2所示。图3.2 LM324运算放大器管脚图课设中运用的LM324运算放大器组成的放大整形电路如下图所示:图3.3 LM324放大整形电路3.3时钟电路和复位电路3.3.1时钟电路单片机的时钟一般需要多相时钟,所以时钟电路由振荡

11、器和分频器组成。AT89C51内部有一个用于构成振荡器的可控高增益反向放大器。两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。在片外跨接一晶振和两个匹配电容C1、C2如图2.4所示,就构成一个自激振荡器。振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。匹配电容C1、C2要根据石英晶体振荡器的要求选取。当晶振频率为12MHz时,C1、C2一般选30pF左右。上述电路是靠AT89C51单片机内部电路产生振荡的。也可以由外部振荡器或时钟直接驱动AT89C51。本设计采用内部电路产生振荡。3.3.2复位电路RST引脚是复位端,高电平有效。在该引脚输入至少连续两个

12、机器周期以上的高电平,单片机复位。RST引脚内部有一个斯密特ST触发器以对输入信号整形,保证内部复位电路的可靠,所以外部输入信号不一定要求是数字波形。使用时,一般在此引脚与VSS引脚之间接一个8.2k的下拉电阻,与VCC引脚之间接一个约10F的电解电容,即可保证上电自动复位。上电或手动复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或手动复位的操作。图3.4复位电路图3.4 显示电路我们测量的频率最

13、终要显示出来八段LED数码管显示器由4个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。如下图所示。共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段h、g、f、e、d、c、b、a对应于一个字节(8位)的D7、D6、D5、D4、D

14、3、D2、D1、D0,于是用8位二进制码就能表示欲显示字符的字形代码。在单片机应用系统中,数码管显示器显示常用两种办法:静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小,能供给单独锁存的I/O接口电路很多。在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极是各自独立地受I/O线控制。

15、CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于端,而这一端是由I/O控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。其原理图3.5如下:图2.5数码管显示电路原理图3.5 低通滤波器原理在RC低通电路的后面加一个集成运放,即可组成一阶低通有源滤波器,

16、如图2.6所示。图2.6一阶低通滤波器电路由于引入了深度负反馈,此次电路中的集成运放工作在线性区。根据“虚短”和“虚断”的特点,可求得电路的电压放大倍数为Au=Uo/Ui=Aup/1+j(f/fo) (2.1)其中 Aup=1+(RF/R1) (2.2) fo=1/(2RC)(2.3)Aup和fo分别称为通带电压放大倍数和通带截止频率。根据式2.1可画出一阶低通滤波电路的对数幅频特性如图2.8所示。通过与无源低通滤波器对比可以知到,一阶低通有源滤波器的通带截止频率fo与无源低通滤波器相同,均与RC的乘积成反比,但引入集成运放以后,通带电压放大倍数和带负载能力得了到提高。由图2.8可见,一阶低通

17、滤波器的幅频特性与理想低通滤波特性相比,差距很大。在理想情况下,希望ff0时,电压放大倍数立即降为零,但一阶低通滤波器的对数幅频特性只是以-20Db/十倍频的缓慢的速度下降。3.6 硬件电路设计3.6.1电路设计介绍首先输入一个幅值为24mV的正弦波信号,经过LM324两级放大电路得到一个幅值放大的正弦波信号,再经过整形后得到一个方波信号。方波信号经过反相器,输出一个相位相反的方波信号。将输出的方波信号输入到单片机的外部中断和定时器/计数器接口。然后由数码管显示测量的频率值:0240Hz,且显示精度为小数点1位。3.6.2总电路图图2.9总电路图3.6.3元件清单表3.1 元件器清单名称型号数

18、量位号单片机AT89C51一U4与非门74LS00一U3:A集成运放LM324一U1:A电容CAP一C1=10uF电阻RES200k两,1k三R3=200k R5=200k R1=1kR2=1kR6=1k二极管4007一D1导线若干4系统软件4.1数据处理过程在频率计开始工作,或者完成一次频率测量,系统软件都进行测量初始化。测量初始化模块设置堆栈指针(SP) 、工作寄存器、中断控制和定时/ 计数器的工作方式。定时/ 计数器的工作首先被设置为计数器方式,即用来测量信号频率。在对定时/ 计数器的计数寄存器清0 后,置运行控制位TR 为1 ,启动对待测信号的计数。计数闸门由软件延时程序实现,从计数闸

19、门的最小值开始,也就是从测量频率的高量程开始。计数闸门结束时TR 清0 ,停止计数。计数寄存器中的值通过16 进制数到10 进制数转换程序转换为10 进制数。对10 进制数的最高位进行判别,若该位不为0 ,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0 ,将计数闸门的宽度扩大10 倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。当上述测量判断过程直到计数闸门宽度达到1s ,这时对应的频率测量X围为100Hz - 999Hz ,如果测量结果仍不具有3 位有效数字,频率计则使用定时方法测量待测信号的周期。定时/ 计数器的工作这时被设置为定时器方式,在对定时/ 计

20、数器的计数寄存器清0 后,判断待测信号的上跳沿是否到来。待测信号的上跳沿到来后,置运行控制位TR 为1 ,以单片机工作周期为单位,启动对待测信号的周期测量。然后判断待测信号的下跳沿是否到来,待测信号的下跳沿到来后,运行控制位TR 清0 ,停止计数。16 位定时/ 计数器的最高计数值为65535 ,这样在待测信号的频率较低时,定时/ 计数器将发生溢出。当产生定时/ 计数器将溢出,程序进入定时器中断服务程序,中断服务程序对溢出次数进行计数。待测信号的周期由3 个字节组成:定时/ 计数器溢出次数、定时/ 计数器的高8 位和低8 位。信号的频率f 与信号的周期T 之间的关系为:f = 1/ T完成信号

21、的周期测量后,需要做一次倒数运算才能获得信号的频率。为提高运算精度,这里采用浮点数算术运算。浮点数用3 个字节组成,第一字节最高位为数符,其余7 位为阶码;第二字节为尾数的高字节;第三字节为尾数的低字节。待测信号周期的3 个字节定点数首先通过截取高16 位、设置数符和计算阶码转换为上述格式的浮点数。然后浮点数算术运算对其进行处理,获得用浮点数格式表达的信号频率值。浮点数到BCD 码转换模块把用浮点数格式表达的信号频率值变换成本频率计的显示格式,送到显示模块显示待测信号的频率值。无论从哪一种方式进入显示模块,完成显示后,频率计都开始下一次信号的频率测量。4.2主程序流程框图图4.1主程序流程图4

22、.3中断程序流程框图T1中断流程图如图所示:图4.2 T1中断流程图T0中断流程图如图所示:图4.3T0中断流程图中断程序实现定时与计数的功能。T1进行定时,定时时间为1S。T0进行计数,TO中断溢出一次,T0count加1。当定时达到1S时,停止T0,T1。最后计算相应的频率值。4.3程序代码 T0_VAL EQU -10000 ORG 0000H AJMP MAIN ORG 0003H AJMP COUNT ;下降沿计数中断 ORG 000BH AJMP TIME ;计数时间中断 ORG 0030H MAIN: MOV R7,#100 MOV R3,#10 MOV R2,#15 MOV T

23、H0,#HIGH T0_VAL MOV TL0,#LOW T0_VAL MOV DPTR,#TAB ;设定DPTR起始位置 MOV R4,#99 MOV R5,#0FFH MOV R6,#5 MOV TMOD,#01H ;设定T0工作在方式2 SETB PT0 MOV SP,#5FH SETB IT0 ;设定外部中断0位下降沿触发 MOV IE,#10000011B ;开中断 SETB TR0 VIEW: CLR A MOV A,R0 ;将外部中断0计数的高位给累加器A MOV B,#10 DIV AB ;得到第一位数码管的数据 MOVC A,A+DPTR MOV P1,A MOV P2,#0

24、8H MOV P2,#0H MOV ACC,B MOVC A,A+DPTR MOV P2,#04H MOV P1,A MOV P2,#0H DJNZ R2,$ MOV R2,#15 MOV A,R1 MOV B,#10 DIV AB MOVC A,A+DPTR DEC A MOV P1,A MOV P2,#02H MOV P2,#0H DJNZ R2,$ MOV R2,#15 MOV ACC,B MOVC A,A+DPTR MOV P1,A MOV P2,#01H MOV P2,#0H DJNZ R2,$ MOV R2,#15 LJMP VIEWTAB: DB 3H,9FH,25H,0DH,9

25、9H,49H,41H,1FH,01H,9H COUNT: PUSH PSW DJNZ R4 ,GAO MOV R4,#99 INC 30H MOV 31H,#0 SJMP NEXT GAO: INC 31HNEXT: POP PSW RETI TIME: DJNZ R7,AGAIN MOV R7,#100 DJNZ R3,AGAIN MOV R3,#10 MOV R4,#99 MOV R0,30H MOV R1,31H MOV 30H,#0 MOV 31H,#0 SJMP HUI AGAIN: MOV TH0,#HIGH T0_VAL MOV TL0,#LOW T0_VALHUI: RETI

26、END5 实验结果5.1仿真结果本次设计使用放大整形电路和单片机系统对一个幅值为24mV的正弦低频弱信号进行测量。通过软件和硬件的仿真调试,得到所需要的方波信号,并在数码管中显示相应频率。其测量X围在0240Hz。图5.1 仿真波形发生器输入图5.2仿真示波器输出图5.3 仿真电路数码管示数5.2实物结果图5.4 单片机与电路连接图图5.5 总效果图5.3结果分析输入信号经过整形电路示波器显示输出波形良好,但是可能由于单片机中的程序问题,单片机计算和数码管显示模块无法正常工作。经过一系列的讨论与实验也未能在规定时间内调试正常。6 总结在单片机系统设计时,必须先确定系统的功能模块,这是系统设计的

27、依据和出发点,整个设计过程都必须围绕这个功能模块来工作。在设计时遵循从整体到局部也即自上而下的原则。把复杂的问题分解为若干个比较简单的、容易处理的问题,分别单个的加以解决。将总任务分解成可以独立表达的子任务,这些子任务再向下分,直到每个子任务足够简单,能够直接而容易的实现为止。在程序调试时应按各个功能模块分别调试。在程序设计时,正确合理的设计是非常重要的,正确的程序设计包括:程序的结构是否合理;一些循环结构和循环指令的使用是否恰当;能否使用较少的循环次数或较快的指令;是否能把某些延迟等待的操作改为中断申请服务。另外程序的设计要具有可扩展性,程序的结构要标准化,便于阅读、修改和扩充。在调试电路板

28、的时,不小心接错线,导致损坏了一块运算放大器的芯片。我不知道这是不是每个新手都会犯的错误,但是我感觉这些都是可以避免的。有时候人可以不懂不会,但是你不可以不去努力学。遇见困难第一想到的不是它有多难,而是想想怎么样才能让它变得不难。这次的课设毫无疑问是不成功的,我们在最后的硬件电路调试上倒下了。有些人可能会觉得大部分人都没有成功,所以自己没成功是理所应当的。但是我希望向那些成功的人看齐,而不是给自己找个理由去理所应当的接受自己失败的现实。通过本次课程设计,我了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握了一些汇编语言的设计和调试方法。对于认识到自己在知识方面存在

29、的不足,对于明确今后的学习方向是非常有益的。在设计过程中,得到了老师的悉心指导与帮助,在此表示衷心的感谢。致谢 在这次的课设过程中,遇到了极大的困难。KEIL软件的使用不熟悉;proteus软件联调总是报错;再加上课设期间有两门重要的考试;这一切的问题是我以前所没有想到的。不过好在有同学的热情帮助和董立老师与X玮老师的指导,才让我慢慢的适应了紧X的环境。虽然最后在实物电路板上的调试一直未能成功,但是我相信这只是我能力暂时不足的表现。我会在今后的学习当中更加努力,以此来充实自己的大脑,拓展能力,从而更上一层楼。参考文献1杨素行模拟电子技术基础简明教程(第三版)高等教育,2005.2程佩青. 数字信号处理教程(第四版).清华大学,2013.3赵传申. 单片机原理与接口技术应用教程(第一版).清华大学,2010.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1