打字计时练习程序设计微机原理课程设计.doc

上传人:土8路 文档编号:10027699 上传时间:2021-04-12 格式:DOC 页数:28 大小:161KB
返回 下载 相关 举报
打字计时练习程序设计微机原理课程设计.doc_第1页
第1页 / 共28页
打字计时练习程序设计微机原理课程设计.doc_第2页
第2页 / 共28页
打字计时练习程序设计微机原理课程设计.doc_第3页
第3页 / 共28页
打字计时练习程序设计微机原理课程设计.doc_第4页
第4页 / 共28页
打字计时练习程序设计微机原理课程设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《打字计时练习程序设计微机原理课程设计.doc》由会员分享,可在线阅读,更多相关《打字计时练习程序设计微机原理课程设计.doc(28页珍藏版)》请在三一文库上搜索。

1、目录 摘要.1 1 设计任务.2 1.1 初始条件 .2 1.2 要求完成的主要任务 .2 1.3 设计目的 .2 1.4 设备环境 .2 2 方案比较与认证.3 2.1 在缓冲区中预放一些字母的方法及比较 .3 2.2 显示出练习的时间的方法及比较 .3 3 3 软件设计方案软件设计方案.4 3.1 软件设计思想 .4 3.2 程序流程图 .5 3.2.1 主程序流程图.5 3.2.2 其他子程序原理及流程图.6 4 程序调试及问题分析.12 41 调试记录 .12 42 调试中出现的问题 .13 结束语.14 参考文献.15 附录.16 摘要 微机原理对于我们自动化的学生来说是一门非常重要

2、的基础课程,它与以往 的课程不太相同,它的实践性非常的强,其课程设计目的在于综合运用所学知 识,全面掌握微型计算机与 DOS 方式的工作原理、编程和使用方法。加强我们 的自身解决问题的能力,通过对题目的了解,进而对基本编程方法更加熟悉, 使我们可以更加熟练的使用汇编语言,来实现基本的功能。对于打字程序的设 计,需考虑到计算机内各种数制之间的转换,考虑到界面等问题,对于程序的 编写、调用应灵活运用。 关键词:汇编语言 DOS 调用 子程序调用 打字计时器 打字计时练习程序设计 1 设计任务 1.1 初始条件 设计一个打字计时练习程序,在屏幕实现,并显示正确率及计时。 1.2 要求完成的主要任务

3、1在缓冲区中预放一些字母,运行时,可按照屏幕上显示的字母输入练习。 2按某个键开始练习,每输入完一行按回车键后,可显示出练习的时间及正确 率。 1.3 设计目的 熟悉与掌握有关键盘和时间的中断及字符显示技术。 1.4 设备环境 在本设计中,所用到的设备环境如下所示: A. 计算机一台; B.MFPCI98 集成实验环境; 2 方案比较与认证 21 在缓冲区中预放一些字母的方法及比较 一是在数据段中预先存放一字符串,在程序运行时直接按顺序提取这一字符串; 二是在缓冲区中预先存放字符串后,再在程序运行时随机提取字母进行显示。 方案比较: 第一种方法显示的始终是同一组字符串,对于练习来说过于单一,对

4、 练习打字得不到很好的效果。第二种方法在显示时是在缓冲区预存的字符 串中随机选取,因此具有随机性能够很好的起到练习的效果,但同时程序 更为复杂。为了实现“在缓冲区中预放一些字母”这一功能,采用了第二 种方法。 2.2 显示出练习的时间的方法及比较 一是在输入过程中无时间显示,只有当输入完了按回车后才能显示练习所用的 时间; 二是在练习的过程中始终有时间显示,即显示系统时间。 方案比较: 第一种方法现实出的一段练习后的时间,第二种方法中一直有时间显示, 整体效果会更好,同时,第二种方法基本包括了第一种方法,因此,选择 方法二。 3 软件设计方案软件设计方案 3.1 软件设计思想 在键盘上练习的打

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

