基于某8086地简易电子琴设计附总汇编源程序

上传人:痛*** 文档编号:86717664 上传时间:2022-05-08 格式:DOC 页数:22 大小:6.14MB
返回 下载 相关 举报
基于某8086地简易电子琴设计附总汇编源程序_第1页
第1页 / 共22页
基于某8086地简易电子琴设计附总汇编源程序_第2页
第2页 / 共22页
基于某8086地简易电子琴设计附总汇编源程序_第3页
第3页 / 共22页
点击查看更多>>
资源描述
微机原理与接口技术综合设计实验报告设计课题:基于8086的简易电子琴设计 指导教师:学生:学 号:院 系:专 业:通信工程 基于8086的简易电子琴设计摘 要在学习微机原理与接口设计的根底上,针对课程设计要求,综合运用相关软件、硬件知识,设计一个简易电子琴,使之具有音区切换、数码管显示音区与当前音符、记录音符与音符持续时间、播放录制的音乐等功能。关键词:8086;电子琴;仿真调试;汇编目录第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程序源码1119 / 22第1章 总体方案设计 系统整体架构图系统整体架构图如图1-1所示。图1-1本实验设计实现了音区切换、数码管显示当前音区与音符、记录音符与音符持续时间、播放录制的音乐等功能。功能具体说明如下。按键0-6为音符键,按下后会有对应的音符音调响起,按键弹起后音符终止,此时,按下的音符以与时间将被记录。按键12,13,14可以选择低音,中音,高音区。按下按键15后开始播放录制的音符不超过16个。另外数码管0显示音符,数码管2显示音区。第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 线通用集成电路扩展单元、扩展模块总线单元系统电源表 2-1 TD-PITE 系统构成系统硬件结构如图 2-1 所示。图2-12.2 硬件接线图8254芯片接线如图2-2所示。图2-22.2.28255与键盘、数码管接线图8255与键盘、数码管接线方法如图2-3所示。图2-3第3章 软件设计3.1 程序框图图3-1图3-2图3-3图3-4图3-53.1.6选择音区高、中、低图3-6图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计算资源,导致数码管扫描频率降低,亮度变暗。同时对于录音时间的记录不准确,存在一定的误差。附 录程序源码;=; 功能描述: 按键0-6为音符键,按下后会有对应的音调响起,; 按键弹起后音符终止。; 按键12,13,14可以选择低音,中音,高音区。; 按下按键15后开始播放之前按下的音符不超过16个; 数码管0显示音符,数码管2显示音区;=IOY3EQU 06C0HMY8254_COUNT0EQU IOY3+00H ;8254计数器0端口地址MY8254_COUNT1EQU IOY3+02H ;8254计数器1端口地址MY8254_COUNT2EQU IOY3+04H ;8254计数器2端口地址MY8254_MODEEQU IOY3+06H ;8254控制存放器端口地址MY8255_A EQU 0600H ;8255A端口地址MY8255_B EQU 0602H ;8255B端口地址MY8255_C EQU 0604H ;8255C端口地址MY8255_CONEQU 0606H ;8255控制端口地址SSTACKSEGMENT STACK ;定义堆栈段DW 256 DUP(?)SSTACKENDSDATA SEGMENTDTABLEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;数码管的段选数据DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HFREQ_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 ? ;时间储存表地址储存SAVE_TIME DB 01H ;时间技术储存CHOOSE_FLAG DW 01H;频率表选择标志位DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;初始化数据段、代码段START: MOV AX,DATAMOV DS,AXMOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,36H ;定时器0、方式3OUT DX,ALMOV SI,OFFSET REC_DATA ;装入录音表初始地址MOV SAVE_SI,SIMOV CL,0EHCLEAN_REC: ;录音表清零MOV AX,0000HMOV SI,AXADD SI,2LOOP CLEAN_RECMOV SI,OFFSET REC_TIME ;装入时间表起始地址MOV SAVE_SI_TIME,SIMOV SI,OFFSET FREQ_LIST1 ;装入频率表默认起始地址MOV SI_FREQ,SIMOV SI,3000HMOV AL,00HMOV SI,AL;清显示缓冲MOV SI+1,ALMOV SI+2,ALMOV SI+3,ALMOV SI+4,ALMOV SI+5,ALMOV DI,3005H MOV DX,MY8255_CON;写8255控制字 MOV AL,81HOUT DX,ALBEGIN: CALL DIS;调用显示子程序CALL DIS_FREQ ;调用音区显示子程序CALL CLEAR;清屏CALL CCSCAN;键盘扫描JNZ INK1JMP BEGININK1: CALL DIS CALL DALLY CALL DALLY CALL CLEARCALL CCSCANJNZ INK2;有键按下,转到INK2JMP BEGIN;=蜂鸣器关闭子程序=SILENT:MOV DX,MY8254_MODE ;初始化8254工作方式MOV AL,36H ;定时器0、方式3OUT DX,ALRET;=远程跳转过渡=PLAY2_JUMP: JMP PLAY2CHOOSE_JUMP1: JMP CHOOSE1CHOOSE_JUMP2: JMP CHOOSE2CHOOSE_JUMP3: JMP CHOOSE3;=;确定按下键的位置;=INK2: MOV CH,0FEHMOV CL,00HCOLUM: MOV AL,CH MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C IN AL,DXL1: TEST AL,01H ;is L1? JNZ L2 ;如果不是的话跳转到L2 MOV AL,00H ;L1JMP KCODEL2: TEST AL,02H ;is L2? JNZ L3 MOV AL,04H ;L2 JMP KCODEL3: TEST AL,04H ;is L3? JNZ L4 MOV AL,08H ;L3JMP KCODEL4: TEST AL,08H ;is L4? JNZ NEXT MOV AL,0CH ;L4;=;确认按键的值;=KCODE: ADD AL,CLCALL PUTBUFPUSH AX;=;键值存在AX中 ;= CMP AX,12 ;选择音区1 JZ CHOOSE_JUMP1 CMP AX,13 ;选择音区2 JZ CHOOSE_JUMP2 CMP AX,14 ;选择音区3 JZ CHOOSE_JUMP3 CMP AX,15 ;播放录制的音乐 JZ PLAY2_JUMP ;jump to play2 POP AXPUSH AXCALL PLAY ; 播放音符POP AXPUSH AX;=;松手检测;=KON: CALL DIS CALL DIS_FREQCALL CLEARCALL T_TIME ;按键没有弹起,执行时间计数POP AXPUSH AXCALL CCSCANJNZ KON ;判断是否弹起,如果没有弹起,继续检测。;按键弹起后:CALL SILENT ;蜂鸣器静音MOV SI,SAVE_SI_TIME MOV AL,SAVE_TIMEMOV SI,AX ;按下的时间进入时间表INC SAVE_SI_TIME;时间表地址+1MOV SAVE_TIME,00H;时间计数清零INC SAVE_SI ;录音表地址+1INC SAVE_SIPOP AXNEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUMKERR: JMP BEGINT_TIME: ;时间计数CALL DALLY3INC SAVE_TIMERET;=;键盘扫描子程序,有按键按下,返回1;=CCSCAN: MOV AL,00H MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C IN AL,DXNOT AL AND AL,0FHRET;=;清屏子程序;=CLEAR: MOV DX,MY8255_B MOV AL,00H OUT DX,ALRET;=;显示子程序;=DIS: PUSH AXMOV SI,3000H;数码管地址MOV DL,0FEH ;数码管位选MOV AL,DLAGAIN: PUSH DX MOV DX,MY8255_A OUT DX,AL ;数码管位选输出 MOV AL,SI MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AX ;得到数码管段选数据MOV AL,BX MOV DX,MY8255_B OUT DX,AL ;数码管段选输出CALL DALLY POP DX MOV AL,DLMOV DL,ALJMP OUT1OUT1: POP AXRET;= 延时子程序 =DALLY: PUSH CX MOV CX,0006HT1: MOV AX,009FHT2: DEC AXJNZ T2LOOP T1POP CXRET;=;存键盘值到相应位的缓冲中;=PUTBUF: MOV SI,ALCMP DI,3005HJNZ GOBACKGOBACK: RETCHOOSE1:MOV SI,OFFSET FREQ_LIST1 ;装入频率表1起始地址MOV SI_FREQ,SIMOV CHOOSE_FLAG,01HJMP BEGINCHOOSE2:MOV SI,OFFSET FREQ_LIST2 ;装入频率表2起始地址MOV SI_FREQ,SIMOV CHOOSE_FLAG,02HJMP BEGINCHOOSE3:MOV SI,OFFSET FREQ_LIST3 ;装入频率表3起始地址MOV SI_FREQ,SIMOV CHOOSE_FLAG,03HJMP BEGIN;=;音区数码管显示;=DIS_FREQ: PUSH AXMOV SI,3003HMOV DL,0FBHMOV AL,DLAGAIN1: PUSH DX MOV DX,MY8255_A OUT DX,AL MOV AL,SI MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,CHOOSE_FLAGMOV AL,BX MOV DX,MY8255_B OUT DX,ALCALL DALLY POP DX MOV AL,DLMOV DL,ALJMP OUT2OUT2: POP AXRETPLAY: MOV SI,SI_FREQ ;装入频率表起始地址ADD SI,AXADD SI,AXMOV DX,0FH ;输入时钟为1MHz,1M = 0F4240H MOV AX,4240H DIV WORD PTR SI ;取出频率值计算计数初值,0F4240H / 输出频率 MOV SI,SAVE_SI ;将计数初值存入录音音符段MOV SI,AXMOV DX,MY8254_COUNT0 ;蜂鸣器播放音符OUT DX,AL MOV AL,AHOUT DX,ALRETPLAY2: MOV SI,OFFSET REC_DATA ;装入录音表计数初值起始地址MOV DI,OFFSET REC_TIME ;装入录音时间表起始地址PLAY2_1: MOV AX,SIMOV DX,MY8254_COUNT0OUT DX,AL ;装入计数初值并播放MOV AL,AHOUT DX,ALMOV DL,DI ;取出演奏相对时间,调用延时子程序 CALL DALLY2ADD SI,2INC DICALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CALL DALLY3CMP WORD PTR SI,0 ;判断是否到曲末?JE XXX ;如果来到曲末跳转到开始JMP PLAY2_1;否如此继续播放下一个音符XXX: JMP START ;远程跳转过渡DALLY2PROC ;延时子程序2D0:MOV CX,0015HD1:MOV AX,00F0HD2:DEC AXJNZ D2 LOOP D1DEC DLJNZ D0RETDALLY2ENDPDALLY3PROC ;延时子程序3D00:MOV CX,0010HD11:MOV AX,00F0HD22:DEC AXJNZ D22LOOP D11RETDALLY3ENDPCODEENDSEND START
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!