微机原理课程设计打字练习计时_第1页
微机原理课程设计打字练习计时_第2页
微机原理课程设计打字练习计时_第3页
微机原理课程设计打字练习计时_第4页
微机原理课程设计打字练习计时_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微 机 原 理 课 程 设 计 书院别 信息科学技术学院 专业 计算机科学与技术 班级 题目 打字练习计时程序 教师 学生 2009年 6 月 1日内容提要 本设计为打字计时系统,其主要分为五章,第一章为设计概述,主要介绍设计的任务、目标,以及设计所用设备器材,第二章为软件设计环境与DOS,主要是介绍软件设计环境,以及DOS资料的介绍。并且在此之上画出了原理框图。第三章为软件设计,其主要介绍本设计中采用何种软件设计方案及相关的流程图,在流程图的基础上,写出本系统的程序。第四章为调试及运行结果,它是在完成软件设计的基础之上,对本系统进行测试,看是否满足题目要求,最后以表格的方式对测试的结果给予反

2、应,直接明了。第五章为设计心得总结,主要是介绍在经过本次设计后,自己的一些心得体会。最后还给出了本设计的一些参考文献。前 言微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确的结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。本设计是利用Masm for window集成实验环境来实现的打字练习计时程序,在程序中利用自编的中断程序kbint检测按键时产生的

3、中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。另外加入一个菜单模块,增加了程序的观赏性。本次课程设计由某某完成。其中主要负责软件方案及程序设计,主要负责协调测试,是负责寻找资料与文档的编写。目 录第一章 设计概述11.1设计任务11.2设计要求11.3设计目的11.4设备环境1第二章 设计环境22.1 Masm for window集成实

4、验环境介绍22.2 DOS中断介绍2第三章 软件设计方案43.1 软件设计思想43.2程序流程图43.3 程序清单6第四章 调试及运行结果18第五章 课程设计心得19参考文献20第一章 设计概述1.1设计任务利用PC机键盘和时间中断、字符显示实现打字练习程序。1.2设计要求在本系统中,要求所需执行的操作由相应的开关状态反映,其驾驶操作与灯光信号对应关系如下:。1) 自行编制键盘中断和时间中断处理程序,并保存原中断向量,程序运行时,使用自编的中断向量处理程序,程序退出时,恢复中断向量;2) 在缓冲区中预放了一些字母,程序运行时,可按照屏幕上显示的小写字母进行输入练习;3) 每输入完一行按回车键后

5、,可显示出练习输入的时间。 1.3设计目的 熟悉与掌握有关键盘和时间的中断及字符显示技术。1.4设备环境在本设计中,所用到的设备环境如下所示:A. 计算机一台;B. Masm for window集成实验环境;第二章 设计环境2.1 Masm for window集成实验环境介绍 Masm for Windows 集成实验环境是从事一线教学的大学教师针对汇编语言初学者的特点开发的一个简单易用的汇编语言的学习软件,它具有错误信息自动定位、关键字实时帮助(动画演示汇编指令执行过程)、语法着色、无限的撤消与恢复、WORD式的查找、替换、定位、支持中文长文件名、软件可以安装在任意文件夹等功能;a.建立

6、汇编源程序通过b.编译为目标文件d.连接为可执行文件 c.不通过,重新修改(语句错误) f.不正确,用调试工具调试,重新修改(逻辑错误) e运行 正确g.完成2.2 DOS中断介绍 使用DOS提供的程序控制硬件。优点是兼容性好,使用方便。DOS是IBM PC系列微机的操作系统(现在的微机仍能运行DOS,而且新的操作系统也能继续提供几乎所有的DOS功能调用)负责管理系统的所有资源,协调微机的操作,其中包括大量可供用户调用的服务程序。DOS的功能调用不依赖于具体的硬件系统。所有的DOS系统功能调用都是利用软件中断指令INT 21H来实现的。也就是说,在程序中需要调用DOS功能的时候,只要使用一条I