6、屏幕上。在主程序的末尾,利用 DOS 功能恢复原 09 类型 的中断向量,然后返回 DOS。 在显示键入的字符时,还应判断字符是否为回车符(0DH) 。如为回车符, 说明一个句子输入完毕,此时调用显示时间的子程序显示出打字时间,然后顺 序显示一个例句。如果所存放的例句都已显示完毕,则再次从第一个例句开始 显示,直至键入某一个功能(如 Esc 键、Shift 键等)退出程序,结束打字练习。 打字时间统计利用自编的定时器中断处理程序 Clint 来完成。每输入一个例 句,计时一次。在此中断例行程序中,定时器中断的次数记录在计数单元 count 中,当 count 的计数值为 18 时,sec 计数

7、单元加 1,当 sec 计数值打到 60 时, min 计数单元加 1.因为输入完一个句子无论如何也不会到达小时级,所以对 hours 计数值的调整判断,实际上只起到退出定时器的作用。 加入一个显示菜单程序,使得原来的程序更具有观赏性; 显示时间的子程序 disptime 分别将各计时单元的二进制数转换为十进制数, 并以 min:sec:msec 的形式出来。其中 msec 是有 count 中的计数值转换成的: Count*1s/18.2=count*55ms 此式中,18.2 是计算机系统产生的一个时间中断,每秒 18.2 次 3.2 程序流程图 3.2.1 主程序流程图 N Y Y N

8、段地址初始化 产生随机字符串 打开窗口 字符等于 81? 宏调用清屏 缓冲区中字符是否 输入完毕 屏幕上显示结果 退出打字状态 结束 开始 装载字符串输出 键盘打字输入字符 图 3-1 主程序流程图 3.2.2 其他子程序原理及流程图 打字结果计算与显示模块( UseTimeAndOut,RightRata_out)-主要计 算所用时间及正确率并输出。 设置字符颜色模块(clew_char)-主要设置打字时缓冲区字符和打字 区字符的颜色,包括错误时字符的颜色显示。 字符满行处理模块(isFullLine)-主要功能是当字符输入满行时进行 换行。 输出模块(OutTime,btod_out)-输

9、出程序运行时的时间。 统计模块(Tongji)-统计字符个数和正确个数并记录时间。 宏的应用: 清屏(Clear)- 用于按要求清理屏幕(不同颜色),以便产生想要的 窗口。 设置光标位置(SETGB)-用于移动光标位置,以便按要求输出。 读光标位置(READGB)-用于读取当前光标位置。 提示(Tishi)-用于输出提示语句。 (1)随机数产生原理: 随机产生字符的实现是通过调用中断(ah=2ch,int 10)取系统时间的1/100 来得到一组随机数,把这些随机数当做指针,然后取指针对应的字符表中相应 的字符来得到一串字符。在把结果显示到屏幕上时将数据拆分后输出到屏幕上。 (2)记录当前时间

10、和正确个数及打个数: 光标置位 提示时间输出 输出正确率 清屏 结束 开始 图 3-2 记录当前时间和正确个数及打个数部分流程图 (3)正确率输出模块流程图: 输入统计正确字符个数 计算正确率 整数部分输出 小数点输出 小数部分输出 %输出 结束 开始 图 3-3 正确率输出部分流程图 (4)计算打字时间及输出模块 N Y Y Y Y N 提取打字结束时系统 时间 结束时间与 stime2做差 一分钟进位(dh+60) SF=1 ZF=0 Cl-1 Cl-stime1 SF=1 ZF=0 一小时进位(dh+60) Ch-1 Ch-stime1 输出 N N 结束 开始 图 3-4 记录当前时间

