
基于8086的简易电子琴设计附汇编源程序.doc
23页《微机原理与接口技术》综合设计实验报告设计课题:基于8086的简易电子琴设计 指导老师:学生姓名:学 号:院 系:专 业:通信工程 整理为word格式基于8086的简易电子琴设计摘 要在学习《微机原理与接口设计》的基础上,针对课程设计要求,综合运用相关软件、硬件知识,设计一个简易电子琴,使之具有音区切换、数码管显示音区及当前音符、记录音符与音符持续时间、播放录制的音乐等功能 关键词:8086;电子琴;仿真调试;汇编整理为word格式 目 录第1章 总体方案设计 11.1 系统整体架构图 11.2 功能介绍 1第2章 硬件设计 22.1 硬件资源 22.2 硬件接线图 32.2.1 8254接线图 32.2.2 8255及键盘、数码管接线图 3第3章 软件设计 43.1 程序框图 43.1.1 整体框图 43.1.2 延时函数 53.1.3 键盘扫描 53.1.4 数码管显示 63.1.5 声音及时间录制 63.1.6 选择音区(高、中、低) 73.1.7 播放音乐 7第4章 实验结果及演示 8第5章 遇到的问题及改进措施 105.1 条件转移指令报错 105.2 无法使用8254作为录音时间计数器 10附 录 11程序源码 11整理为word格式第1章 总体方案设计1.1 系统整体架构图系统整体架构图如图1-1所示。
图1-11.2 功能介绍本实验设计实现了音区切换、数码管显示当前音区及音符、记录音符与音符持续时间、播放录制的音乐等功能功能具体说明如下按键0-6为音符键,按下后会有对应的音符音调响起,按键弹起后音符终止,此时,按下的音符以及时间将被记录按键12,13,14可以选择低音,中音,高音区按下按键15后开始播放录制的音符(不超过16个)另外数码管0显示音符,数码管2显示音区整理为word格式第2章 硬件设计2.1 硬件资源TD-PITE 实验教学系统,其主要系统构成如表2-1 所示CPUIntel 386EX存储器系统程序存储器:Flash ROM (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整理为word格式2.2 硬件接线图2.2.1 8254接线图8254芯片接线如图2-2所示图2-22.2.2 8255及键盘、数码管接线图8255及键盘、数码管接线方法如图2-3所示图2-3整理为word格式第3章 软件设计3.1 程序框图3.1.1 整体框图图3-1整理为word格式3.1.2 延时函数图3-23.1.3 键盘扫描图3-3整理为word格式3.1.4 数码管显示图3-43.1.5 声音及时间录制图3-5整理为word格式3.1.6 选择音区(高、中、低)图3-63.1.7 播放音乐图3-7整理为word格式第4章 实验结果及演示具体演示效果可扫描以下二维码进行观看,二维码如图4-1所示图4-1以下为视频截图系统初始运行状体如图4-2所示图4-2整理为word格式选择中音区,如图4-3所示图4-3按下音符健,如图4-4所示图4-4整理为word格式音乐播放,如图4-5所示图4-5第5章 遇到的问题及改进措施5.1 条件转移指令报错在编写程序时曾多次遇到使用条件转移指令时编译出错的情况查阅书本后发现条件转移指令只能在代码段的-128~+127字节内进行跳转。
解决办法:使用条件转移指令转移到一个较近程序段,并在这程序段使用无条件转移指令JMP进行转移5.2 无法使用8254作为录音时间计数器在进行设计的过程中,曾多次按照使用8254作为时间计数器的方案进行编程,但经过多次尝试后均以失败告终解决办法:使用软件延时进行计时,每次延时执行完毕后进行计数,该计数值就是音符的相对持续时间在播放时只需要调用同样时间长度的延时函数即可缺点:使用软件延时与计数,占用了CPU计算资源,导致数码管扫描频率降低,亮度变暗同时对于录音时间的记录不精确,存在一定的误差整理为word格式附 录程序源码;=======================================================; 文件名: Hypo.asm; 功能描述: 按键0-6为音符键,按下后会有对应的音调响起,; 按键弹起后音符终止 按键12,13,14可以选择低音,中音,高音区 按下按键15后开始播放之前按下的音符(不超过16个); 数码管0显示音符,数码管2显示音区;=======================================================IOY3 EQU 06C0HMY8254_COUNT0 EQU IOY3+00H ;8254计数器0端口地址MY8254_COUNT1 EQU IOY3+02H ;8254计数器1端口地址MY8254_COUNT2 EQU IOY3+04H ;8254计数器2端口地址MY8254_MODE EQU IOY3+06H ;8254控制寄存器端口地址MY8255_A EQU 0600H ;8255A端口地址MY8255_B EQU 0602H ;8255B端口地址MY8255_C EQU 0604H ;8255C端口地址MY8255_CON EQU 0606H ;8255控制端口地址SSTACK SEGMENT STACK ;定义堆栈段 DW 256 DUP(?)SSTACK ENDS DATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;数码管的段选数据 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H FREQ_LIST1 DW 248,278,312,330,371,416,467 ;低音频率表FREQ_LIST2 DW 495,556,624,661,742,833,935 ;中音频率表FREQ_LIST3 DW 990,1112,1248,1322,1484,1665,1869 ;高音频率表REC_DATA DW 000,000,000,000,000,000,000,000 ;录音储存段 DW 000,000,000,000,000,000,000,000SB DB 00H,00H ;过渡段REC_TIME DB 00H,00H,00H,00H,00H,00H,00H,00H ;时间储存段 DB 00H,00H,00H,00H,00H,00H,00H,00HSAVE_SI DW ? ;录音储存地址储存SI_FREQ DW ? ;频率表地址储存SAVE_SI_TIME DW ? ;时间储存表地址储存整理为word格式SAVE_TIME DB 01H ;时间技术储存CHOOSE_FLAG DW 01H;频率表选择标志位DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ;初始化数据段、代码段START: MOV AX,DATA MOV DS,AX MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,36H ;定时器0、方式3 OUT DX,AL MOV SI,OFFSET REC_DATA ;装入录音表初始地址 MOV SAVE_SI,SI MOV CL,0EHCLEAN_REC: ;录音表清零 MOV AX,0000H MOV [SI],AX ADD SI,2 LOOP CLEAN_REC MOV SI,OFFSET REC_TIME ;装入时间表起始地址 MOV SAVE_SI_TIME,SI MOV SI,OFFSET FREQ_LIST1 ;装入频率表默认起始地址 MOV SI_FREQ,SI MOV SI,3000H MOV AL,00H MOV [SI],AL ;清显示缓冲 M。