7、NT 21H指令即可。INT 21H是一个具有90多个子功能的中断服务程序,这些子功能大致可以分为四类:设备管理、目录管理、文件管理和其他。其功能一览表可参见附录。为了方便用户使用这些子功能,INT 21H对每一个子功能都进行了编号称为功能号。这样,用户就能通过指定功能号来调用INT 21H的不同子功能。DOS系统功能调用的方法如下:1) ->功能号。2) 在其他寄存器中放入该功能所要求的人口参数。3) 在执行INT 21H指令。4) 分析出口参数。用户程序与DOS、BIOS和硬件的关系见图应 用程 序DOSBIOS硬 件第三章 软件设计方案3.1 软件设计思想在键盘上练习的打字例句及其

8、地址表、计时单元等预先放在DATA数据段中。自编的中断程序kbint检测按键时产生的中断,并把按键的扫描码转换为ASCII码存入缓存区BUFFER(内存中的一个区域),这个工作和EOM 09类型的键盘中断例行程序所完成的工作大致相同,只是在解释各个键时作了简化,既只解释了可显示字符(入英文小写字母、数字及一些字符),其他特殊键(如组合键、双态键、功能键等)都未做解释,只作字符码0来处理。在主程序部分保存原有09类型的中段向量,设置自编例行程序的中断向量,设置中断屏蔽位,然后开中断。当键盘中断处理后,主程序安排指令读取缓存区中的字符并显示在屏幕上。在主程序的末尾,利用DOS功能恢复原09类型的中

9、断向量,然后返回DOS。在显示键入的字符时,还应判断字符是否为回车符(0DH)。如为回车符,说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始显示,直至键入某一个功能(如Esc键、Shift键等)退出程序,结束打字练习。打字时间统计利用自编的定时器中断处理程序Clint来完成。每输入一个例句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元count中,当count的计数值为18时,sec计数单元加1,当sec计数值打到60时,min计数单元加1.因为输入完一个句子无论如何也不会到达小时级,所以对

10、hours计数值的调整判断,实际上只起到退出定时器的作用。加入一个显示菜单程序,使得原来的程序更具有观赏性;显示时间的子程序disptime分别将各计时单元的二进制数转换为十进制数,并以min:sec:msec的形式出来。其中msec是有count中的计数值转换成的: Count*1s/18.2=count*55ms此式中,18.2是计算机系统产生的一个时间中断,每秒18.2次 3.2程序流程图显示菜单信息调用菜单宏清屏保存原中断向量09H到自设的单元中设置自骗处理程序的中断向量09H保存原中断向量1CH到自设的单元中设置自骗处理程序的中断向量1CH设置允许键盘和定时器中断设置显示方式为80&

11、#215;25显示提示信息在屏幕上显示例句初使化变量count、sec、min、hours开始中断调用kbget检测并等待键盘中断的子程序kbflag=80h?(键盘输入的是控制键或功能键吗)调用dispchar显示该字符键入的字符为回车符0DHAL换行符(0AH)调用dispchar显示回车换行符字符调用disptime显示打字时间显示回车换行符字符5个例句都练习完了吗?开始恢复原中断向量1CH、09H,返回操作系统结束NYNYY3.3 程序清单Init_game macro op1,op2,op3,op4,op5,op6mov cx,00hmov dh,op1mov dl,op2op6:m

12、ov ah,02hmov bh,00hint 10hpush cxmov ah,0ahmov al,op3mov bh,00hmov cx,01hint 10hpop cxinc cxinc op4cmp cx,op5jne op6endmclear_screen macro op1,op2,op3,op4 ;清屏宏定义mov ah,06hmov al,00hmov bh,07hmov ch,op1mov cl,op2mov dh,op3mov dl,op4int 10hmov ah,02hmov bh,00hmov dh,00hmov dl,00hint 10hendmmenu macro

13、op1,op2,op3 ;菜单显示宏定义mov ah,02hmov bh,00hmov dh,op1mov dl,op2int 10hmov ah,09hlea dx,op3int 21hendmSTACK SEGMENT PARA STACK 'STACK' ;堆栈段定义DB 256 DUP(0);改其他数字?TOP LABEL WORD STACK ENDS DATA SEGMENT PARA PUBLIC 'DATA' ;数据段定义BUFFER DB 16H DUP(0) BUFPT1 DW 0 BUFPT2 DW 0 KBFLAG DB 0 PROMPT