11、和正确个数及打个数部分流程图 (5)数据打印输出: N Y N Y N N N Y Y 输出 BX 中内容 Bl/10,屏蔽 ax 高位 判断指针 si 是否为 0 将 tempsi内容送入 dl,dl+0 + ZF=1 dl 与0进行比较 ZF=0 Si+1,si 与 3 进行比较 jia dp=0 输出字符 AF=1 ZF=1 ZF=0 bp 与 1 进行比较 Si-1 输出字符 bp 与 1 进行比较 结束 开始 图 3-5 记录当前时间和正确个数及打个数部分流程图 (6)改变字符颜色: 所谓属性是指字符的颜色、背景颜色、是否闪烁、有没有底线等性质。 在彩色显示卡 ( CGA/EGA/V

12、GA 等 ) 的文字模式中,颜色是用 4 个位表 示,故可以表现出 16 种颜色,如下表: 表 3-1 颜色对应的代码 二进制数颜色二进制数颜色 0000黑色1000灰色 0001蓝色1001淡蓝色 0010绿色1010淡绿色 0011青色1000淡青色 0100红色1100淡红色 0101紫红色1101淡紫红色 0110棕色1110黄色 0111银色1111白色 在彩色显示器里,如 CGA、EGA、VGA 等,常用一个字节 ( 8 个 位 ) 来表示文字颜色和背景颜色,通常以第 03 位表示文字本身颜色; 第 46 位表示背景颜色,背景颜色只有上表左栏的 8 种而已;第 7 个位,表示是否闪

13、烁,0 表示不闪烁,1 表示闪烁。 改变字符颜色部分流程图: N N Y 读取光标位置 对 bp 进行除法处理 处理得出光标的置位值 设置光标属性,光标置位 bp 与 0 进行比较 temp0-1,temp1+50 设置光标及字符属性 bp-1 temp1-1 temp1与 14 进行比较 ZF=0 ZF=0 Y 结束 开始 图 3-6 改变字符颜色部分 4 程序调试及问题分析 41 调试记录 进入调试程序软件MFPCI98,在新建文件内输入源程序,生成汇编源文件, 汇编成功,无错误。之后连连接程序,生成可执行文件,在运行该文件,或使 用人机交互方式直接进行“编译- COLORCHAR MAC

14、RO char,color push ax push bx push cx push dx mov ah,9h;在光标位置显示字符和字符属性 mov al,char;AL字符 mov bh,0;显示页 mov bl,color;字符属性 mov cx,1;字符重复个数 int 10h mov ah,03h;读光标位置 ;DH:DL=行:列 mov bh,0;显示页号 int 10h mov ah,02;置光标位置 inc dl;列 int 10h pop dx pop cx pop bx pop ax ENDM ;- BACKCHAR MACRO char,color mov ah,02h;

15、mov dl,08h;退格 int 21h COLORCHAR char,color ENDM ;- CLEAR MACRO alz,bhz,chz,clz,dhz,dlz;清屏窗口 push ax push bx push cx push dx mov al,alz;上卷行数 mov bh,bhz;卷入行属性 mov ch,chz;左上角行数 mov cl,clz;左上角列数 mov dh,dhz;左下角行数 mov dl,dlz;左下角列数 mov ah,06h int 10h pop dx pop cx pop bx pop ax ENDM ;- ;- SETGB MACRO bhz,d

16、hz,dlz;设置光标位置 push ax push bx push cx push ax mov bh,bhz;显示页号 mov dh,dhz;行 mov dl,dlz;列 mov ah,2;置光标位置 int 10h pop dx pop cx pop bx pop ax ENDM ;- READGB MACRO bhz;读光标位置 push ax push bx push cx push dx mov bh,bhz;显示页号 mov ah,03h;读光标位置 int 10h mov gbattr0,dh;记录光标行 mov gbattr1,dl;记录光标列 pop dx pop cx p

17、op bx pop ax ENDM ;- LINEFULL MACRO lmax,lact push ax push bx push cx push dx mov ax,lact cmp ax,0 jz LFEXIT mov dx,0 cwd mov bx,lmax div bx cmp dx,0 jz LNFU jmp LFEXIT LNFU: mov FullFlag,1 LFEXIT: pop dx pop cx pop bx pop ax ENDM ;- TISHI MACRO row,col,addrr push ax push dx SETGB 0,row,col;设置光标位置 m

