基于单片机的电子琴.docx

上传人:b****6 文档编号:4506104 上传时间:2022-12-01 格式:DOCX 页数:17 大小:863.95KB
下载 相关 举报
基于单片机的电子琴.docx_第1页
第1页 / 共17页
基于单片机的电子琴.docx_第2页
第2页 / 共17页
基于单片机的电子琴.docx_第3页
第3页 / 共17页
基于单片机的电子琴.docx_第4页
第4页 / 共17页
基于单片机的电子琴.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于单片机的电子琴.docx

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

基于单片机的电子琴.docx

基于单片机的电子琴

摘要

电子琴的设计以AT89C52单片机为核心控制元件,与键盘、扬声器等模块组成核心主控制模块,通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌、存储及显示功能。

设计中应用中断系统和定时/计数原理控制演奏器发声,对音乐发生所必须确定的音符和节拍分别用程序语言实现。

特点是设计思路简单、清晰,成本低。

关键词:

电子琴;演奏;单片机

 

1绪论

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

电子琴是高科技在音乐领域的一个代表,它是古典文化与现代文明的一个浓缩体。

它不但可以帮助我们的音乐教师进行传统音乐文化的教育教学工作,而且由于它又具备现代音乐,特别是电子音乐、电脑音乐的基本结构、特征,因而使我们的教师在进行现代音乐、电子音乐、电脑音乐的教学时,更直接、更简便。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。

单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。

并且可以进行一定的功能扩展。

单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。

它的应用必定导致传统的控制技术从根本上发生变革。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

本文主要对使用单片机设计微型电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。

利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。

并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。

2设计任务

2.1课程设计的目的及意义

基于单片机的电子琴发声系统设计。

认真分析和领会课程设计题目含意,查阅和运用相关技术资料,提倡独立思考,锻炼动手能力;仔细观察实验现象,认真做好实验记录,要准确、规X、独立地完成实验内容,自觉培养严谨XX的科学作风;

2.2课程设计任务与要求

(1)设计一个(4×4)的键盘[4],并将16个键设计成两个八度的音阶对应的16个琴键,可以进行弹奏表演;

(2)演奏的同时数码管会以数字显示当前按键对应的音符;

(3)有音乐存储功能,能自动演奏歌曲。

演奏时可选择键盘输入乐曲,自己存入的乐曲或随机存储的乐曲。

按播放键能播放5首歌曲,第一首歌曲播放结束,再按播放键播放下一首歌曲。

(4)发光二极管会指示当前按键是否按下。

2.3实验器材

单片机AT89C52、键盘、扬声器、实验电路板。

 

3系统硬件

3.1主控制器AT89C52

图3.1AT89C51引脚图

AT89C52各管脚功能:

   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的一些特殊功能口,如下所示:

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(外部数据存储器读选通)

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间将使单片机复位。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲,用以锁存地址的低8位字节。

一般情况下,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由AT89C51执行外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),必须同GND相连接。

需要主要的是,不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,复位时EA端会自动内部锁存。

当执行内部编程指令时,应该接到VCC端。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

特点:

1.小巧灵活,嵌入性好,控制功能强,成本低;

2.可靠性好,温度X围宽;

3.扩展性好;

4.低电压,低功耗;

5.易于多机和分布式控制。

3.2运算放大器LM324

运算放大器(简称“运放”)是具有很高放大倍数的电路单元。

在实际电路中,通常结合反馈网络共同组成某种功能模块。

由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”。

运放是一个从功能的角度命名的电路单元,可以由分立的器件实现,也可以实现在半导体芯片当中。

随着半导体技术的发展,大部分的运放是以单芯片的形式存在。

运放的种类繁多,广泛应用于电子行业。

LM324运算放大器如图3.2所示。

图3.2LM324运算放大器管脚图

课设中运用的LM324运算放大器组成的放大整形电路如下图所示:

图3.3LM324放大整形电路

3.3时钟电路和复位电路

3.3.1时钟电路

单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。

AT89C51内部有一个用于构成振荡器的可控高增益反向放大器。

两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。