14、 DB ' *PLEASE PRACTISE TYPING*',0DH,0AH,'$' SCANTAB DB 0,0,'1234567890-=',8,0 ;检测是否为规定字符DB 'QWERTYUIOP',0DH,0 DB 'ASDFGHJKL;',0,0,0,0 DB 'ZXCVBNM,./',0,0,0 DB ' ',0,0,0,0,0,0,0,0,0,0,0,0,0 DB '789-456+1230.' EVEN OLDCS9 DW ? OLDIP9 DW ?

15、 STR1 DB 'ABCD EFGH IJKL MNOP QRST UVWX YZ.' ;打字练习的字母DB 0DH,0AH,'$' STR2 DB 'THERE ARE SOME NEWSPAPERS ON THE TABLE.' DB 0DH,0AH,'$' STR3 DB 'THERE ARE SOME CLOUDS IN THE SKY.' DB 0DH,0AH,'$' STR4 DB 'SHE ALWAYS EATS HER LUNCH AT NOON.' DB 0DH,

16、0AH,'$' STR5 DB 'I DO NOT LIKE AUTUMN AND WINTER.' CRLF DB 0DH,0AH,'$' COLON DB ':','$' EVEN SADDR DW STR1,STR2,STR3,STR4,STR5 ;存放以上的字母COUNT DW 0 SEC DW 0 ;定义秒数MIN DW 0 ;定义分数HOURS DW 0 ;定义时数SAVE_LC DW 2 DUP(?) evenZK db "WELCOME TO PLAY$" ;菜单的形式信息no

17、db "date:2003/6/01$"meg db "press Enter key to continue.$"meg1 db "when a letter is dropping,please hit it!$"meg2 db "Producer:caopodian,kangyonghong,lirui,hancong$"meg3 db "Number:200624101002,20062410101031,200624101020,200624101032$"meg4 db "

18、Hope that we play happy!$"speed dw 600dDATA ENDS ;数据段结束STACK SEGMENT PARA STACK 'STACK' ;堆栈段定义DB 256 DUP(0) TOP LABEL WORD STACK ENDS DATA SEGMENT PARA PUBLIC 'DATA' ;数据段定义BUFFER DB 16H DUP(0) BUFPT1 DW 0 BUFPT2 DW 0 KBFLAG DB 0 PROMPT DB ' *PLEASE PRACTISE TYPING*',0DH,

19、0AH,'$' SCANTAB DB 0,0,'1234567890-=',8,0 ;检测是否为规定字符DB 'QWERTYUIOP',0DH,0 DB 'ASDFGHJKL;',0,0,0,0 DB 'ZXCVBNM,./',0,0,0 DB ' ',0,0,0,0,0,0,0,0,0,0,0,0,0 DB '789-456+1230.' EVEN OLDCS9 DW ? OLDIP9 DW ? STR1 DB 'ABCD EFGH IJKL MNOP QRST UVWX

20、YZ.' ;打字练习的字母DB 0DH,0AH,'$' STR2 DB 'THERE ARE SOME NEWSPAPERS ON THE TABLE.' DB 0DH,0AH,'$' STR3 DB 'THERE ARE SOME CLOUDS IN THE SKY.' DB 0DH,0AH,'$' STR4 DB 'SHE ALWAYS EATS HER LUNCH AT NOON.' DB 0DH,0AH,'$' STR5 DB 'I DO NOT LIKE A

21、UTUMN AND WINTER.' CRLF DB 0DH,0AH,'$' COLON DB ':','$' EVEN SADDR DW STR1,STR2,STR3,STR4,STR5 ;存放以上的字母 saddr开辟存贮器空间COUNT DW 0 SEC DW 0 ;定义秒数MIN DW 0 ;定义分数HOURS DW 0 ;定义时数SAVE_LC DW 2 DUP(?) evenZK db "WELCOME TO PLAY$" ;菜单的形式信息no db "date:2003/6/01$"m

22、eg db "press Enter key to continue.$"meg1 db "when a letter is dropping,please hit it!$"meg2 db "Producer:caopodian,kangyonghong,lirui,hancong$"meg3 db "Number:200624101002,20062410101031,200624101020,200624101032$"meg4 db "Hope that we play happy!$"

