简易电子琴设计报告.docx
- 文档编号:3686006
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:163.77KB
简易电子琴设计报告.docx
《简易电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《简易电子琴设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
简易电子琴设计报告
一、设计指标
1.1设计任务
1.设计一个4X4的16个按键矩阵,并且每个键对应一个音,显示对应音键号。
2.用AT89C51将键盘连接设计成为电子琴。
3.编写电子琴的程序,要达到可以随意弹奏想要表达的音乐的目的。
4.程序的分析与调试,显示波形。
1.2设计要求
1.用汇编语言编程实现程序设计。
2.利用查表,中断等方式实现目的。
3.系统的各各功能模块要清楚,有序。
4.程序运行时有友好的用户界面。
二、设计方框图
图2.1系统主程序流程图
图2.2
三、元器件介绍
该设计主要由以下几个部件组成:
1:
单片机AT89C51:
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效的微控制器。
引脚说明:
P0口:
P0口为一个8位双向三态I/O口,每脚可驱动8个TTL负载。
P0既可作为通用I/O口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用口。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,每个引脚可驱动4TTL负载。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,驱动4个TTL门电流。
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(外部数据存储器RAM写选通)P3.7/RD(外部数据存储器RAM读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许ALE的输出电平用于锁存地址的地位字节。
当不访问其时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
/PSEN:
外部程序存储器ROM的选通信号。
/EA/VPP:
当/EA保持低电平时,那么在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
反向振荡放大器的出及内部时钟工作电路的输出。
2:
电源:
电源部分有二部分组成。
一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。
正常情况下电池是不提供电能的,以保证电池的寿命。
3:
4*4的16个按钮矩阵。
4:
模拟示波器:
模拟产生的波形。
5:
LM386音频功率放大器,LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。
为使外围元件最少,电压增益内置为20。
但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。
输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。
6:
74LS244锁存器:
74LS244为3态8位地址锁存器, 地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。
四、设计原理
4.1电路原理
主要分为二个部分:
(1)4X4行列式键盘识别;
(2)音乐产生的方法;
①一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同
的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
现在以单片机12MHZ晶振为例,列出高中低音符与单片机计数T0相关的计数值如表3.1所示.
下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:
低音0-19之间,中音在20-39之间,高音在40-59之间
TABLE:
DW0,63628,63835,64021,64103,64260,64400,64524,0,0
DW0,63731,63928,0,64185,64331,64463,0,0,0
DW0,64580,64684,64777,64820,64898,64968,65030,0,0
DW0,64633,64732,0,64860,64934,64994,0,0,0
DW0,65058,65110,65157,65178,65217,65252,65283,0,0
DW0,65085,65134,0,65198,65235,65268,0,0,0
DW0
表3.1高中低音符与单片机计数T0相关的计数值表
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63835
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
②音乐的音拍,一个节拍为单位(C调)
曲调值
DELAY
曲调值
DELAY
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。
在这个程序中用到了两个定时/计数器来完成的。
其中T0用来产生音符频率,T1
用来产生音拍。
2、各功能模块电路的设计(用Proteus仿真)
1、晶体振荡电路2、上电自动复位电路
3、按键电路
4、显示按键建号
5音频功率放大电路6、模拟示波
3、整体电路图
四、电路安装与调试过程
1.打开并设置MedWin
打开MedWin→设置仿真器→设置工作目录→设置编译器
2.使用MedWin
(1)新建项目点击[项目管理]—[新建项目]命令,输入项目名称,点击[确定]按钮,出现“添加项目文件”对话框,输入源代码文件名,如DITISHIYAN.ASM,单击[打开]按钮,出现代码窗口,即可开始编程。
(2)打开项目点击[项目管理]—[打开项目]命令,点击项目文件名(项目文件后缀为.mpf),点击[打开]按钮,即可打开上次保存的项目。
(3)编译点击[项目管理]—[编译/汇编]命令,启动编译器对源文件进行语法检查并编译,在消息窗口中显示编译结果。
(3)模拟仿真当源程序编译无误后,可进行模拟仿真调试。
点击[项目管理]—[产生代码并装入]命令,生成.hex文件。
编译器对源程序进行重新编译并装入。
这时,可使用[调试]菜单中的相关命令进行调试,如设置断点、单步及全速执行等。
(4)生成目标代码点击[项目管理]—[输出Binary文件]命令,生成BIN文件,用下载工具将其下载到实验板的单片机中执行。
3.Proteus的应用
首先安装此软件,然后打开,打开之后在图形编辑窗口进行画图。
硬件电路图画好之后,将刚在MedWin中已经编辑好的程序写入单片机中(AT89C51)中,然后进行整体仿真。
五、电路测试与使用说明
硬件部分
按照原理图连接电路,用PROTEUS模拟仿真测试电路,如果有问题就分块进行测试!
软件部分
如果硬件部分并无问题,那么就有可能是出现在软件部分。
那么就需要一一查看程序是否有误,如若有误将其改正并编译并代码,而后加载进单片机内再次运行。
六、训练总结
这次我主要的设计是一个简易电子琴,采用16个键分别代表16个音,通过对按键的随意按击从而产生不同的音乐,主要是通过每个按键所产生的频率不同来使得发出的各个音不同,从而产一音乐。
程序也实在很长,对于现在的我来说肯定一个人肯定很难编出这么长的程序,幸好有给与我帮助的同学和老师。
虽然这个程序还不是很简洁,但我们可以根据每个程序的功能各不相同来使程序简化。
不过我对目前的程序已经很满意了,但是也存在存在的问题:
(1)功能单调,我们可以通过增加元件、模块,扩展键盘,增加子程序程序增加其功能。
(2)程序太过冗长,我们可以用其他的方法如查询等方法来精简程序,加强它的可读性。
最后,通过这次的自主完成单片机的应用系统设计,让我学会了如何去完成一个设计报告,让我更进一步了解了单片机,也让我感受到做出一个设计的开心,喜悦与担心。
相信这对以后的毕业设计也会有很大的帮助。
七、附录
KEYBUFEQU30H
STH0EQU31H
STL0EQU32H
TEMPEQU33H
ORG00H;开始地址
LJMPSTART
ORG0BH;T0中断矢量地址
LJMPINT_T0
START:
MOVTMOD,#01H;写控制字
SETBET0;允许T0中断
SETBEA;开放CPU中断
WAIT:
MOVP3,#0FFH;P3口输出
CLRP3.4;清零
MOVA,P3
ANLA,#0FH
XRLA,#0FH;屏蔽高四位
JZNOKEY1;判断
LCALLDELY10MS
MOVA,P3
ANLA,#0FH;屏蔽高四位
XRLA,#0FH;异或运算
JZNOKEY1
MOVA,P3
ANLA,#0FH;屏蔽高四位
CJNEA,#0EH,NK1;判断A与#0eh是否相等
MOVKEYBUF,#0;赋初值#0
LJMPDK1;跳转
NK1:
CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:
CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:
CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1;调用DK1
NK4:
NOP;空指令延时一个周期
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE;查表赋首地址
MOVCA,A+DPTR
MOVP0,A
MOVA,KEYBUF
MOVB,#2
MULAB;AB相乘
MOVTEMP,A
MOVDPTR,#TABLE1;查表一
MOVCA,A+DPTR
MOVSTH0,A;写定时常数
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0
DK1A:
MOVA,P3
ANLA,#0FH;屏蔽高四位
XRLA,#0FH
JNZDK1A
CLRTR0
NOKEY1:
;键1子程序
MOVP3,#0FFH
CLRP3.5
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2;判断跳转键2子程序
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK5;比较跳到键5
MOVKEYBUF,#4
LJMPDK2
NK5:
CJNEA,#0DH,NK6;键5子程序
MOVKEYBUF,#5
LJMPDK2
NK6:
CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:
CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:
NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,A+DPTR
MOVP0,A
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1;查表扫描表一
MOVCA,A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP;移动TEMP,扫描键盘
MOVA,TEMP
MOVCA,A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0;启动定时
DK2A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK2A
CLRTR0
NOKEY2:
MOVP3,#0FFH
CLRP3.6
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3;调用DK3
NK9:
CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10:
CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK3
NK11:
CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:
NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE;查表
MOVCA,A+DPTR
MOVP0,A
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1;查表1
MOVCA,A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,A+DPTR
MOVSTL0,A
MOVTL0,A
SETBTR0;启动TR0
DK3A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK3A
CLRTR0
NOKEY3:
MOVP3,#0FFH;P3输出
CLRP3.7
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4;判c=0转移
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4;调用DK4
NK13:
CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4;调用DK4
NK14:
CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4;调用DK4
NK15:
CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:
NOP
DK4:
MOVA,KEYBUF
MOVDPTR,#TABLE;查表
MOVCA,A+DPTR
MOVP0,A;P0输出
MOVA,KEYBUF
MOVB,#2
MULAB
MOVTEMP,A
MOVDPTR,#TABLE1;查表1
MOVCA,A+DPTR
MOVSTH0,A
MOVTH0,A
INCTEMP
MOVA,TEMP
MOVCA,A+DPTR
MOVSTL0,A
MOVTL0,A;写定时的低位
SETBTR0;启动T0
DK4A:
MOVA,P3
ANLA,#0FH;屏蔽高四位
XRLA,#0FH
JNZDK4A
CLRTR0
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
INT_T0:
;重写定时常数
MOVTH0,STH0
MOVTL0,STL0
CPLP1.0
RETI
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE1:
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030
DW65058,65110,65157,65178
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 电子琴 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)