在片外跨接一晶振和两个匹配电容C1、C2如图2.4所示,就构成一个自激振荡器。

振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。

匹配电容C1、C2要根据石英晶体振荡器的要求选取。

当晶振频率为12MHz时,C1、C2一般选30pF左右。

上述电路是靠AT89C51单片机内部电路产生振荡的。

也可以由外部振荡器或时钟直接驱动AT89C51。

本设计采用内部电路产生振荡。

3.3.2复位电路

RST引脚是复位端,高电平有效。

在该引脚输入至少连续两个机器周期以上的高电平,单片机复位。

RST引脚内部有一个斯密特ST触发器以对输入信号整形,保证内部复位电路的可靠,所以外部输入信号不一定要求是数字波形。

使用时,一般在此引脚与VSS引脚之间接一个8.2kΩ的下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。

上电或手动复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。

上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。

当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或手动复位的操作。

图3.4复位电路图

3.4显示电路

我们测量的频率最终要显示出来八段LED数码管显示器由4个发光二极管组成。

基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。

LED数码管显示器有两种形式:

一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。

如下图所示。

共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。

当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。

8个笔划段h、g、f、e、d、c、b、a对应于一个字节(8位)的D7、D6、D5、D4、D3、D2、D1、D0,于是用8位二进制码就能表示欲显示字符的字形代码。

在单片机应用系统中,数码管显示器显示常用两种办法:

静态显示和动态扫

描显示。

所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能

的I/O接口用于笔划段字形代码。

这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的开销小,能供给单独锁存的I/O接口电路很多。

在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。

其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极是各自独立地受I/O线控制。

CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于端,而这一端是由I/O控制的,所以我们就能自行决定何时显示哪一位了。

而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的端,使各个显示器轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

其原理图3.5如下:

图2.5数码管显示电路原理图

3.5低通滤波器原理

在RC低通电路的后面加一个集成运放,即可组成一阶低通有源滤波器,如图2.6所示。

图2.6一阶低通滤波器电路

由于引入了深度负反馈,此次电路中的集成运放工作在线性区。

根据“虚短”和“虚断”的特点,可求得电路的电压放大倍数为

Au=Uo/Ui=Aup/[1+j(f/fo)](2.1)

其中Aup=1+(RF/R1)(2.2)

fo=1/(2πRC)(2.3)

Aup和fo分别称为通带电压放大倍数和通带截止频率。

根据式2.1可画出一阶低通滤波电路的对数幅频特性如图2.8所示。

通过与无源低通滤波器对比可以知到,一阶低通有源滤波器的通带截止频率fo与无源低通滤波器相同,均与RC的乘积成反比,但引入集成运放以后,通带电压放大倍数和带负载能力得了到提高。

由图2.8可见,一阶低通滤波器的幅频特性与理想低通滤波特性相比,差距很大。

在理想情况下,希望f>f0时,电压放大倍数立即降为零,但一阶低通滤波器的对数幅频特性只是以-20Db/十倍频的缓慢的速度下降。

3.6硬件电路设计

3.6.1电路设计介绍

首先输入一个幅值为24mV的正弦波信号,经过LM324两级放大电路得到一个幅值放大的正弦波信号,再经过整形后得到一个方波信号。

方波信号经过反相器,输出一个相位相反的方波信号。

将输出的方波信号输入到单片机的外部中断和定时器/计数器接口。

然后由数码管显示测量的频率值:

0~240Hz,且显示精度为小数点1位。

3.6.2总电路图

图2.9总电路图

3.6.3元件清单

表3.1元件器清单

名称

型号

数量

位号

单片机

AT89C51

U4

与非门

74LS00

U3:

A

集成运放

LM324

U1:

A

电容

CAP

C1=10uF

电阻

RES

200k两,1k三

R3=200kR5=200kR1=1kR2=1kR6=1k

二极管

4007

D1

导线

若干

 

4系统软件

4.1数据处理过程

在频率计开始工作,或者完成一次频率测量,系统软件都进行测量初始化。

测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。

定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。

在对定时/计数器的计数寄存器清0后,置运行控制位TR为1,启动对待测信号的计数。

