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

上传人:仙人指路1688 文档编号:2882040 上传时间:2023-03-01 格式:DOC 页数:19 大小:522KB
返回 下载 相关 举报
微机原理课程设计报告基于8086钢琴的程序设计.doc_第1页
第1页 / 共19页
微机原理课程设计报告基于8086钢琴的程序设计.doc_第2页
第2页 / 共19页
微机原理课程设计报告基于8086钢琴的程序设计.doc_第3页
第3页 / 共19页
微机原理课程设计报告基于8086钢琴的程序设计.doc_第4页
第4页 / 共19页
微机原理课程设计报告基于8086钢琴的程序设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《微机原理课程设计报告基于8086钢琴的程序设计.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计报告基于8086钢琴的程序设计.doc(19页珍藏版)》请在三一办公上搜索。

1、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

2、,8253及相关电路设计利用键盘输入发出不同频率的的音调。利用8255检测键盘,根据输入信号驱动数码管显示,控制8253,完成输入与检测;利用8253的分频输出不同的信号,经放大驱动扬声器发出声音。关键字: 8086、8255、8253、键盘正 文:一、总体框图本系统主要有两个功能模块组成:键盘扫描,蜂鸣器发声。围绕这二个功能需要用到三个主要芯片:8086,8255,8253。首先8086主芯片负责数据交换与处理,芯片初始化等。系统开始时对键盘进行扫描,有输入信号时,8255采集信号并输入8086进行处理, 8086接到8255输入的信号时,调用与之相关的初始值n,输入到8253,对clock

3、进行分频输出不同的频率信号,驱动扬声器发出不同的音调,同时8255对8253进行控制并对信号进行采集送到8086,决定发声时间的长短。二、方案的论证扬声器接口由8255、8253、驱动器和低通滤波器等构成,8255做控制器,8253做音频信号源。根据音阶频率表,利用8253可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:键盘接口采用8255A,使用A、B端口,对键盘的扫描,对8255初始化编程,写入控制字10001011B,方式0,A口作输出,B口和C口为输入。三、电路设计

4、3.1 扬声器接口电路扬声器接口如图所示,该电路主要作用是将8253A的OUT2端口输出的不同频率的波形经放大器LM386放大并驱动扬声器发出不同音调的声音.3.2键盘模块如图所示是16个按键的键盘,左边8个高音键,右边8个是低音键,8255的PA口对应于键盘的行,PB口键盘的列。利用程序检测键盘,先在PA口全部输出低电平,由二极管的单向导通,在键盘的每个按键的两边都是处于高电平的状态,当有按键按下时,该按键对应的行和列都变为低电平,再由PB口检测键盘两边的信号,低四位检测列,高四位检测行即可确定键值。3.3 总电路系统系统cpu8086工作在最小模式下,通过数据总线给8255写入控制字,使其

5、工作在方式0,A口作输出,B口作输入。系统通过8255检测键盘,检测到键盘的键值后再通过8086给8253写入相应的计数初值,产生需要的波形信号。其中,8255和8253的片选信号是由一片74LS138译码器提供。四、软件设计流程图4.1主流程图4.2键盘扫描子程序图键盘扫描程序流程图如上图所示,上面的键盘扫描包含以下几步:1、检测是否所有键都松开了,若没有则反复检测。2、当所有键都松开了,在检测是否有键压下,若无键压下则反复检测。3、若有键压下,要消除键抖动,再确定是否有键压下。4、对压下的键进行编码,将该键的行列信息转换成16进制码,由此确定哪个键被压下了,如果出现了多键重按的情况,则只有

6、在其他键均释放后,仅剩一个键闭合时,才把此键当做本次压下的键。5、该键释放后,再回到2。程序调试正常,截图如下:五、c51单片机系统仿真实现硬件仿真图六、总结与体会由于之前没有接触过protues仿真软件,所以前几天进展较慢,主要在熟习软件的使用方法,后来在老师的指导下,能够较熟练的应用该软件。通过本次课程设计让我们不仅加深了对8086 8253 8255 芯片的认识,而且汇编语言实际运用能力也得到了提高。本次课程设计让我们从课本的理论知识联系了实际运用。也使我们知道了理论知识的重要性,懂得了实际运用能力是对理论知识的升华。这对我们以后的学习将会有深厚的影响。总之,本次此次项目的实施,不仅有利

7、于提高我们的实际动手操作能力,也是一个将书本理论知识与现实中应用相结合的良好机遇,同时也进一步考验我们的团队协作能力、团队沟通意识等。以后我们会倍加珍惜课程设计让我们更好的学习的机会参考文献:微型计算机原理及接口技术中国科技大学出版社 吴秀清 周荷琴编著汇编语言程序设计南京大学出版社 姚君遗编著微型计算机原理及接口技术实验指导书DJ8086系列微机实验指导书 附件一、自动化专业微机原理课程设计任务书论文题目基于8086钢琴的程序设计设计类型导师姓名主要内容及目标1. 掌握利用pc机扬声器发出不同频率声音的方法.2. 学习利用系统功能调用从键盘上读取字符的方法.3.编写程序,程序运行时使pc机成

8、为一架可弹奏的”钢琴”。当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调.按下CTRL-C则退出”钢琴”状态.具有的设计条件1 PC机一台,EL教学实验箱一台及汇编程序;计划学生数及任务3人(1):明确课题对程序功能,运算精度等方面的要求。(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(3):存储器资源分配(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。计划设计进程(按课程设计周计算)第一周设计任务:(1):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。(2):存

9、储器资源分配第二周设计任务:(3):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序(4):对程序进行汇编,调试和修改,直到程序运行结果正确为止。参考文献微型计算机原理及接口技术中国科技大学出版社 吴秀清 周荷琴编著16-32位微型计算机技术及应用清华大学出版社 戴梅萼 史嘉权 编著汇编语言程序设计南京大学出版社 姚君遗编著汇编语言程序设计教程清华大学出版社 杨记文编著微型计算机原理及接口技术实验指导书附件二:汇编程序清单data segmentio8255a equ 0F0hio8255b equ 0F2hio8255c equ 0F4hio8255ctr equ 0F6hio8

10、253a 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 m

11、ov 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

12、 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 r

13、uai 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:m

14、ov 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语言

15、程序清单#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,64

16、898,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 0x

17、0d: 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;

18、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!=0x0

19、f) 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

20、: 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) t

21、emp=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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号