电子琴报告.doc
《电子琴报告.doc》由会员分享,可在线阅读,更多相关《电子琴报告.doc(29页珍藏版)》请在冰点文库上搜索。
电子琴
前言
随着科学技术的发展,电子技术取得了突飞猛进的发展。
从而电子产品在人们的日常生活中占据的地位也越来越重要,对人们的生活水平的提高起到了积极的作用。
在此期间,以单片机为核心的嵌入式系统的设计在社会生活的各个领域中得到了广泛的应用。
音乐是由不同的音符组成的,不同的音符对应着不同的频率,产生有规律的频率输出就可以得到相应的频率音乐
基于以上特点,我想在不久的将来此类电子琴在人们的日常生活中会得到很好的应用,尤其是在那些对体积和成本要求很高的嵌入式系统设计中,更能够体现出它的优越性。
第一章设计内容及要求
1.1设计主要内容
该设计以单片机AT89C52和定时/计数器8253为主要元器件产生不同频率的方波信号,该方波信号通过LM386功放驱动扬声器发出不同频率的声音,键盘/显示器接口芯片7279将不同的计数初值通过单片机写入到8253定时/计数器中,以产生1do,2re,3mi,4fa,5so,6la,7si,iDO八个基本音符声音并且能同步显示音符值,以及通过按键播放一首《生日快乐》歌曲。
1.2设计要求
设计要求主要包含基本和提高要求两个层次:
基本要求:
利用定时/计数器8253设计并制作一个电子琴,并且可以利用键盘
弹奏简单的乐曲。
通过按键播放一首简单的音乐。
提高要求:
通过按键进行音符的录放功能,即按一个键能录入一些音符,再按一下能播放已录入的音符。
第二章系统设计方案选择
2.1方案一
图2.1方案一电子琴外部实现电路图
2.2方案二
图2.2方案二电子琴外部实现电路图
2.3方案比较
对比两个方案,基本电路相差不多,但是两个方案的电压放大倍数不同。
电路的放大倍数可由LM386内部电阻和1脚、8脚的外接元件确定。
当1脚和8脚之间不接元件时,其放大倍数是20倍,当1脚和8脚之间接C1=10μF电容时,其放大倍数是200倍,当1脚和8脚之间接C1=10μF电容和电阻R时,如其放大倍数为20~200倍.通过计算发现,方案一的增益太小只有22左右,方案二的增益有38左右,经过第一次的硬件测试发现方案一扬声器的输出电压较低,以至于声音很微弱,而且杂音很强,于是我们就换成了方案二。
这是的电压增益提升了,当LM386放大倍数提高的同时,电源的纹波影响也将会增大,因此在LM386输出端加了一个电阻R2(10Ω电阻)和一个电容C7(0.047uF),组成补偿网络,用以抵消扬声器音圈电感在高频时产生的不良影响,改善了功率放大电路的高频特性,防止产生高频自激,提高了电路的稳定性,且在LM386输出端到扬声器的隔直电容值由原来的47uf换成了220uf,更有效的祛除了直流的影响,使输出更加稳定,因此扬声器输出声音很大,且杂音很少,最终我们确定了采用方案二的硬件电路设计。
第三章系统组成及工作原理
3.1系统组成
键盘/显示器芯片7279
定时/计数器8253
74LS373地址锁存地址
AT89C51单片机
LM386功放
扬声器
6.0MHZ晶振
图3.1系统原理组成框图
3.2工作原理
音乐是由不同的音阶组成的,而不同的音阶又是由不同的频率发出的,那么利用不同的频率,就可以发出不同的音乐了。
定时/计数器8253内部有三个独立的计数器,每个计数器都可以产生任意频率的方波信号,因此,我们可以通过把一首歌曲基本音符的音阶所对应的频率值转换为16位二进制代码并通过AT89C52写进8253中的任意一个定时器中,这样就可以通过8253产生对应频率的方波信号,再经过LM386功放电路滤波,放大以驱动扬声器发出相应频率的音符声音。
根据本课题要求,采用7279将键扫得到的键值通过查键值表得到相应的键号,并通过键号来查相应音符频率对应8253的计数初值表,并将计数初值通过单片机写进8253,则产生相对应频率的方波信号,再通过功放驱动扬声器发出对应频率的音符声音,这样就实现了电子琴的基本功能。
第四章系统硬件电路模块设计
4.1单片机AT89C52最小工作系统
图4.1最小工作系统原理图
各引脚功能如下:
(1)主电源引脚
①Vss接地②Vcc正常操作时为+5V电源
(2)外接晶振引脚XTAL1和XTAL2
①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采用外部振荡器时,此引脚接地。
②XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采用外部振荡器时,此引脚接外部振荡源。
(3)控制或与其它电源复用引脚RST/VPD,/ALE和/Vpp
①RST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位。
在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
②/ALE正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。
对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲的功能。
③外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。
同样可以驱动八个LSTTL输入。
④/Vpp、/Vpp为内部程序存储器和外部程序存储器选择端。
当/Vpp为高电平时,访问内部程序存储器,当/Vpp为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
(4)输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。
①P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
②P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
。
③P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。
P2口可以驱动(吸收或输出电流)四个LSTTL负载。
④P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。
能驱动(吸收或输出电流)四个LSTTL负载。
4.274LS373地址锁存器
(1)功能简介:
74LS373是一种带输出三态门的8D锁存器,1D~8D为8个输入端。
1Q~8Q为8个输出端。
G为数据锁存控制端;当G为“1”时,锁存器输出端同输入端;当G由“1”变“0”时,数据输入锁存器中。
三态门关闭,输出呈高阻状态。
在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用,其中输入端1D~8D接至单片机的P0口,输出端提供的是低8位地址,G端接至单片机的地址锁存允许信号ALE。
输出允许端OE接地,表示输出三态门一直打开。
(2)74LS373地址锁存器引脚图如下:
图4.274LS373引脚图
(3)74LS373地址锁存器功能表:
表4-274LS373真值表
Z
×
×
H
H
H
L
L
L
L
L
L
L
L
H
L
H
H
H
L
Qn
Dn
LE
OE
4.3可编程定时/计数器8253
4.3.1可编程定时器/计数器8253功能简介
8253(其引脚图如下图)内部有三个计数器,分别成为计数器0、计数器1每个计数器的输入和输出都决定于设置在控制寄存器中和计数器2,他们的机构完全相同。
的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
4.3.2可编程定时器/计数器8253引脚图及内部结构图如下:
图4.3可编程定时器/计数器8253引脚图
图4.48253内部结构框图
4.3.38253由以下几个部分组成:
(1)数据总线缓冲器(8位、三态、双向);
(2)读/写控制逻辑;
CS:
片选信号,低电平有效;
RD:
读信号,低电平有效;
WR:
写信号,低电平有效
A1A0:
端口选择信号
(3)三个通道(0~2);
(4)一个控制寄存器;
4.3.48253的控制字如下:
SC1
SC0
RW1
RW2
M2
M1
M0
BCD
SC1、SC0选择计数器RW1、RW2读控制字方式
00计数器000计数器锁存
01计数器101只读/写低8位
10计数器210只读/写高8位
11非法11先读/写低8位
再读/写高8位
M2M1M0模式选择BCD数制方式
000模式00BCD
001模式11二进制
X10模式2
X11模式3
100模式4
101模式5
4.4集成运算放大器LM386及功放模块电路
4.4.1LM386芯片介绍
LM386是专为低损耗电源所设计的功率放大器。
它是一种音频集成功放,具有自身功耗低,电压增益可调,电源电压范围大。
外接元件少等优点。
它的内建增益为20,透过pin1和pin8脚位间电容的搭配,增益最高可达200。
LM386可使用电池为供应电源,输入电压范围可由4V~12V,无作动时仅消耗4mA电流,且失真低。
4.4.2LM386的引脚图如下
图4.5LM386的引脚图
4.4.3LM386的主要性能指标
表4-5主要性能指标
项目
测试环境
规格
工作电压(Vs)
4V~5V
输入电压(Vi)
-0.4V~+0.4V
输入阻抗(Ri)
50kΩ
静电流
Vs=6V,Vin=0V
4mA~8mA
电压增益
pin1、pin8以10μF连接
26~46dB
4.4.4LM386放大模块电路
图4.6LM386功放模块电路
4.4.5功放模块电路参数分析
一般LM386的最大输出功率为1W,但因该器件散热不够理想,所以在实际应用时,其输出功率通常取0.5W以下。
电路的放大倍数可由内部电阻和1脚、8脚的外接元件确定。
当1脚和8脚之间不接元件时,其放大倍数是20倍;当1脚和8脚之间接10μF电容时,其放大倍数是200倍。
当1脚和8脚之间接10μF电容和电阻Rs,时,其放大倍数为20~200倍,其放大倍数的计算公式为
Au=(式4.1)
式中,R是LM386集成块内部电阻,一般其值为15KΩ。
将Rs=R3=1.2KΩ带入上式Au=38.2,在图中R2和C7组成补偿网络,以提高电路的稳定性,防止产生高频自激。
C5是滤波电容,C8是隔直电容。
4.57279扩展键盘及显示模块
4.5.17279芯片功能介绍
HD7279A是一片具有串行接口的,可驱动8位共阴式数码管和64只独立LED的智能显示驱动芯片,该芯片同时还可连接多大64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。
4.5.2、7279引脚图如下
图4.77279引脚图
4.5.37279主要引脚及其连接说明:
CS:
片选端连接P1.0引脚CLK:
时钟输入端连接.P1.1引脚
DATA:
串行数据输入/输出端连接P1.2引脚KEY:
按键有效输出端连.P3.2引
RES:
复位端连主芯片RST端DIG0-7:
数位0-7驱动输出
SG-SA:
段g—段a驱动输出DP:
小数点驱动输出
RC:
RC振荡器连接端
4.5.47279扩展键盘及显示模块电路(见附录一图2)
第五章系统软件设计
5.1各音符对应于8253计数初值的计算
本设计晶振频率为6MHZ,因为ALE和CLK1相连,所以8253的基准频率为1MHZ,故8253的计数初值可这样得出:
X=1MHZ/(需要的频率*2)。
由此可计算出各音符对应于8253计数初值,见下表:
表5-18253计数初值表
音符
频率(HZ)
简谱码(DW值)
1DO
523
950
2RE
587
850
3M
659
760
4FA
698
720
5SO
784
640
6LA
880
570
7SI
988
510
iDO
1088
470
采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
TABLE:
DW950,850,760,720,640,570,510,470;计数初值表
5.2程序流程框图
5.2.1主程序流程图
开始
伪操作定义及相关初始化
开外部0中断
等待外部0中断
图5.1主程序流程图
说明:
先进行7279和8253的初始化,再开放外部0中断,当扫键程序有查到7279有键按下时,就触发一次中断,进入外部中断0服务程序。
5.2.2外部中断0服务程序流程图
外部0中断03H入口
HD7279读键盘
N
调用键号获取子程序
是否是音键?
Y
调用键号处理子程序
N
录入标志是否为1
Y
显示按键号
播放音乐键8?
N
键号保存至缓冲区按键次数+1,缓冲指针+1
Y
调用音乐播放子程序
是否是录放键(9)?
N
显示按键号
Y
置反9键处理标志位
调用音键发声
录入辅助标志是否为0
N
Y
调用播放子程序
初始化播放缓冲区及按键计数器
中断返回
图5.2外部中断0服务程序流程图
说明:
当按键为0-7号时,则播放相应的音符音,按键为8号时,则播放《生日快乐》歌,按键为9号时,则开始录入音符,再按下9号键则播放录入的音符。
5.2.3显示子程序流程图5.2.4发声子程序流程图开始
开始
保存键号
一位下载方式0译码值送伪标志单元
键号值*2+1
调用1字节发送子程序
查音频表将低位数据送8253
显第一管值送伪标志单元
还原键号值
调用1字节发送子程序
键号值*2
返回
查音频表将高位数据送8253
图5.3显示子程序流程图GATA1置高输出方波
5.2.5键号处理子程序流程图
开始
延时约0.5S
A压栈内
GATA1置低停止输出方波
返回
键号送A
8号键?
N图5.4发声子程序流程图
调用播放歌子程序
Y
A出栈
返回
图5.5键号处理子程序流程图
5.2.4说明:
将音符所需要的发声频率值转换为十六进制数,先把数据低八位送8253计数器1中,再把数据高八位送8253计数器1中,然后把GATE1置高,则可以从OUT1中输出相应频率的方波信号,再经LM386放大驱动扬声器发出相应音符声音。
5.2.6放歌子程序流程图
开始
歌表首址送指针
A置零查表音频高值送R1
指针+1低值送R3
8253停止输出
R1,R3都为0休止符?
Y
N
R3,R1,0FF?
(结束标志)
Y
8253停止输出
N
8253方式字等初始化
指针压栈
指针压栈
返回
R3,R1送8253
指针出栈并+1
查表获取音值送R4
调用音值延时子程序
R4(音值)=0?
N
Y图5.6放歌程序流程图
说明:
按顺序将音符表中的音符值读出到发声子程序中,将音符后的节拍(187ms延
时的次数)写入到寄存器R4中。
第六章实验调试及测试结果与分析
6.1实验调试
电路板焊接好后,先不能急着通电,先要检查硬件线路,其步骤如下:
(1)检查连线是否正确
根据电路原理图连线,按一定顺序一一检查安装好线路,这样可以比较容易查出错线或少线。
为了防止出错,对于已查过的线路在电路图上做出标记。
(2)元器件的安装情况
检查元器件引脚之间有无短路;连接处有无接触不良,有无虚焊,假焊情况;电容的极性和集成元件的引脚是否连接有误。
(3)软件调试及硬件调试
这样检查无误后就开始把提前编好的电子琴程序通过软件写进AT89C52单片机中,然后接通电源,结果扬声器没一点声音,于是我用示波器检查输出波形,结果显示不是方波,而是直流信号,为了判断是否是8253出了问题,有测量8253输出端OUT1输出波形,结果显示是方波,则排除了8253出问题的可能性,用万用表检查了电路,终于发现原来是LM386的4脚没有接地,经过修正电路后,重新连好线,接上电源又出现了新的问题,发现扬声器不能发出相应的按键音符,而是一些杂音,且声音很小,通过检查电路,连接没有问题,于是检查电路图,发现我们方案的功放LM386模块有问题,增益太小只有22左右,于是我们改进了方案,换了LM386增益控制端1脚和8脚间的电阻值,由原来的10K换成1.2K。
这样放大倍数就变成了38左右,当LM386放大倍数较高时,电源的纹波影响将会增大,因此在LM386输出端加了一个电阻R2(10Ω电阻)和一个电容C7(0.047uF),组成补偿网络,以提高电路的稳定性,防止产生高频自激。
特别是LM386输出端到扬声器的隔直电容值由原来的47uf换成了220uf,更有效的祛除了直流的影响,使输出更加稳定。
然后再重新写了程序,这样扬声器能正常工作了,通过按键能发出相应的按键音符,在实现了基本功能的基础上,我们又改进了程序的功能,使它能通过按键发出一首音乐,但在重新‘烧’了程序后,发现按了播放键后只响了一个音符,且是一直响,这样我们又检查了程序,发现MOVDPTR,#TABLE1;TABLE1放的是音符表,在语音播放子程序中,由于用到了8253,需要外部寻址,即MOVDPTR,#7FFDH;改变了DPTR值,这样在调用的过程中会出错,于是我们用了PUSHDPLPUSHDPH;POPDPHPOPDPL;保护了DPTR,这样程序就按照预期运行下去,即完成了播放功能。
6.2实验结果与分析
通过调试以后,电子琴可以按照预定的要求实现功能。
加载好程序后,按0~7号键,分别发出1do,2re,3mi,4fa,5so,6la,7si,iDO八个基本音符声音并且能同步显示音符值,按8号键开始放《生日快乐》歌,按9号键开始录入音符,录入的音符可以在数码管上显示,这样可以编一首简短的歌,编好之后再按下9号键则可以按顺序播放录入的音符,通过不断的修改电路和实验程序,我们发现了很多问题,经过仔细分析,也使问题得到了解决,在硬件电路的焊接上注意温度控制好,可以先把一些敏感元件引脚留长些,这样可以方便散热,以免烧坏元件;在编制软件程序时应先画好程序流程框图,在程序首段应将经常用到的变量进行定义,划分好存储空间,这样在编程的过程中就会减少出错率。
利用示波器观察扬声器输入端的方波的频率,并与理论值比较,经计算得出误差如下表:
[误差=(实际值-理论值)/理论值*100%]
表6-1误差分析表
音符
理论值频率(HZ)
实际值频率(HZ)
误差(%)
1DO
523
528
0.9
2RE
587
579
-1.