计数闸门由软件延时程序实现,从计数闸门的最小值开始,也就是从测量频率的高量程开始。

计数闸门结束时TR清0,停止计数。

计数寄存器中的值通过16进制数到10进制数转换程序转换为10进制数。

对10进制数的最高位进行判别,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。

当上述测量判断过程直到计数闸门宽度达到1s,这时对应的频率测量X围为100Hz-999Hz,如果测量结果仍不具有3位有效数字,频率计则使用定时方法测量待测信号的周期。

定时/计数器的工作这时被设置为定时器方式,在对定时/计数器的计数寄存器清0后,判断待测信号的上跳沿是否到来。

待测信号的上跳沿到来后,置运行控制位TR为1,以单片机工作周期为单位,启动对待测信号的周期测量。

然后判断待测信号的下跳沿是否到来,待测信号的下跳沿到来后,运行控制位TR清0,停止计数。

16位定时/计数器的最高计数值为65535,这样在待测信号的频率较低时,定时/计数器将发生溢出。

当产生定时/计数器将溢出,程序进入定时器中断服务程序,中断服务程序对溢出次数进行计数。

待测信号的周期由3个字节组成:

定时/计数器溢出次数、定时/计数器的高8位和低8位。

信号的频率f与信号的周期T之间的关系为:

f=1/T

完成信号的周期测量后,需要做一次倒数运算才能获得信号的频率。

为提高运算精度,这里采用浮点数算术运算。

浮点数用3个字节组成,第一字节最高位为数符,其余7位为阶码;第二字节为尾数的高字节;第三字节为尾数的低字节。

待测信号周期的3个字节定点数首先通过截取高16位、设置数符和计算阶码转换为上述格式的浮点数。

然后浮点数算术运算对其进行处理,获得用浮点数格式表达的信号频率值。

浮点数到BCD码转换模块把用浮点数格式表达的信号频率值变换成本频率计的显示格式,送到显示模块显示待测信号的频率值。

无论从哪一种方式进入显示模块,完成显示后,频率计都开始下一次信号的频率测量。

4.2主程序流程框图

图4.1主程序流程图

4.3中断程序流程框图

T1中断流程图如图所示:

图4.2T1中断流程图

T0中断流程图如图所示:

图4.3T0中断流程图

中断程序实现定时与计数的功能。

T1进行定时,定时时间为1S。

T0进行计数,TO中断溢出一次,T0count加1。

当定时达到1S时,停止T0,T1。

最后计算相应的频率值。

4.3程序代码

T0_VALEQU-10000

ORG0000H

AJMPMAIN

ORG0003H

AJMPCOUNT;下降沿计数中断

ORG000BH

AJMPTIME;计数时间中断

ORG0030H

MAIN:

MOVR7,#100

MOVR3,#10

MOVR2,#15

MOVTH0,#HIGHT0_VAL

MOVTL0,#LOWT0_VAL

MOVDPTR,#TAB;设定DPTR起始位置

MOVR4,#99

MOVR5,#0FFH

MOVR6,#5

MOVTMOD,#01H;设定T0工作在方式2

SETBPT0

MOVSP,#5FH

SETBIT0;设定外部中断0位下降沿触发

MOVIE,#10000011B;开中断

SETBTR0

VIEW:

CLRA

MOVA,R0;将外部中断0计数的高位给累加器A

MOVB,#10

DIVAB;得到第一位数码管的数据

MOVCA,A+DPTR

MOVP1,A

MOVP2,#08H

MOVP2,#0H

MOVACC,B

MOVCA,A+DPTR

MOVP2,#04H

MOVP1,A

MOVP2,#0H

DJNZR2,$

MOVR2,#15

MOVA,R1

MOVB,#10

DIVAB

MOVCA,A+DPTR

DECA

MOVP1,A

MOVP2,#02H

MOVP2,#0H

DJNZR2,$

MOVR2,#15

MOVACC,B

MOVCA,A+DPTR

MOVP1,A

MOVP2,#01H

MOVP2,#0H

DJNZR2,$

MOVR2,#15

