微机原理课程设计报告基于8086钢琴的程序设计

上传人:仙*** 文档编号:36049476 上传时间:2021-10-29 格式:DOC 页数:20 大小:522KB
返回 下载 相关 举报
微机原理课程设计报告基于8086钢琴的程序设计_第1页
第1页 / 共20页
微机原理课程设计报告基于8086钢琴的程序设计_第2页
第2页 / 共20页
微机原理课程设计报告基于8086钢琴的程序设计_第3页
第3页 / 共20页
点击查看更多>>
资源描述
Hefei University微机原理课程设计报告课题名称:基于8086钢琴的程序设计 班 级:09自动化(1)班 报 告 人: 指导教师: 2011 年 12 月 30 日目录摘 要:3关键字:3正 文:3一、总体框图3二、方案的论证3三、电路设计43.1 扬声器接口电路43.2键盘模块43.3 总电路系统5四、软件设计流程图64.1主流程图64.2键盘扫描子程序图7五、c51单片机系统仿真实现9六、总结与体会9参考文献:9附件一、自动化专业微机原理课程设计任务书10附件二:汇编程序清单11附件三:C语言程序清单15基于8086钢琴的程序设计摘 要:本设计以8086为主体,结合使用8255,8253及相关电路设计利用键盘输入发出不同频率的的音调。利用8255检测键盘,根据输入信号驱动数码管显示,控制8253,完成输入与检测;利用8253的分频输出不同的信号,经放大驱动扬声器发出声音。关键字: 8086、8255、8253、键盘正 文:一、总体框图本系统主要有两个功能模块组成:键盘扫描,蜂鸣器发声。围绕这二个功能需要用到三个主要芯片:8086,8255,8253。首先8086主芯片负责数据交换与处理,芯片初始化等。系统开始时对键盘进行扫描,有输入信号时,8255采集信号并输入8086进行处理, 8086接到8255输入的信号时,调用与之相关的初始值n,输入到8253,对clock进行分频输出不同的频率信号,驱动扬声器发出不同的音调,同时8255对8253进行控制并对信号进行采集送到8086,决定发声时间的长短。二、方案的论证扬声器接口由8255、8253、驱动器和低通滤波器等构成,8255做控制器,8253做音频信号源。根据音阶频率表,利用8253可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:键盘接口采用8255A,使用A、B端口,对键盘的扫描,对8255初始化编程,写入控制字10001011B,方式0,A口作输出,B口和C口为输入。三、电路设计3.1 扬声器接口电路扬声器接口如图所示,该电路主要作用是将8253A的OUT2端口输出的不同频率的波形经放大器LM386放大并驱动扬声器发出不同音调的声音.3.2键盘模块如图所示是16个按键的键盘,左边8个高音键,右边8个是低音键,8255的PA口对应于键盘的行,PB口键盘的列。利用程序检测键盘,先在PA口全部输出低电平,由二极管的单向导通,在键盘的每个按键的两边都是处于高电平的状态,当有按键按下时,该按键对应的行和列都变为低电平,再由PB口检测键盘两边的信号,低四位检测列,高四位检测行即可确定键值。3.3 总电路系统系统cpu8086工作在最小模式下,通过数据总线给8255写入控制字,使其工作在方式0,A口作输出,B口作输入。系统通过8255检测键盘,检测到键盘的键值后再通过8086给8253写入相应的计数初值,产生需要的波形信号。其中,8255和8253的片选信号是由一片74LS138译码器提供。四、软件设计流程图4.1主流程图4.2键盘扫描子程序图键盘扫描程序流程图如上图所示,上面的键盘扫描包含以下几步:1、检测是否所有键都松开了,若没有则反复检测。2、当所有键都松开了,在检测是否有键压下,若无键压下则反复检测。3、若有键压下,要消除键抖动,再确定是否有键压下。4、对压下的键进行编码,将该键的行列信息转换成16进制码,由此确定哪个键被压下了,如果出现了多键重按的情况,则只有在其他键均释放后,仅剩一个键闭合时,才把此键当做本次压下的键。5、该键释放后,再回到2。程序调试正常,截图如下:五、c51单片机系统仿真实现硬件仿真图六、总结与体会由于之前没有接触过protues仿真软件,所以前几天进展较慢,主要在熟习软件的使用方法,后来在老师的指导下,能够较熟练的应用该软件。通过本次课程设计让我们不仅加深了对8086 8253 8255 芯片的认识,而且汇编语言实际运用能力也得到了提高。本次课程设计让我们从课本的理论知识联系了实际运用。也使我们知道了理论知识的重要性,懂得了实际运用能力是对理论知识的升华。这对我们以后的学习将会有深厚的影响。总之,本次此次项目的实施,不仅有利于提高我们的实际动手操作能力,也是一个将书本理论知识与现实中应用相结合的良好机遇,同时也进一步考验我们的团队协作能力、团队沟通意识等。以后我们会倍加珍惜课程设计让我们更好的学习的机会参考文献:微型计算机原理及接口技术中国科技大学出版社 吴秀清 周荷琴编著汇编语言程序设计南京大学出版社 姚君遗编著微型计算机原理及接口技术实验指导书DJ8086系列微机实验指导书 附件一、自动化专业微机原理课程设计任务书论文题目基于8086钢琴的程序设计设计类型导师姓名主要内容及目标1. 掌握利用pc机扬声器发出不同频率声音的方法.2. 学习利用系统功能调用从键盘上读取字符的方法.3.编写程序,程序运行时使pc机成为一架可弹奏的”钢琴”。当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调.按下CTRL-C则退出”钢琴”状态.具有的设计条件1 PC机一台,EL教学实验箱一台及汇编程序;计划学生数及任务3人(1):明确课题对程序功能,运算精度等方面的要求。(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):存储器资源分配(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。计划设计进程(按课程设计周计算)第一周设计任务:(1):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(2):存储器资源分配第二周设计任务:(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。参考文献微型计算机原理及接口技术中国科技大学出版社 吴秀清 周荷琴编著16-32位微型计算机技术及应用清华大学出版社 戴梅萼 史嘉权 编著汇编语言程序设计南京大学出版社 姚君遗编著汇编语言程序设计教程清华大学出版社 杨记文编著微型计算机原理及接口技术实验指导书附件二:汇编程序清单data segmentio8255a equ 0F0hio8255b equ 0F2hio8255c equ 0F4hio8255ctr equ 0F6hio8253a equ 84hio8253b equ 86hio8253c equ 88hio8253ctr equ 8Ahmsg db Please input one number(17):,0dh,0ah,$ ; 1 2 3 4 5 6 7table db 0ebh,0dbh,0bbh,0edh,0ddh,0bdh,0eeh;data ends stack segment stack dw 50 dup(0);top_stac label wordstack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,stack mov ss,ax ;lea sp,top_stack mov ax,data mov ds,ax mov dx,offset msg mov ah,9 int 21h mov dx, io8255ctr mov al,10001011b out dx,al mov dx, io8255a mov al,00h out dx,al mov dx,io8255cwait_open: in al,dx and al,0fh cmp al,0fh je wait_open ;mov al,0feh ;mov cl,al wait_pres: in al,dx and al,0fh cmp al,0fh je wait_pres mov cx,002ahdelay: loop delay in al,dx and al,0fh cmp al,0fh je wait_pres mov al,0feh mov cl,alnext_row: mov dx, io8255a out dx,al mov dx, io8255c in al,dx and al,0f0h cmp al,0f0h jne camp rol cl,1 mov al,cl jmp next_rowcamp: mov dx, io8255c in al,dx cmp al,0ebh je duo cmp al,0dbh je ruai cmp al,0bbh je mi cmp al,0edh je fa cmp al,0ddh je suo cmp al,0bdh je la cmp al,0eeh je xi jmp startduo: mov bx,262call midojmp startruai: mov bx,294call midojmp startmi:mov bx,330call midojmp startfa:mov bx,349call midojmp startsuo:mov bx,392call midojmp startla:mov bx,440call midojmp startxi:mov bx,494call midojmp start mido PROC near mov dx,io8253ctr mov al,10110110B out dx,al mov dx,0012H mov ax,34deHDIV BX mov dx,io8253aOUT dx,ALMOV AL,AHOUT dx,AL call delay1retmido endpdelay1 PROC nearMOV DX,01FFHDEL1: MOV CX,0FFFFHDEL2: LOOP DEL2DEC DXJNZ DEL1retdelay1 endpCODE ENDSEND START 附件三:C语言程序清单#include unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp; unsigned char key; unsigned char i,j; unsigned char STH0; unsigned char STL0; unsigned int code tab=64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178; void main(void) TMOD=0x01; ET0=1; EA=1; while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=3; break; case 0x0d: key=2; break; case 0x0b: key=1; break; case 0x07: key=0; break; temp=P3; /多P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=6; break; case 0x0b: key=5; break; case 0x07: key=4; break; temp=P3; /多P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=11; break; case 0x0d: key=10; break; case 0x0b: key=9; break; case 0x07: key=8; break; temp=P3; /多P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=15; break; case 0x0d: key=14; break; case 0x0b: key=13; break; case 0x07: key=12; break; temp=P3; /多P1_0=P1_0; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; TR0=0; void t0(void) interrupt 1 using 0 TH0=STH0; TL0=STL0; P1_0=P1_0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


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

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


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