《单词记忆测试器.doc》由会员分享,可在线阅读,更多相关《单词记忆测试器.doc(45页珍藏版)》请在三一办公上搜索。
1、摘 要随着现代社会的发展,电子技术的进步我们有目共睹,计算机是现代电子技术的成果。在现实生活中、科学研究中计算机起着越来越重要的作用。微型计算机原理这门课程是对计算机进一步的了解与接触,微型计算机原理是一门培养计算机应用能力的技术基础课程。本课程主要介绍了有关微型计算机的硬件基础知识、基本原理,掌握汇编语言的指令以及编程应用。本课程设计是基于微机原理与接口技术的简单应用。本设计以8086cpu为处理器,利用8255处理芯片的复位功能来实现对于单词的录入,读取。以12854点阵液晶屏为显示器件,并使用56距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,,可储存10-20个英文单
2、词,作为记忆测试用。关键词:8086cpu;8255处理芯片;12854点阵液晶屏 5*6矩阵键盘目 录1绪论11.1基本内容11.2用途及特点12方案选择及论证22.1设计方案22.1.1设计方案一22.1.2设计方案二22.2方案论证23硬件系统说明43.1硬件设计思路43.1.1中央处理模块43.1.2显示模块的硬件部分介绍43.1.3 矩阵键盘73.2系统构成框图83.3芯片选择93.3.1 8086CPU内部结构及其各引脚93.3.2 8255A处理芯片103.4电路原理图设计133.5存储空间与I/O地址分配144 软件系统说明154.1软件设计思路154.1.1程序主模块154.
3、1.2单词录入模块164.1.3单词测试模块184.1.4矩阵键盘输入模块194.1.5 LCD12864显示模块194.1.6显示字模码的提取模块204.2源程序清单205所选芯片清单28总结29致谢30参考文献311绪论 随着现代社会的发展,电子技术的进步我们有目共睹,计算机是现代电子技术的成果。在现实生活中、科学研究中计算机起着越来越重要的作用。多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。在越来越多的场合中,计算机扮演着意味深远的角色。微型计算机原理这门课程是对计算机进一步的了解与接触,微型计算机原理是一门培养计算机应用能力的技术基础课程。
4、本课程主要介绍了有关微型计算机的硬件基础知识、基本原理,掌握汇编语言的指令以及编程应用。本次课程设计是基于微机原理与接口技术的简单应用。1.1基本内容 本设计以8086CPU为处理器,利用8255处理芯片的复位功能来实现对于单词的录入,读取。以12854点阵液晶屏为显示器件,并使用56距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,,可储存10-20个英文单词,作为记忆测试用,具体内容分为:1.输入单词,提示输入单词,输入最少5个、最多255个英文单词,每个单词不超过20个字符。若直接回车,则结束单词输入,进入单词测试。输足20个字符,自动进入下一个单词的输入。不足20个字符
5、个字符,按回车键进入下一个单词的输入。2.单词记忆测试:从输入的第一个单词开始测试。键入y(不分大小写)或n,回答是否认识,不需按回车键确认,其它按键无效。紧接着,没有提示,可按上移键或下移键循环测试。按Esc键结束测试。3.计算单词识别率并显示输出。4.提示是否进行下一组单词的输入和测试,键入y(不分大小写)或n选择是否继续,不需按回车键确认,其它按键无效。1.2用途及特点本论文的研究对象是基于808CPU的单词记忆测试器的设计,此单词记忆测试器可以实现单词的输入并判断输入的单词是否正确,单词背完后给出正确率。此项设计为现实生活中人们学习英语提供了很大的帮助,在现代社会有着广泛的应用。2方案
6、选择及论证 2.1设计方案本题目实质上是一个具有一定复杂程度键盘扫描程序,可将单词存储在一个二维数组中。根据课题要求,使用8086CPU进行编程,采用8255处理芯片以及复位电路和时钟电路,建立字符型数组存放单词,通过LCD显示所存放的单词。根据设计书的基本内容,有两种设计方案。2.1.1设计方案一首先利用了编程程序,编辑8255芯片控制字, 对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后, 输出到CPU芯片的A端口中,由此实现对其的初始化。其次接入键盘和显示屏,进行初始化,然后录入单词,测试单词,可以输入5个单词,但不超过255
7、个,单词不超过20个字符,按回车键进行下一个单词的输入,然后进行单词记忆测试:从输入的第一个单词开始测试。键入y(不分大小写)或n,回答是否认识,不需按回车键确认,其它按键无效。紧接着,没有提示,可按上移键或下移键循环测试。按Esc键结束测试。计算单词识别率并显示输出。提示是否进行下一组单词的输入和测试,键入y(不分大小写)或n选择是否继续,不需按回车键确认,其它按键无效。2.1.2设计方案二对CPU和8255A先进行初始化,再对键盘和显示屏进行初始化,然后录入单词,测试单词,可以输入5个单词,但不超过255个单词,单词的输入分为两种情况,第一种是单词必须够20个字符,自动进入下一个单词的输入
8、,第二种是单词输入不超过20个单词,按回车键进行下一个单词的输入,出现哪个执行哪个,然后进行单词记忆测试,从输入的第一个单词开始测试。键入y(不分大小写)或n,回答是否认识,不需按回车键确认,其它按键无效。紧接着,没有提示,可按上移键或下移键循环测试。按Esc键结束测试。计算单词识别率并显示输出。提示是否进行下一组单词的输入和测试,键入y(不分大小写)或n选择是否继续,不需按回车键确认,其它按键无效。2.2方案论证认真对比两个方案,方案一和方案二都有自己的优点和缺点,我们选择的是方案二,方案一的单词没有输入够20个字符,需要按键才能进行下一个单词的读写,这样的话没有考虑到输入够20个字符。方案
9、二是输入够20个字符,不需要按键就能进行下一个单词的读写,输入不够20个字符,需要按键才能进行下一项,我们可以两个都采用,输足20个字符,自动进入下一个单词的输入,不足20个字符个字符,按回车键进入下一个单词的输入。这样可以考虑到所有的情况,可以实现单词的写入。3硬件系统说明此次设计的课题分为硬件和软件两部分。硬件方面主要由处理芯片和时钟振荡电路,复位电路整个实现字符的输入、输出以及电子显示液晶屏的清屏操作。硬件系统部分包括三个模块:中央处理模块、显示模块、键盘输入模块。中央处理模块选用8086CPU,8255处理芯片以及复位电路和时钟电路。输出显示模块主要由单色点阵液晶屏来实现。矩阵键盘输入
10、模块主要由5*6的矩阵电路来实现。3.1硬件设计思路此次设计的课题分为硬件和软件两部分。硬件系统部分包括三个模块:中央处理模块、显示模块、键盘输入模块。中央处理模块选用8086CPU,8255处理芯片以及复位电路和时钟电路。显示模块主要由单色点阵液晶屏来实现。矩阵键盘输入模块主要由5*6的矩阵电路来实现。3.1.1中央处理模块 中央处理模块选用8086CPU组成,电路包括:8255处理芯片、复位电路、时钟振荡电路。8086cpu需要在复位电路和时钟振荡电路组成的最小系统下工作,时钟电路采用频率采用为12MHZ的晶振。复位电路采用电解电容与电阻串联,。用户可以通过切断电源进行手动复位,或者通过重
11、新下载新的程序进行复位。3.1.2显示模块的硬件部分介绍显示模块采用单色点阵液晶屏12864模块,该模块在点阵液晶屏基础上集成了控制器kS0108,用户只需设计好接口程序,就可让模块显示出各种字符和图像。12864 为一块128X64 点阵的LCD 显示模块,模块上的 LCM 采用COG 技术将控制(包括显存)、驱动器集成在LCM 的玻璃上,接口简单、操作方便;为方便用户的使用,在LCM 的基础上设计了12864 模块,将模块所必需的外围电容电阻集成到模块上,并引出多种形式的引线接口方便用户使用。12864 模块与各种MCU 均可进行方便简单的接口操作。LCD 的接口:图3.1 LCD引脚说明
12、图显示 RAM 区映射情况:对于 LCD 模块,应该了解清楚驱动控制IC 当中的显存与LCD 玻璃上的点的对应关系是非常重要的,这是编写LCD 的驱动程序的基础。12864 液晶显示模块的显示器(玻璃)上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的。驱动控制芯片的显示RAM区每个byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下 图3.2驱动控制芯片的显示RAM区12864 液晶显示模块的显示屏上的每一个点都对应有控制器片内的显示缓存RAM中的一个位,显示屏上64X128 个点分别对应着显示RAM的8 个Page,每一个Page有128 个byte的空间对应。因此可知显
13、示RAM区中的一个Page空间对应8 行的点,而该Page中的一个byte数据则对应一列(8 个点)。图6为显示RAM区与显示屏的点映射图:图3.3 显示RAM区与显示屏的点映射图3.1.3 矩阵键盘 要测试记忆的单词,就要有字母的输入接口,本接口设计为56矩阵键盘输入,接入CPU的P1口和P3口进行键盘扫描。最大程度地提高了CPU的IO口的利用率,设计共30个接键,包括了26个英文字母以及四个功能键:“确定”、“不认识”、“上一个”、“下一个”。矩阵键盘如图10,由30个轻触按键按照6行5列排列,连接到P1、P3端口。其扫描的原理是:先将行线所接的CPU的I/O口作为输出端,而列线所接的I/
14、O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。然后再将行线所接的CPU的I/O口作为输入端,而列线所接的I/O口则作为输出,以相同的方法读一次端口,程序中就可识别是这个坐标的按键按下了。图3.4 矩阵键盘原理图3.2系统构成 系统主要由8086CPU,8255A,点陈液晶屏还有矩阵型键盘输入组成。8255A点阵液晶屏矩阵型键盘输入8086CPU 以8086CPU为处理器,利用8255处理芯片的复位功能来实现对于单词的录入,读取。以12854点阵液晶屏为显示器件,
15、并使用56距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,,可储存10-20个英文单词,作为记忆测试用。 图3.5 系统构成图3.3芯片选择3.3.1 8086CPU内部结构及其各引脚图3.6 8086cpu引脚图8086cpu的内部结构8086 CPU从功能上划分成两部分:总线接口单元BIU(Bus Interface Unit)和执行单元EU(Execution Unit). EU的组成部分:16位通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI)、算术逻辑单元(ALU)、标志寄存器(FLAG)、操作控制器电路。BIU的组成部分:段寄存器组(CS,DS,SS,E
16、S)、指令指针(IP)、地址加法器、指令队列缓冲器、总线接口控制逻辑。8086cpu的工作方式 8086的最小/最大工作方式 Intel公司在设计8086CPU芯片时,规定了两种工作模式,即最小工作模式和最大工作模式。通过CPU的第33条引脚MN/ 来控制。 1.最小工作模式(MN/ =1):把8086CPU的33引脚接+5V时,系统处于最小工作模式。最小模式系统适用于单微处理器组成的小系统,系统中通常只有一个微处理器,所有的总线控制信号都直接由8086CPU产生,系统中的总线控制逻辑电路被减到最少。 2.最大工作模式(MN/ =0):当把8086的33引脚接地时,系统处于最大工作模式。此时,
17、系统中存在两个或两个以上的微处理器,其中有一个主处理器8086,其他处理器称为协处理器。3.3.2 8255A处理芯片图3.7 8255内部结构图8255的引脚图:图3.8 8255A引脚图8255的方式选择控制字:(1)方式选择控制字把A、B、C三个端口分为A、B两组来设定工作方式。A组包括端口A和端口C的上半部,B组包括端口B和端口C的下半部。(2) 端口A可工作于3种方式中的任何一种:端口B只能工作于方式0和方式1;而端口C除用作输入、输出口(方式0)外,通常用来配合端口A和端口B提供联络控制信号和状态信号。(3) 归在同一组的两个端口可分别作为输入端口或输出端口,不要求同为输入或输出。
18、图3.9 方式选择控制字8255端口C按位置位/复位控制字 (1) 端口C按位置位/复位控制字尽管是对端口C进行操作的,但此控制字必须写入控制口,而不写入端口C。 (2) 一个控制字只能完成端口C中某一位置的置1或置0,要对多位置1或置0,必须使用多个控制字。图3.10 C端口的方式控制字采用的方式控制字 使用8255的B口作为数据输入端,与开关相连接(即D1:1); 使用工作方式0(即D6 D5:0 0)。 综上:8255的方式控制字为:1000 0010(即82H)图3.11 时钟电路图图3.12复位电路图3.4电路原理图设计电路原理图设计使用集原理图设计、PCB设计、电路仿真功能为一体的
19、PROTUES软件。以该软件设计的电路原理图。图3.13单词记忆测试器电路原理图电路设计参数:(1) C1 C2 为20-30PF瓷片电容,与12M晶振组成时钟振荡电路;(2) 复位电路使用R1为10K电阻、C3为10uF电解电容;(3) 12864液晶模块与CPU P0口连接,因P0口为真正的三态门结构,因些作数据总线使用时要外接上拉电阻,可使用10K的排阻;(4) 按键如图的行相连,列相连的矩阵接法连入CPU的IO口;(5) 电路的供电为5V直流电源;(6)D1为输入错误的状态指示灯,加220欧限流电阻连到VCC,因为CPUIO的电 流灌入能力要强于电流输出能力,因此一般使IO为低电平时点
20、亮LED灯。3.5存储空间与I/O地址分配 本设计以8086为中心,通过译码器74LS138对各个芯片的工作进行地址分配,控制各个芯片在何种工作状态,当第一个单词输入后通过采集放到内存,显示在LED上,依次执行完所有请求,直到单词记忆测试完成。4 软件系统说明本课题设计总共分为硬件和软件两部分。软件部分主要是利用汇编语言来编写程序,整个程序代码设计分别将代码和数据存储在代码段、数据段以及附加段中。扫描单词、输入单词再将二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示。清显示屏,经复位电路到单词链表进入主程序的循环结构。以此反复以至于达到单词测试记忆的目的。4.1软件设计思路开始因本
21、系统为模块化设计,为方便软件编写和移植,程序设计采用汇编语言,程序流程图如下:CPU初始化8255A初始化显示屏初始化键盘扫描输入有按键命令令?NY执行按键命令显示上一个显示下一个确定键字符比较NN输入正确Y图4.1程序流程图显示正确4.1.1程序主模块4.1.1.1主程序的定义与录入主程序首先进行存储变量的定义: 存储各测试单词的长度,如果输入的单词长度与存储的不同,也为错误。为能动态地显示测试的单词,先将要测试的单词存在一个二维数组中,显示了该数组中的字符时,显示函数也会被调用 b6 db 1000h dup($)b9 db You do not know the following wo
22、rds , please remember them agian,0ah,0dh,$f1 db very good,congratulations to you,0ah,0dh,$4.1.1.2主程序的主循环主程序的主循环部分代码及注释如下: mov Words,cl ;保存单词数目 lea si,Buffer ;数据缓冲区地址 mov bx,bx.previous mov si.previous,bx ;把第一个节点的前一个节点地址指向最后一个节点 mov bx.Next,si ;把最后一个节点的下一个节点地址指向第一个节点,形成循环链表4.1.2单词录入模块键盘的输入是通过矩阵扫描的方法,
23、通过矩阵扫描可找到按键所在的某行某列,但要得到一个英文字母值,还得在返回的某行某列位置预先定义个字母值,因此5*6矩阵键盘的整个返回字母表可定义一个二维数组存储。该二维数组为行*列 10*5,即10行5列,10行表示有10个单词,实际根据存储ROM的大小,可以增加单词数;列数表示单词在存储器中占的字符数,以最长单词(5个字符)定义,不足5个字符的单词后补空格表示。输入单词:提示输入单词,输入最少5个、最多255个英文单词,每个单词不超过20个字符;若直接回车,则结束单词输入,进入单词测试;输足20个字符,自动进入下一个单词的输入;不足20个字符个字符,按回车键进入下一个单词的输入。单词录入模块
24、程序代码段:Input_Words Proc Near ;输入一组单词 xor cl,cl ;输入的单词数目初值 lea bx,Buffer ;数据缓冲区地址 mov di,bx Output Prompt_Str1 ;提示输入单词Input_Words: cmp cl,255 jz Termanate ;限定最多255个单词 mov bx.Recognise,No ;初始化识别标志 mov bx.previous,di ;前一个节点地址 mov bx.Next,Chrs+1 ;每个单词最多字符数 mov di,bx lea dx,bx.Next ;键盘输入缓冲区地址 mov ah,0ah ;
25、输入单词 int 21h mov si,dx inc si lodsb ;读入实际输入的字符个数,即单词长度 test al,al ;直接回车? jz Termanate ;是,结束单词输入 inc cl ;累计输入的单词数目 xor ah,ah add si,ax mov si,$ ;使之能用dos功能调用9号功能显示这个字符串(单词) inc si mov bx.Next,si ;下一个节点地址 mov bx,si call Output_CTLF ;输出一个回车、换行 jmp Input_Words ;输入下一个单词Termanate: cmp cl,10 jb Input_Words
26、;限定最少5个单词 mov Words,cl ;保存单词数目 lea si,Buffer ;数据缓冲区地址 mov bx,bx.previous mov si.previous,bx ;把第一个节点的前一个节点地址指向最后一个节点 mov bx.Next,si ;把最后一个节点的下一个节点地址指向第一个节点,形成循环链表 call Output_CTLF retInput_Words EndP图4.2单词录入模块4.1.3单词测试模块单词记忆测试:从输入的第一个单词开始测试。键入y(不分大小写)或n,回答是否认识,不需按回车键确认,其它按键无效。紧接着,没有提示,可按上移键或下移键循环测试。按
27、Esc键结束测试。然后计算单词识别率并显示输出。提示是否进行下一组单词的输入和测试,键入y(不分大小写)或n选择是否继续,不需按回车键确认,其它按键无效。单词测试程序代码段:Test_Words Proc Near call Output_CTLF call Output_CTLF lea dx,si.Next2 mov ah,9 int 21h call Output_CTLF Output Prompt_Str2 ;要求回答是否认识这个词汇,回答字母不分大小写Recognise: or si.Recognise,Yes call Yes_or_No jc Up_Down and si.Re
28、cognise,NoUp_Down: xor ah,ah int 16h cmp ah,KBEsc jnz $+3 ret cmp ah,KBUp jnz Next_KBDown mov si,si.previous jmp Test_WordsNext_KBDown: cmp ah,KBDown jnz Up_Down mov si,si.Next jmp Test_WordsTest_Words EndP图4.3单词测试模块图4.1.4矩阵键盘输入模块矩阵键盘采用56 列与行扫描法,P1口依次接键盘的每一行,而P3口依次接键盘的每一列,程序开始先令P1全为高电平,P3口全为低电平,这样一旦
29、矩阵键盘中有一个键按下时,就会在某一行中出现低电平,而某一列中出现高电平,程序先读P1口,以检测到有低电平来确定行。再使P1全为低电平,P3口全为高电平,再读P3口,以检测到低电平来确定列。这里还要考虑按键的机械抖动问题,因为按键的机械特性,可能在按下瞬间会有一组抖动的脉冲,一般程序中采用延时方法来去抖动。4.1.5 LCD12864显示模块LCD12864显示模块的程序作为显示部分的底层程序,用户可直接调用其函数来达到驱动和显示功能。清显示屏,将LCD上的显示字符清空。字符的显示,将输入的字符,单词显示在液晶显示屏上。进入主程序后,先对LCD12864屏进行初始化和清屏操作,然后在LCD12
30、864屏上显示单片机单词记忆测试器的静态的图文,需要动态刷新的字符则在主循环中进行。LCD12864的显示效果如下,此时系统进入单词输入测试就绪状态。图4.4单词测试就绪状态在系统进入单词输入测试就绪状态后,主程序即进入while(1)的主循环中,循环进行键盘扫描,并判断键盘输入值,再与待测试的单词进行比较,如果输入的字符和字符长度均与被测试的单词一致,则显示correct加1,即为加1分,并进入下一个单词的测试,测试完10个单词后,重新进入第1个单词的测试。4.1.6显示字模码的提取模块为了使LCD12864能够显示用户存储的中文汉字和英文单词,用户必须将要显示的汉字字模及英文字母字模码存入
31、存储器中,因LCD12864只能显示点阵图形,因此存储入单片机的字模码必须是通过点阵码转换而成,为了软换更方便,设计使用了字模转换软件实现英文码的取模。4.2源程序清单b6 db 1000h dup($)b9 db You do not know the following words , please remember them agian,0ah,0dh,$f1 db very good,congratulations to you,0ah,0dh,$call zi4;输出不认识的单词 mov ah,02h;回车换行mov dl,0dhint 21hmov ah,02hmov dl,0ah
32、int 21hcall zi2;将不认识的单词存到B6所指单元call zi2;将不认识的单词存到B6所指单元 m2:inc dilea si,b6;将不认识的单词放到B6所指单元111111111111111111111mov si,z;保留SI的地址zi4 procpush axpush bxpush cxpush dxpush sipush dilea dx,b9;输出不认识的单词mov ah,09hint 21hlea dx,b6mov ah,09hint 21hpop dipop sipop dxpop cxpop bxpop ax retzi4endpCode Segment As
33、sume CS:Code,DS:Code; ; 功能:显示指定地址(Str_Addr)的字符串; 入口:Str_Addr字符串地址(要求在数据段); 用法: Output Str_Addr 用法举例:Output PromptStr)Output MACRO Str_Addr push ax lea dx,Str_Addr mov ah,9 int 21h pop ax EndM; ; 功能:输出一个字符 ; 入口:dl=要显示的字符 Output_Chr proc Near push ax mov ah,02h int 21h pop ax ret Output_Chr endp ; ; 功
34、能:输出回车换行Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retOutput_CTLF endp ; ; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数 ; 出口:在当前光标位置显示转换后的ASCII码数字 Dec_ASCII Proc Near push dx push bx push di mov bx,10 lea di,Temp_Save6 mov BYTE ptr di,$
35、 dec di Divide: xor dx,dx div bx or dl,30h mov di,dl dec di test ax,0ffffh jnz Divide inc di push di pop dx mov ah,9 int 21h pop di pop bx pop dx ret Temp_Save db 7 dup(?)Dec_ASCII EndP; ; 功能:键盘输入一个字符,若输入的是y或n(不分大小写),则显示并返回; 入口:无; 出口:若输入的是y,进位标志置位;若输入的是n,进位标志复位。Yes_or_No proc Near push dx push axInp
36、ut_Chr: mov ah,7 ;不带回显的键盘输入 int 21h mov dl,al and al,0dfh cmp al,Y jnz $+5 stc jmp $+7 cmp al,N jnz Input_Chr clc mov ah,2 int 21h pop ax pop dx retYes_or_No Endp; Input_Words Proc Near ;输入一组单词 xor cl,cl ;输入的单词数目初值 lea bx,Buffer ;数据缓冲区地址 mov di,bx Output Prompt_Str1 ;提示输入单词Input_Words: cmp cl,255 jz
37、 Termanate ;限定最多255个单词 mov bx.Recognise,No ;初始化识别标志 mov bx.previous,di ;前一个节点地址 mov bx.Next,Chrs+1 ;每个单词最多字符数 mov di,bx lea dx,bx.Next ;键盘输入缓冲区地址 mov ah,0ah ;输入单词 int 21h mov si,dx inc si lodsb ;读入实际输入的字符个数,即单词长度 test al,al ;直接回车? jz Termanate ;是,结束单词输入 inc cl ;累计输入的单词数目 xor ah,ah add si,ax mov si,$
38、 ;使之能用dos功能调用9号功能显示这个字符串(单词) inc si mov bx.Next,si ;下一个节点地址 mov bx,si call Output_CTLF ;输出一个回车、换行 jmp Input_Words ;输入下一个单词Termanate: cmp cl,5 jb Input_Words ;限定最少5个单词 mov Words,cl ;保存单词数目 lea si,Buffer ;数据缓冲区地址 mov bx,bx.previous mov si.previous,bx ;把第一个节点的前一个节点地址指向最后一个节点 mov bx.Next,si ;把最后一个节点的下一个
39、节点地址指向第一个节点,形成循环链表 call Output_CTLF retInput_Words EndP; Test_Words Proc Near call Output_CTLF call Output_CTLF lea dx,si.Next2 mov ah,9 int 21h call Output_CTLF Output Prompt_Str2 ;要求回答是否认识这个词汇,回答字母不分大小写Recognise: or si.Recognise,Yes call Yes_or_No jc Up_Down and si.Recognise,NoUp_Down: xor ah,ah i
40、nt 16h cmp ah,KBEsc jnz $+3 ret cmp ah,KBUp jnz Next_KBDown mov si,si.previous jmp Test_WordsNext_KBDown: cmp ah,KBDown jnz Up_Down mov si,si.Next jmp Test_WordsTest_Words EndP; Statics_Words Proc Near ;计算单词识别率 mov cl,Words ;取单词数 xor ch,ch lea si,Buffer ;数据缓冲区地址 mov bx,si.Next xor ax,axL0: add al,si
41、.Recognise ;累加识别率 mov si,si.Next loop L0 mov bl,100 mul bl div Words Output Prompt_Str3 ;提示显示单词识别率 call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示 mov dl,% call Output_Chr ;显示输出一个字符 retStatics_Words EndP; Chrs equ 20 ;单词最多字符数Yes equ 1 ;认识No equ 0 ;不认识KBEsc equ 1 ;Esc键扫描码KBUp equ 48H ;键扫描码KBDown equ 50H ;键扫描码; ; 定义结构类型Words_Table Struc ;单词链表Recognise db ? ;识别标志(是否认识这个单词)previous dw ? ;前一个节点地址Next dw ? ;下一个节点地址Words_Table EndS;