18、ov ah,09h lea dx,addrr int 21h pop dx pop ax ENDM ;- data segment addrr db 400 dup($) addrr1 db abcdefghijklmnopqrstuvwxyz0123456789$ addrr2 db 400 dup($) Anumber dw 0 ;总字符个数 Rnumber dw 0 ;正确字符个数 LineMax dw 0 ;满行的字符数 LineAct dw 0 ;当前行字符数 FullFlag db 0 ;满行标志FullFlag=1满行,FullFlag=0未满 gbattr db 2 dup(0

19、) ;存放字符所在行列 Stime db 3 dup(0) temp db 5 dup(0) ts1 db Stime:$ ts2 db Rrate:$ ts3 db Total Use-Time:$ ts4 db Total Characters:$ ts5 db Correct-Reta:$ ts6 db Press any key to end!$ ts7 db An ESC Jian KeYi SuiShi TuiChu!$ ts8 db *DaZi LianXi*$ data ends code segment assume ds:data,cs:code start: mov ax

20、,data mov ds,ax ;- mov di,0 ;随机产生字符 mov bx,65 zifu: mov ah,2ch int 21H mov al,dl cbw mov si,ax cmp si,35 ja zifu mov al,addrr1si mov addrrdi,al inc di dec bx push di push si mov di,400h Aa1: mov si,0ffffh Aa2: dec si jnz Aa2 dec di jnz Aa1 pop si pop di cmp bx,0 jnz zifu ;- CLEAR 0,77h,0,10,23,69 CL

21、EAR 0,37H,3,12,22,66 CLEAR 0,70h,4,14,22,64 CLEAR 0,25H,12,14,14,64 CLEAR 0,70h,13,18,13,35 CLEAR 0,70H,13,43,13,60 ;- SETGB 0,0,30 ;输出上面提示语句 CLEAR 0,25h,0,28,0,49 CLEAR 0,25h,2,23,2,54 CLEAR 0,57h,1,14,1,64 mov ah,09h lea dx,ts8 int 21h SETGB 0,2,24 mov ah,09h lea dx,ts7 int 21h ;- SETGB 0,4,14 mov

22、 di,0 mov cx,0ffffh AD: mov dl,addrrdi ;装载字符 cmp dl,$ jz A2 push dx mov bp,di CALL isFullLine pop dx mov ah,02h int 21h inc di loop AD A2: mov ah,2ch ;取系统时间 int 21h mov Stime0,ch mov Stime1,cl mov Stime2,dh SETGB 0,15,14 CALL TONGJI mov cx,0ffffh mov di,0h AS: cmp addrrdi,$ jnz ASnt00 jmp AEND ASnt0

23、0: mov bp,di CALL isFullLine mov bp,di CALL clew_char ;改变字符颜色 ;= reinput: ;输入字符开始打字 READGB 0 mov ah,01 int 21h cmp al,81 ;是否退出 jnz al27nt jmp exit ;- al27nt: cmp al,0dh jnz al0dnt SETGB 0,gbattr0,gbattr1 jmp reinput al0dnt: cmp al,08 jnz ASnext cmp gbattr1,14 jnz ASnz SETGB 0,gbattr0,gbattr1 jmp rei

24、nput ASnz: mov ah,02h mov dl, int 21h mov ah,02h mov dl,08h int 21h dec di dec Anumber push ax mov al,addrr2di cmp al,addrrdi jnz AS1nt dec Rnumber AS1nt: pop ax CALL TONGJI mov bp,di CALL clew_char ;改变字符颜色 jmp reinput ;- ;= ASnext: inc Anumber CALL TONGJI mov addrr2di,al cmp al,addrrdi jnz AER inc

25、Rnumber CALL TONGJI A3: inc di loop AS1 AS1: jmp AS AEND: jmp exit AER: mov temp1,al BACKCHAR temp1,74h jmp A3 exit: CLEAR 0,07,8,16,17,63 CLEAR 0,57,10,20,15,59 TISHI 11,24,ts3 call UseTimeAndOut TISHI 12,24,ts4 mov bx,Anumber call btod_out TISHI 13,24,ts5 call RightRata_out TISHI 14,30,ts6 mov ah,