23、speed dw 600d;? DATA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MAIN PROC FAR START: MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOP ;把TOP的偏移地址赋给SPPUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX clear_screen 00d,00d,24d,79dInit_game 00d,00d,0ah,dl,80d,nextsign1Init_game

24、 24d,00d,0ah,dl,80d,nextsign2Init_game 00d,00d,0ah,dh,25d,nextsign3Init_game 00d,79d,0ah,dh,25d,nextsign4menu 05d,15d,ZK ;菜单信息的宏调用menu 07h,15d,nomenu 09d,15d,megmenu 11d,15d,meg1menu 13d,15d,meg2menu 15d,15d,meg3menu 17d,15d,meg4MOV AH,35H MOV AL,09H INT 21Hmov ah,01h ;从键盘输入回车字符int 21hcmp al,0dhje s

25、peed3cmp al,45hje exitexit: mov ah,4chint 21hspeed3: mov ax,speed+12;?为什么加12mov speed,axjmp beginbegin: clear_screen 01d,01d,23d,78d ;清屏宏调用clear_screen 01d,01d,23d,78dInit_game 23d,01d,01h,dl,78d,nextsign5mov ah,02hmov bh,00hmov dh,01hmov dl,01hint 10hMOV OLDCS9,ES MOV OLDIP9,BX PUSH DS MOV DX,SEG K

26、BINT MOV DS,DX MOV DX,OFFSET KBINT MOV AL,09H MOV AH,25H INT 21H POP DS MOV AH,35H MOV AL,1CH INT 21H MOV SAVE_LC,BX MOV SAVE_LC+2,ES PUSH DS MOV DX,SEG CLINT MOV DS,DX MOV DX,OFFSET CLINT MOV AL,1CH MOV AH,25H INT 21H POP DS IN AL,21H AND AL,11111100B OUT 21H,ALFIRST: MOV AH,0 MOV AL,3 INT 10H MOV

27、DX,OFFSET PROMPT MOV AH,9 INT 21H MOV SI,0 NEXT: MOV DX,SADDRSI MOV AH,09H INT 21HMOV COUNT,0 MOV SEC,0 MOV MIN,0 MOV HOURS,0 STI FOREVER: CALL KBGET TEST KBFLAG,80H JNZ ENDINT PUSH AX CALL DISPCHAR POP AX CMP AL,0DH JNZ FOREVER MOV AL,0AH CALL DISPCHAR CALL DISPTIME LEA DX,CRLF MOV AH,09H INT 21H A

28、DD SI,2 CMP SI,5*2 JNE NEXT JMP FIRST ENDINT: CLI PUSH DSMOV DX,SAVE_LC MOV AX,SAVE_LC+2 MOV DS,AX MOV AL,1CH MOV AH,25H INT 21H POP DS PUSH DS MOV DX,OLDIP9 MOV AX,OLDCS9 MOV DS,AX MOV AL,09H MOV AH,25H INT 21H POP DS STI RET MAIN ENDP CLINT PROC NEAR PUSH DS MOV BX,DATA MOV DS,BX LEA BX,COUNT INC

29、WORD PTRBX CMP WORD PTRBX,18 JNE RETURN CALL INCT ADJ: CMP HOURS,12 JLE RETURN SUB HOURS,12 RETURN: POP DS STI IRET CLINT ENDP INCT PROC NEAR MOV WORD PTRBX,0 ADD BX,2 INC WORD PTRBX CMP WORD PTRBX,60 JNE EXITe CALL INCT EXITE: RETINCT ENDP DISPTIME PROC NEAR MOV AX,MIN CALL BINDEC MOV BX,0 MOV AL,&

30、#39;:' MOV AH,0EH INT 10H MOV AX,SEC CALL BINDEC MOV BX,0 MOV AL,':' MOV AH,0EH INT 10H MOV BX,COUNT MOV AL,55D MUL BL CALL BINDEC RET DISPTIME ENDP BINDEC PROC NEAR MOV CX,100D CALL DECDIV MOV CX,10D CALL DECDIV MOV CX,1 CALL DECDIV RET BINDEC ENDP DECDIV PROC NEAR MOV DX,0 DIV CX MOV BX,0 ADD AL,30H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论