LJMPVIEW

TAB:

DB3H,9FH,25H,0DH,99H,49H,41H,1FH,01H,9H

COUNT:

PUSHPSW

DJNZR4,GAO

MOVR4,#99

INC30H

MOV31H,#0

SJMPNEXT

GAO:

INC31H

NEXT:

POPPSW

RETI

TIME:

DJNZR7,AGAIN

MOVR7,#100

DJNZR3,AGAIN

MOVR3,#10

MOVR4,#99

MOVR0,30H

MOVR1,31H

MOV30H,#0

MOV31H,#0

SJMPHUI

AGAIN:

MOVTH0,#HIGHT0_VAL

MOVTL0,#LOWT0_VAL

HUI:

RETI

END

 

5实验结果

5.1仿真结果

本次设计使用放大整形电路和单片机系统对一个幅值为24mV的正弦低频弱信号进行测量。

通过软件和硬件的仿真调试,得到所需要的方波信号,并在数码管中显示相应频率。

其测量X围在0~240Hz。

图5.1仿真波形发生器输入

图5.2仿真示波器输出

图5.3仿真电路数码管示数

5.2实物结果

图5.4单片机与电路连接图

图5.5总效果图

5.3结果分析

输入信号经过整形电路示波器显示输出波形良好,但是可能由于单片机中的程序问题,单片机计算和数码管显示模块无法正常工作。

经过一系列的讨论与实验也未能在规定时间内调试正常。

6总结

在单片机系统设计时,必须先确定系统的功能模块,这是系统设计的依据和出发点,整个设计过程都必须围绕这个功能模块来工作。

在设计时遵循从整体到局部也即自上而下的原则。

把复杂的问题分解为若干个比较简单的、容易处理的问题,分别单个的加以解决。

将总任务分解成可以独立表达的子任务,这些子任务再向下分,直到每个子任务足够简单,能够直接而容易的实现为止。

在程序调试时应按各个功能模块分别调试。

在程序设计时,正确合理的设计是非常重要的,正确的程序设计包括:

程序的结构是否合理;一些循环结构和循环指令的使用是否恰当;能否使用较少的循环次数或较快的指令;是否能把某些延迟等待的操作改为中断申请服务。

另外程序的设计要具有可扩展性,程序的结构要标准化,便于阅读、修改和扩充。

在调试电路板的时,不小心接错线,导致损坏了一块运算放大器的芯片。

我不知道这是不是每个新手都会犯的错误,但是我感觉这些都是可以避免的。

有时候人可以不懂不会,但是你不可以不去努力学。

遇见困难第一想到的不是它有多难,而是想想怎么样才能让它变得不难。

这次的课设毫无疑问是不成功的,我们在最后的硬件电路调试上倒下了。

有些人可能会觉得大部分人都没有成功,所以自己没成功是理所应当的。

但是我希望向那些成功的人看齐,而不是给自己找个理由去理所应当的接受自己失败的现实。

通过本次课程设计,我了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握了一些汇编语言的设计和调试方法。

对于认识到自己在知识方面存在的不足,对于明确今后的学习方向是非常有益的。

在设计过程中,得到了老师的悉心指导与帮助,在此表示衷心的感谢。

致谢

在这次的课设过程中,遇到了极大的困难。

KEIL软件的使用不熟悉;proteus软件联调总是报错;再加上课设期间有两门重要的考试;这一切的问题是我以前所没有想到的。

不过好在有同学的热情帮助和董立老师与X玮老师的指导,才让我慢慢的适应了紧X的环境。

虽然最后在实物电路板上的调试一直未能成功,但是我相信这只是我能力暂时不足的表现。

我会在今后的学习当中更加努力,以此来充实自己的大脑,拓展能力,从而更上一层楼。

参考文献

[1]杨素行.模拟电子技术基础简明教程(第三版).高等教育,2005.

[2]程佩青.数字信号处理教程(第四版).清华大学,2013.

[3]赵传申.单片机原理与接口技术应用教程(第一版).清华大学,2010.

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

当前位置:首页 > 高中教育 > 英语

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

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