电子琴设计报告.docx
- 文档编号:25588296
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:24
- 大小:533.72KB
电子琴设计报告.docx
《电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《电子琴设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
电子琴设计报告
目录
1内容摘要1
1.1标题:
1
1.2学生与指导教师:
1
1.3摘要:
1
1.4关键字:
1
2设计要求及功能分析1
3系统方案设计2
3.2按键控制模块:
2
3.2.1按键电路:
3
3.2.2按键消抖:
3
3.3复位电路:
5
3.4时钟电路:
5
3.5音频放大电路:
6
4设计中的元器件6
4.1AT89C51单片机芯片:
6
4.2音频功放电路LM386芯片:
8
4.3扬声器:
9
5软件设计9
6电路的仿真与调试10
7总结11
8参考文献12
9致谢13
10附录14
附录一音符、频率对照表:
14
附录二程序:
15
附录三电路仿真图:
17
附录四PCB板图:
20
1内容摘要
1.1标题:
基于51单片机简易电子琴
1.2学生与指导教师:
1.3摘要:
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。
主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。
并且分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。
当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T1来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。
1.4关键字:
AT89C51单片机LM386电子琴
2设计要求及功能分析
利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
前面的发音停止,转到后按的键的发音程序。
发出后按的键的音调。
各音阶与频率的关系,见附录一
3系统方案设计
该设计方案是通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏我们想要的音符或者是音调,电路由复位电路,键盘电路,时钟电路和音频放大电路等组成,通过功能键可以选择播放音乐或者弹奏音节。
3.1播放模块:
播放模块是由喇叭构成,它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。
3.2按键控制模块:
电子琴设有8个按键,其中8个作为音符输入,另外一个作为模式转换按键,实现用户存放的自动播放歌曲。
8个按键分别代表8个音符,包括中音段的全部音符高
(1)音,通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。
然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序入口,实现自编歌曲的。
3.2.1按键电路:
常用的非编码键盘,每个键都是一个常开开关电路。
计数器输入脉冲最好不要直接接普通的按键开关,因为记数器的记数速度非常快,按键、触点等接触时会有多次接通和断开的现象。
我们感觉不到,可是记数器却都记录了下来。
例如,虽然只按了1下,记数器可能记了3下。
因此,使用按键的记数电路都会增加单稳态电路避免记数错误。
3.2.2按键消抖:
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。
由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次。
为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。
在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
按键的抖动,可用硬件或软件两种方法。
硬件消抖:
在键数较少时可用硬件方法消除键抖动。
下图所示的RS触发器为常用的硬件去抖。
图中两个“与非”门构成一个RS触发器。
当按键未按下时,输出为1;当键按下时,输出为0。
此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。
也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。
这一点通过分析RS触发器的工作过程很容易得到验证。
软件消抖:
如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
//键消抖延时函数,延时10ms
DELAY:
;延时10ms
MOVR7,#01H
DL1:
MOVR6,#26H
DL0:
MOVR5,#82H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
RET
END
从以上分析:
本设计中采用软件消抖方式,方便易于控制。
3.3复位电路:
进行操作中的复位控制,电路图如下:
3.4时钟电路:
电路图如下:
3.5音频放大电路:
电路图如下:
4设计中的元器件
4.1AT89C51单片机芯片:
在电子琴主要电路设计中,我们采用了AT89C51单片机芯片,其特点及管脚封装如下介绍一般。
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
主要特性:
与MCS-51兼容,4K字节可编程FLASH存储器,寿命:
1000写/擦循环,数据保留时间:
10年,全静态工作:
0Hz-24MHz,三级程序存储器锁定,128×8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写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.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
AT89C51管脚图如下:
图6AT89C51管脚分布
4.2音频功放电路LM386芯片:
LM386集成功率放大器的性能
额定工作电压:
4——16V。
额定电流:
当电源电压为6V时,静态工作电流为4mA,适合用电池供电。
增益:
①脚与⑧脚之间不接外部阻容元件时,电压增益为20;接元件时,可供增益到20——200之间的任何值。
频响:
可达数百kHz。
最大允许功耗为(25℃)600mA,使用时不用散热片。
负载电阻4Ω时,输出功率(失真为10%)为300mA。
LM386的引脚分布图:
1号脚是放大器1的输出端,2号和3号脚是放大器的输入端;
7号脚是放大器2的输出端,5号和6号脚是放大器2的输入端。
4.3扬声器:
扬声器是一种把电平转变为声信号的换能器件,扬声器和性能对音质的高低音响很大。
扬声器的种类很多,按其换能原理可分为电动式、静电式、电磁式、压电式等几种,后两种多用于农村有线广播网中,按频率范围可分为低音扬声器、中音扬声器,这些常在音箱中作为组合扬声器使用。
在本次试验作品中使用电磁式扬声器
5软件设计
本系统软件中还要是编辑电子琴播放状态的内容,在设计中采用汇编语言编写了电子琴控制系统控制和播放内容的程序。
在程序编写中多次采用了判断指令,来扫描按键的按下,然后把相应的音符传送到指定的内存空间,使其相应的按键对应相应的音符。
源程序见,附录二。
主程序如下:
MAIN:
MOVSP,#60H;初始化堆栈指针
MOVTMOD,#10H;设置定时器1为工作模式1
SETBET1;开定时器1中断
SETBEA;开总中断
CLRTR1;关闭定时器1
软件设计流程图如下:
图7程序流程图图8中断程序流程图
6电路的仿真与调试
Proteus的ISIS事一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,可以给我们做电路设计提供方便快捷的仿真效果,让我们事半功倍。
目前支持的单片机类型有:
680以及各种外围芯片0系列、8051系列、AVR系列、PIC12系列、HC11系列。
仿真时把程序烧进单片机,进行仿真没有问题,证明电路原理图和程序可以使用。
由于音频功放电路采用了LM386芯片,使得音频放大更加的稳定和没有杂音,进一步达到了实验目的理想效果,仿真电路图及结果,见附录三。
7总结
本次试验通过制作电子琴,将几个模块换呢好的融合起来,对使用单片机设计简易电子琴进行了分析,并接受了基于单片机电子期硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时同股沟显示模块来确知自己所弹的音符。
通过这次实训设计,我感觉收获了很多:
通过这次的单片机实训,我加深了对单片机系列知识及其系统的认识。
这个设计题目并不怎么新颖,但从中体现到了个系统开发设计的过程,足以让我们受益匪浅。
在这次的实训中,让我更进一步的提高了动手能力,也重新复习了一次单片机的程序编程能力,在这期间,让我更加深刻了体会到了汇编程序的思路,加强了对编程能力的理解和对相应资料的查阅。
8参考文献
[1]宋戈,黄鹤松等51单片机应用开发范例大全北京:
人民邮电出版社,2010
[2]雷伏容,张小林等51单片机常用模块设计查询手册北京:
清华大学出版社,2010
[3]郭文川单片机原理与接口技术北京:
中国农业出版社,2007
[4]彭介华电子技术课程设计指导北京:
高等教育出版社,2010
[5]朱大奇,邬勤文等单片机原理、应用与实验北京:
科技出版社,2009
[6]王兵用单片机设计微型电子琴,电子工程师2008,28(3)
[7]石鑫基于89C51单片机简易电子琴的设计,农业装备技术2010,36(5)
[8]孙万麟基于AT89C51单片机的电子琴设计,电脑知识与技术2010,06(20)
[9]李林涛,陈明等基于单片机的简易电子琴录/放音系统,数字技术与应用2010
(2)
[10]LM386芯片中文使用说明
[11]AT89c51中文资料
9致谢
谢词
在这次实训过程中,能够得以顺利的完成,感谢所有曾经指导过我们的老师,帮助过我们的同学,成功是你们的帮助和鼓励的成果。
在这里我要对你们表示深深的谢意!
首先,我要特别感谢我们的指导老师,王孝俭老师,在实训过程中,提供了许多宝贵的建议,老师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不惓的高尚师德,朴实无华、平易近人的人格魅力对我们影响深远。
不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。
其次,这是我们团队的成功,团队成员之间互相帮助互相支持与包容,得以使设计顺利进行。
10附录
附录一音符、频率对照表:
音符
1
2
3
4
5
6
7
i
频率(Hz)
262
294
330
349
392
440
494
525
转换为16进制编码
FC43
FCAB
FAO8
FD32
FD81
FDC7
FO5E
FE21
表1音符、频率、16进制对应表(计数器T1方式1)
附录二程序:
ORG0000H
LJMPMAIN
ORG001BH;定时器1的入口地址
LJMPTINT;中断入口地址
ORG1000H
MAIN:
MOVSP,#60H;初始化堆栈指针
MOVTMOD,#10H;设置定时器1为工作模式1
SETBET1;开定时器1中断
SETBEA;开总中断
CLRTR1;关闭定时器1
START:
MOVR0,P1
ACALLDELAY;延时消抖动
CJNER0,#0FFH,KEY1;键盘扫描
CLRTR1
SJMPSTART
KEY1:
CJNER0,#0FEH,KEY2;K1键按下
MOVR3,#0FCH;设置音阶1
MOVR4,#043H
LJMPSET_TIMER
KEY2:
CJNER0,#0FDH,KEY3;K2键按下
MOVR3,#0FCH;设置音阶2
MOVR4,#0ABH
LJMPSET_TIMER
KEY3:
CJNER0,#0FBH,KEY4;K3键按下
MOVR3,#0FDH;设置音阶3
MOVR4,#08H
LJMPSET_TIMER
KEY4:
CJNER0,#0F7H,KEY5;K4键按下
MOVR3,#0FDH;设置音阶4
MOVR4,#33H
LJMPSET_TIMER
KEY5:
CJNER0,#0EFH,KEY6;K5键按下
MOVR3,#0FDH;设置音阶5
MOVR4,#81H
LJMPSET_TIMER
KEY6:
CJNER0,#0DFH,KEY7;K6键按下
MOVR3,#0FDH;设置音阶6
MOVR4,#0C7H
LJMPSET_TIMER
KEY7:
CJNER0,#0BFH,KEY8;K7键按下
MOVR3,#0FEH;设置音阶7
MOVR4,#05H
LJMPSET_TIMER
KEY8:
CJNER0,#7FH,NOKEY;K8按下
MOVR3,#0FEH;设置音阶1(高音)
MOVR4,#21H
SET_TIMER:
SETBTR1;发声
SJMPSTART
NOKEY:
CLRTR1;无键按下
SJMPSTART
TINT:
;T1中断服务程序
MOVTH1,R3;定时器赋初值
MOVTL1,R4
CPLP0.0;输出方波
RETI
DELAY:
;延时10ms
MOVR7,#01H
DL1:
MOVR6,#26H
DL0:
MOVR5,#82H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
RET
END
附录三电路仿真图:
按下不同按键时p0.0口的输出波形:
按1键产生音阶Do的波形
按2键产生音阶re的波形
按3键产生音阶mi的波形
按4键产生音阶fa的波形
按5键产生音阶so的波形
按6键产生音阶la的波形
按7键产生音阶ti的波形
按8键产生音阶do(高音)的波形
附录四PCB板图:
二维视图观察
三维视图正面观察
三维视图背面观察
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子琴 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)