26、08 int 21h mov ah,4ch int 21h ;- RightRata_out proc near ;输出正确率 push ax push bx push cx push dx mov ax,Rnumber;正确字符个数 mov cx,100 mul cx div Anumber ;字符总数 mov bx,ax CALL btod_out push dx mov ah,02h mov dl,. int 21h pop dx mov ax,dx mul cx div Anumber mov bx,ax CALL btod_out mov ah,2h mov dl,% int 21h

27、 pop dx pop cx pop bx pop ax ret RightRata_out endp ;- UseTimeAndOut proc near ;计算打字时间并输出 mov ah,2ch int 21h sub dh,Stime2 jns SecUnBlow jz SecUnBlow add dh,60 dec cl SecUnBlow: sub cl,Stime1 jns MinUnBlow jz SecUnBlow add cl,60 dec ch MinUnBlow: sub ch,Stime0 CALL OutTime ret UseTimeAndOut endp ;-

28、OutTime proc near ;显示时间ch:cl:dh mov al,ch cbw mov bx,ax CALL btod_out mov ah,02h mov dl,: int 21h mov al,cl cbw mov bx,ax CALL btod_out mov ah,02h mov dl,: int 21h mov al,dh cbw mov bx,ax CALL btod_out ret OutTime endp ;- TONGJI proc near ;记录当前时间和正确个数及已打个数 push ax push bx push cx push dx READGB 0 SE

29、TGB 0,13,20 CLEAR 0,70h,13,18,13,35 mov ah,09h lea dx,ts1 int 21h mov ah,2ch int 21h call UseTimeAndOut SETGB 0,13,45 mov ah,09h lea dx,ts2 int 21h mov ax,Rnumber mov bx,ax call btod_out mov ah,02h mov dl,/ int 21h mov ax,Anumber mov bx,ax call btod_out SETGB 0,gbattr0,gbattr1 pop dx pop cx pop bx p

30、op ax ret TONGJI endp ;- btod_out proc near ;输出BX中内容 把数据打印输出 push ax push cx push dx push bp mov ax,bx mov si,3 rota1: mov bl,10 div bl mov tempsi,ah and ax,00ffh dec si cmp si,0 jnz rota1 mov bp,1 mov si,1 rota2: mov dl,tempsi add dl,0 cmp dl,0 jz btodeal mov bp,0 btrt1: mov ah,02h int 21h btrt2: i

31、nc si cmp si,3 jna rota2 ;- 全部为0时输出一个0 cmp bp,1 jnz RT mov ah,2h int 21h ;- jmp RT btodeal: cmp bp,1 jz btrt2 jmp btrt1 RT: pop bp pop dx pop cx pop ax ret btod_out endp ;- isFullLine proc near ;满行后换行 push ax push bx mov ah,gbattr0 mov al,gbattr1 mov LineMax,51 ;满行时为51个字符 mov LineAct,bp LINEFULL Lin

32、eMax,LineAct ;判断是否满行 mov bl,FullFlag ;满行时为FullFlag= 1 cmp bl,0 jz isfexit READGB 0 ;读光标位置 add gbattr0,1 sub gbattr1,51 SETGB 0,gbattr0,gbattr1;设置光标位置 mov FullFlag,0 ;满行标志置0 isfexit: mov gbattr0,ah ;记录光标当前位置 mov gbattr1,al pop bx pop ax ret isFullLine endp ;- clew_char proc near ;改变字符颜色 push ax push

33、bx push cx push dx push si READGB 0 mov ax,bp mov bl,51 div bl mov dh,4 mov dl,14 add dh,al add dl,ah mov temp0,dh mov temp1,dl SETGB 0,temp0,temp1 COLORCHAR addrrbp,70h cmp bp,0 jz resetgb cmp temp1,14 jz clew2 sub temp1,1 clew1: mov bx,bp dec bx SETGB 0,temp0,temp1 COLORCHAR addrrbx,5eh jmp resetgb clew2: sub temp0,1 add temp1,50 jmp clew1 resetgb: SETGB 0,gbattr0,gbattr1 pop si pop dx pop cx pop bx pop ax ret clew_char endp ;- code ends end start

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1