基于8086的简易电子琴设计附汇编源程序.docx
《基于8086的简易电子琴设计附汇编源程序.docx》由会员分享,可在线阅读,更多相关《基于8086的简易电子琴设计附汇编源程序.docx(24页珍藏版)》请在冰豆网上搜索。
![基于8086的简易电子琴设计附汇编源程序.docx](https://file1.bdocx.com/fileroot1/2022-10/11/c0937384-28dc-442c-9d65-c7cf3476913a/c0937384-28dc-442c-9d65-c7cf3476913a1.gif)
基于8086的简易电子琴设计附汇编源程序
《微机原理与接口技术》
综合设计实验报告
设计课题:
基于8086得简易电子琴设计
指导老师:
学生姓名:
学号:
院 系:
专 业:
通信工程
ﻬ基于8086得简易电子琴设计
摘 要
在学习《微机原理与接口设计》得基础上,针对课程设计要求,综合运用相关软件、硬件知识,设计一个简易电子琴,使之具有音区切换、数码管显示音区及当前音符、记录音符与音符持续时间、播放录制得音乐等功能。
关键词:
8086;电子琴;仿真调试;汇编
ﻩ目 录
1、1系统整体架构图1
1、2功能介绍ﻩ1
第2章 硬件设计ﻩ2
2、1 硬件资源ﻩ2
2、2硬件接线图ﻩ3
2、2、18254接线图3
2、2、28255及键盘、数码管接线图ﻩ3
第3章软件设计ﻩ4
3、1程序框图ﻩ4
3、1、1 整体框图ﻩ4
3、1、2延时函数5
3、1、4数码管显示6
3、1、5 声音及时间录制6
3、1、6选择音区(高、中、低)7
3、1、7播放音乐ﻩ7
第4章 实验结果及演示8
第5章遇到得问题及改进措施10
5、2无法使用8254作为录音时间计数器10
附录ﻩ11
程序源码11
第1章总体方案设计
1、1 系统整体架构图
系统整体架构图如图1-1所示。
图1—1
1、2功能介绍
本实验设计实现了音区切换、数码管显示当前音区及音符、记录音符与音符持续时间、播放录制得音乐等功能。
功能具体说明如下。
按键0—6为音符键,按下后会有对应得音符音调响起,按键弹起后音符终止,此时,按下得音符以及时间将被记录。
按键12,13,14可以选择低音,中音,高音区。
按下按键15后开始播放录制得音符(不超过16个).另外数码管0显示音符,数码管2显示音区。
第2章 硬件设计
2、1 硬件资源
TD-PITE 实验教学系统,其主要系统构成如表2-1 所示。
CPU
Intel386EX
存储器
系统程序存储器:
FlashROM(128KB)
数据存储器:
SRAM (128KB)
信号源
单次脉冲:
消抖动脉冲2 组
逻辑电平开关与显示
16 组电平开关,16组电平显示LED灯(正逻辑)
8259、8237、8254、8255、8251、DAC0832、ADC0809、SRAM 、键盘扫描及数
接口实验单元
码管显示、电子发声、点阵LED、液晶LCD(可选)、步进电机(可选)、直流电
机、温度控制
实验扩展单元
2组40线通用集成电路扩展单元、扩展模块总线单元
系统电源
+5V/2A,±12V/0.2A
表 2-1 TD—PITE系统构成
系统硬件结构如图2—1 所示。
图2-1
2、2硬件接线图
2、2、1 8254接线图
8254芯片接线如图2-2所示。
图2-2
2、2、28255及键盘、数码管接线图
8255及键盘、数码管接线方法如图2-3所示。
图2-3
第3章 软件设计
3、1程序框图
3、1、1整体框图
图3-1
3、1、2 延时函数
图3-2
3、1、3键盘扫描
图3—3
3、1、4数码管显示
图3—4
3、1、5声音及时间录制
图3-5
3、1、6选择音区(高、中、低)
图3—6
3、1、7播放音乐
图3-7
第4章实验结果及演示
具体演示效果可扫描以下二维码进行观瞧,二维码如图4-1所示。
图4-1
以下为视频截图。
系统初始运行状体如图4-2所示。
图4—2
选择中音区,如图4-3所示。
图4-3
按下音符健,如图4-4所示.
图4-4
音乐播放,如图4-5所示。
图4-5
第5章遇到得问题及改进措施
5、1条件转移指令报错
在编写程序时曾多次遇到使用条件转移指令时编译出错得情况。
查阅书本后发现条件转移指令只能在代码段得-128~+127字节内进行跳转.
解决办法:
使用条件转移指令转移到一个较近程序段,并在这程序段使用无条件转移指令JMP进行转移。
5、2无法使用8254作为录音时间计数器
在进行设计得过程中,曾多次按照使用8254作为时间计数器得方案进行编程,但经过多次尝试后均以失败告终。
解决办法:
使用软件延时进行计时,每次延时执行完毕后进行计数,该计数值就就是音符得相对持续时间。
在播放时只需要调用同样时间长度得延时函数即可。
缺点:
使用软件延时与计数,占用了CPU计算资源,导致数码管扫描频率降低,亮度变暗。
同时对于录音时间得记录不精确,存在一定得误差。
ﻬ附录
程序源码
;=======================================================
;文件名:
Hypo、asm
;功能描述:
按键0-6为音符键,按下后会有对应得音调响起,
;按键弹起后音符终止。
; 按键12,13,14可以选择低音,中音,高音区。
; 按下按键15后开始播放之前按下得音符(不超过16个)
; 数码管0显示音符,数码管2显示音区
;=======================================================
IOY3ﻩEQU 06C0H
MY8254_COUNT0EQUIOY3+00H;8254计数器0端口地址
MY8254_COUNT1ﻩEQUIOY3+02H;8254计数器1端口地址
MY8254_COUNT2ﻩEQU IOY3+04H ;8254计数器2端口地址
MY8254_MODEﻩﻩEQUIOY3+06H ;8254控制寄存器端口地址
MY8255_A EQU 0600H ;8255A端口地址
MY8255_B EQU0602Hﻩ;8255B端口地址
MY8255_CEQU 0604H;8255C端口地址
MY8255_CONﻩEQU0606H ;8255控制端口地址
SSTACKﻩSEGMENTSTACK ;定义堆栈段
ﻩDW256DUP(?
)
SSTACKﻩENDSﻩ
DATAﻩSEGMENT
DTABLEﻩDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;数码管得段选数据
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
FREQ_LIST1DW 248,278,312,330,371,416,467 ;低音频率表
FREQ_LIST2DW 495,556,624,661,742,833,935 ;中音频率表
FREQ_LIST3 DW990,1112,1248,1322,1484,1665,1869 ;高音频率表
REC_DATADW 000,000,000,000,000,000,000,000;录音储存段
DW000,000,000,000,000,000,000,000
SB DB 00H,00H ;过渡段
REC_TIME DB 00H,00H,00H,00H,00H,00H,00H,00H ;时间储存段
ﻩﻩ DB00H,00H,00H,00H,00H,00H,00H,00H
SAVE_SI DW ?
;录音储存地址储存
SI_FREQ DW ?
;频率表地址储存
SAVE_SI_TIME DW ?
;时间储存表地址储存
SAVE_TIMEDB01H ;时间技术储存
CHOOSE_FLAGDW01H;频率表选择标志位
DATA ENDS
CODESEGMENT
ﻩASSUMECS:
CODE,DS:
DATA ;初始化数据段、代码段
START:
MOV AX,DATA
ﻩMOVDS,AX
ﻩMOVDX,MY8254_MODE ;初始化8254工作方式
ﻩMOVAL,36H ;定时器0、方式3
ﻩOUT DX,AL
ﻩMOV SI,OFFSET REC_DATA ;装入录音表初始地址
ﻩﻩMOV SAVE_SI,SI
ﻩﻩMOVCL,0EH
CLEAN_REC:
;录音表清零
ﻩMOV AX,0000H
ﻩMOV[SI],AX
ADDSI,2
ﻩLOOPCLEAN_REC
ﻩMOVSI,OFFSETREC_TIME ;装入时间表起始地址
ﻩMOVSAVE_SI_TIME,SI
ﻩﻩMOVSI,OFFSET FREQ_LIST1 ;装入频率表默认起始地址
MOV SI_FREQ,SIﻩ
ﻩMOVSI,3000H
MOVAL,00H
ﻩﻩMOV[SI],ALﻩﻩ;清显示缓冲
ﻩMOV[SI+1],AL
ﻩﻩMOV[SI+2],AL
ﻩMOV [SI+3],AL
ﻩMOV [SI+4],AL
ﻩﻩMOV[SI+5],AL
ﻩMOVDI,3005H
MOVDX,MY8255_CONﻩ;写8255控制字
MOVAL,81H
ﻩOUTDX,AL
BEGIN:
CALL DISﻩ;调用显示子程序
ﻩCALLDIS_FREQ ;调用音区显示子程序
CALLCLEARﻩﻩ;清屏
ﻩﻩCALLCCSCANﻩﻩﻩ;键盘扫描
ﻩJNZINK1
ﻩﻩJMP BEGIN
INK1:
CALL DIS
CALLDALLY
CALLDALLY
CALL CLEAR
CALLCCSCAN
ﻩJNZINK2ﻩﻩﻩ;有键按下,转到INK2
JMPBEGIN
;===============蜂鸣器关闭子程序==================
SILENT:
MOV DX,MY8254_MODE;初始化8254工作方式
MOV AL,36H ;定时器0、方式3
ﻩOUT DX,AL
ﻩRET
;===============远程跳转过渡=================ﻩ
PLAY2_JUMP:
JMPPLAY2
CHOOSE_JUMP1:
JMPCHOOSE1
CHOOSE_JUMP2:
JMPCHOOSE2
CHOOSE_JUMP3:
JMPCHOOSE3
;========================================
;确定按下键得位置
;========================================
INK2:
MOVCH,0FEH
ﻩMOVCL,00H
COLUM:
MOVAL,CH
MOVDX,MY8255_A
ﻩOUTDX,AL
MOVDX,MY8255_C
ﻩﻩINAL,DX
L1:
TESTAL,01H ;isL1?
JNZL2 ;如果不就是得话跳转到L2
MOVAL,00H ;L1
JMPKCODE
L2:
TESTAL,02H ;isL2?
JNZL3
MOVAL,04H ;L2