电子时钟的设计与实现_第1页
电子时钟的设计与实现_第2页
电子时钟的设计与实现_第3页
电子时钟的设计与实现_第4页
电子时钟的设计与实现_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

PAGEword文档可自由复制编辑武汉理工大学《微机原理与接口技术》课程设计说明书学号:课程设计题目电子时钟的设计与实现学院自动化学院专业电气工程及其自动化班级姓名指导教师2014年1月9日

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:电子时钟的设计与实现初始条件:掌握8086汇编语言程序设计方法,设计一个电子时钟,实现分、秒、时的显示与刷新功能。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.定义显示界面。2.调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。3.将存在系统内存区的时间数用数字式或指针式钟表的形式显示出来。4.获取键盘的按键值,判断键值并退出系统。5.撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。时间安排: 12月26日12月28日查阅资料及方案设计1月29日1月2日 编程1月3日1月7日 调试程序1月8日1月9日 撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 11设计任务及要求 21.1设计题目 21.2设计要求 21.3设计目的 22设计方案论述 32.1设计方案概括 32.2设计方案具体说明 33软件设计说明 43.1理论知识介绍 43.2设计思路介绍 73.3设计流程 73.4程序设计说明 124调试结果及分析 224.1程序初始运行状态 224.2日期显示运行结果 224.3计时功能运行结果 235收获与体会 25参考文献 26附录:设计源程序 27本科生课程设计成绩评定表 36word文档可自由复制编辑摘要本设计采用16位微型处理器8086CPU以及86系列微型计算机的指令系统利用汇编语言编写,设计一个界面实现系统日期及时间显示功能,软件设计平台为MasmforWindows集成实验环境。在本设计中,设计显示界面并通过DOS中断调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区。将存在系统内存区的时间数用数字式钟表的形式显示出来。通过读取键盘输入的相关内容,如:输入D,则设计程序代码依次读取系统日期年、月、日,并转换成ASCII码调用中断予以显示;若在键盘输入H,则启动秒表功能;输入Q,判断键值后退出系统;若不是相关字符,则不会有任何响应。关键词:系统时钟8086CPU汇编语言

电子时钟的设计与实现1设计任务及要求1.1设计题目掌握8086汇编语言程序设计方法,设计一个电子时钟,实现分、秒、时的显示与刷新功能。1.2设计要求(1)定义显示界面;(2)调用系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入内存区;(3)将存在系统内存区的时间数用显示字符串的形式显示出来;(4)为时钟加入附加功能,包括日期显示、计时功能;(5)获取键盘的按键值,判断键值并退出系;。(6)撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。1.3设计目的(1)掌握8086CPU微机系统的存储子系统设计;(2)掌握8086CPU微机系统的中断控制子系统的设计;(3)掌握8086CPU微机系统的I/O系统的设计;(4)掌握8086CPU微机系统的初始化汇编编程和具体项目功能的软件汇编语言代码编写。

2设计方案论述2.1设计方案概括在此次电子时钟的设计中,主要功能是显示系统时间,通过DOS中断调用进行系统时间的提取,然后进行输出至屏幕。附加功能共包括两种,第一种功能为显示系统的日期,也是通过DOS中断提取系统日期输出至屏幕;第二种功能为作为计时器使用,判断一定时间段内的具体时间。两个功能通过键盘按键进入、退出,整个电子时钟系统也可通过键盘按键退出。2.2设计方案具体说明2.2.1显示系统时间方案说明时间显示的重点分为三部分,第一部分是如何调用系统时间,此次电子时钟的设计通过AH=2CH;INT21H的DOS中断调用进行系统时间的提取。提取的时间为二进制的存储模式,第二部分的重点为将二进制数转换成为ASCII码。第三部分即为将转换的时间的ASCII码输出至屏幕,调用AH=09H;INT21H中断,将存储的时间作为字符输出。2.2.2显示系统日期方案说明首先通过判断是否有按键“D”输入,若有则调用日期显示功能,日期显示同时间显示基本相同,只是提取系统日期的指令与调用时间不同,为AH=2AH;INT21H。在进行日期显示的功能中,若有按键“L”则退出此功能。2.2.3计时功能方案说明首先通过判断是否有按键“H”输入,若有则调用计时功能。进入计时功能后,按键“S”计时开始,按键“P”计时暂停,按键“G”计时继续,按键“T”计时停止,按键“C”计时器清零。

3软件设计说明3.1理论知识介绍3.1.1DOS中断与BIOS中断的功能及调用(1)DOS中断类型如表3-1所示。表3-1DOS中断类型中断号中断名称中断号中断名称20程序终止27结束并驻留内存21功能调用28键盘忙循环22终止地址29快速写字符23Ctrl_C中断向量2A网络接口24严重错误向量2E执行命令25绝对磁盘读2F多路转接接口26绝对磁盘写30-3F保留给DOS(2)BIOS中断类型如表3-2所示。表3-2BIOS中断类型中断号中断名称中断号中断名称10显示器I/O16键盘I/O11取设备信息17打印机I/O12取内存容量18ROMBASIC13磁盘I/O19引导装入程序14RS-232串行口I/O1A时钟15磁带I/O40软盘BIOSDOS功能与BIOS功能都通过软件中断调用。在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此而外,通常还需在CPU寄存器中提供专门的调用参数。一般地说,调用DOS或BIOS功能时,有以下几个基本步骤:1)将调用参数装入指定的寄存器中;2)如需功能号,把它装入AH;3)如需子功能号,把它装入AL;4)按中断号调用DOS或BIOS中断;5)检查返回参数是否正确。本例中需要的BIOS中断如表3所示。表3本课程设计所需BIOS中断类型INTAH功能入口参数出口参数1009H表示在当前的光标处按指令属性显示字符AH=09HAL=字符BH=显示页码BL=属性CX=重复输出字符的次数无1002H用文本坐标下设置光标位置AH=02HBH=显示页码DH=行(Y坐标)DL=列(X坐标)无2101H从键盘输入一个字符无AL=ASCII2102H在屏幕上显示一个字符DL=ASCII无1601H读取键盘状态,即读入输入字符AH=01H—检查普通键盘ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=按键的ASCII码(字符键)或者0(其他键)1600H从键盘读入字符AH=00H—强制读普通键盘AH=键盘的扫描码AL=按键的ASCII码(字符键)或者0(其他键)1008H读光标处的字符及其属性AH=08HBH=显示页码AH=属性AL=字符2106H1号2号功能的组合DL=0FFH时为1号功能;DL寄存器放入字符的ASCII值时就是2号功能无或AL=ASCII1A02H读取时间AH=02HCH=BCD码格式的小时;CL=BCD码格式的分钟;DH=BCD码格式的秒;DL=00H——标准时间,否则,夏令时;CF=0——时钟在走,否则,时钟停止3.1.2子程序的设计子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它。过程定义伪操作用在过程(子程序)的前后,使整个过程形成清晰的、具有特定功能的代码块。其格式为:procedurenamePROCAttribute…procedurenameENDP其中过程名为标识符,它又是子程序入口的符号地址。它的写法和标号的写法相同。属性(attribute)是指类型属性,它可以是NEAR或FAR。段内调用使用NEAR属性,段间调用使用FAR属性。为了使用户的工作更加方便,80x86的汇编程序用PROC伪操作的类型属性来确定CALL和RET指令的属性。也就是说,如果所定义的过程是FAR属性的,那么对它的调用和返回一定都是FAR属性的;如果所定义的过程是NEAR属性的,那么对它的调用和返回也一定是NEAR属性的。这样,用户只需在定义过程时考虑它的属性,而CALL和RET的属性可以由汇编程序来确定。用户对过程属性的确定原则很简单,即:(1)如调用程序和过程在同一个代码段中,则使用NEAR属性;(2)如调用程序和过程不在同一个代码段中,则使用FAR属性。3.1.3中断概述CPU在执行某一程序的过程中,出现了内部或外部某些事件的请求,CPU暂时停止当前程序的正常执行,转去执行请求事件的处理工作,CPU在事件处理结束后又继续原来的程序,这个过程称作中断。中断程序的入口地址称作中断向量。8086中断系统最多可以支持256个中断源,系统将这些中断向量按照中断类型码的顺序依次存放在内存RAM的最低地址区的1024个内存单元中,这就构成了中断向量表。中断向量表的逻辑地址范围为0000H:0000H-0000H:03FF。另外,中断向量在中断向量表中的位置就是中断向量地址,它与中断类型码之间的关系可以表示如下:中断向量地址=0000H:中断类型码*4CPU在响应中断后,根据中断源提供的中断类型码,首先计算出中断向量地址,然后根据中断向量地址在表中查找到相应的中断服务程序的入口地址。本例中即利用了键盘中断来实现相应的功能。3.2设计思路介绍首先在数据段开辟一显示缓冲区,用来存储系统时间。调用DOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。调用DOS字符串显示功能将时间显示出来。并调用屏幕I/O中断,定位光标的开始位置,结合着将时间显示在我们预先定义好的位置上。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。时间显示的刷新要配合延时程序进行,为了得到良好的显示效果,延时程序要尽量接近1秒,但又不能超过一秒,所以本程序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再提取系统时间,然后显示,由此循环下去。程序加入附加功能,根据不同的按键选择不同的功能进行实现,D为显示系统日期,W为整点报时,H为计时功能。各个功能的推出均为L按键。选择的某个功能推出后才可以重新选择功能。程序的最后还设计一了个按“Q”键就退出的功能。所有的按键都采取了判断键值ASCII码确定输入字符的方法确定按键值。为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。3.3设计流程在此次的设计中根据设想功能的实现,在主流程下,共有两个分支功能,故其流程图为一个主流程图,两个附加功能的子流程图。3.3.1主流程图及说明在主流程图中可以了解到,进入程序后首先清屏,设置屏幕的显示,使得界面整体布局安排以及功能的提示信息出现在屏幕上。然后调用系统时间,将时间显示到设定好的位置上。接着是进行键盘状态的读取,判断有无按键按下,如果没有,重新调用系统时间并显示,如果有按键按下,判断按键字符,若为“D”,执行读取日期子程序;若为“H”,执行计时器子程序;若为“Q”,则退出程序;如果均不为上述字符,则返回调用系统时间。开始判断按键是否为H判断按键是否为开始判断按键是否为H判断按键是否为D判断是否有键盘按键输入读取按键字符调用系统时间输出至屏幕显示设置屏幕显示进入计时器子程序进入显示日期子程序是是否否否是图3-1系统主程序流程图判断按键是否为Q结束是否3.3.2显示日期子流程图及说明日期显示子程序流程图如图3-2所示。开始开始提取系统日期将年份数转为ASCII码并存入DATEDIS中将日期数转为ASCII码并存入DATEDIS中将分月份转为ASCII码并存入DATEDIS中显示系统日期返回图3-2日期显示子程序流程图根据图3-2所示的子流程图可以分到系统日期显示的整体过程。在经过功能选择进入日期显示后,首先提取电脑内部的系统日期,提取到的系统日期为二进制码,首先将年份的二进制码转换为ASCII码,存入数据段的缓冲区,然后将月份的二进制码转换为ASCII码,存入数据段的缓冲区,接着是将日期的二进制码转换为ASCII码,存入数据段的缓冲区,于是缓冲区中就包含了系统日期的ASCII码,调用输出函数,将系统日期输出到系统的指定位置。3.3.3计时器的流程图及说明计时器子程序流程图如图3-3所示。开始开始读取键盘值读取键盘值读取键盘值判断有无按键按下按键为S按键为T按键为G按键为P按键为L按键为C开始计时停止计时判断有无按键按下判断有无按键按下退出子程序计数器清零是否是否否否是是是否否是是否是否否是图3-3计时器子程序流程图根据计时器子程序的流程图可知,进入计时器程序后,首先是等待计时开始,扫面键盘是否有按键按下,若按下“L”则推出此计时程序,若按下的为“S”则计时开始,在计时的过程中进行按键扫描,判断有无按键的输入,如果没有则保持计时,如果判断按键为“P”,则暂停计时,此时不断扫描键盘,若发现按键“G”,则继续计时,同时继续扫描键盘状态,若发现按键“T”按下,则停止计时,同时扫描按键,如果获取到“C”按下,则对计数器清零,此时返回子程序开始端,重新扫描键盘,准备新一轮的计时。3.3.4系统时间显示子程序系统时间显示子程序流程图如图3-4所示。开始开始提取系统时间将小时数转为ASCII码并存入TIMEDIS中将秒数转为ASCII码并存入TIMEDIS中将分钟转为ASCII码并存入TIMEDIS中显示系统时间返回图3-4时间显示子程序流程图3.4程序设计说明3.4.1清屏程序介绍CLEAR_SCREENMACROOP1,OP2,OP3,OP4;清屏 PUSHAX;入栈保护现场PUSHBXPUSHCXPUSHDX MOVAH,06H;向上滚屏 MOVAL,00H;全屏幕为空白 MOVBH,79H;空白区域缺省属性 MOVCH,OP1;左上角行号 MOVCL,OP2;左上角列号 MOVDH,OP3;右下角行号 MOVDL,OP4;右下角列号 INT10H;BIOS对屏幕及显示器中断调用 POPDX;出栈显示数据POPCXPOPBXPOPAX ENDM此为宏定义写出的清屏指令,首先将寄存器的数据压入堆栈进行保护,然后调用INT10中断设定屏幕显示。其中AH设置滚屏方式06为向上滚屏,AL=0为设置窗口的清屏,而CH、CL、DH、DL为设置窗口的大小,根据设定的窗口大小确定清屏的范围。清屏结束后,将压入堆栈的寄存器的数据弹出,使清屏命令不会影响寄存器的数值。3.4.2光标定位程序介绍CURSOR_POSITIONMACROROW,CLM;设置光标位置宏定义PUSHAX;入栈保护现场PUSHBXPUSHCXPUSHDX MOVAH,2MOVBH,0;光标页号MOVDH,ROW;光标行号MOVDL,CLM;光标列号INT10H;BIOS对屏幕及显示器中断调用 MOVAH,1;置光标类型,不显示光标 MOVCH,20H INT10HPOPDX;出栈显示数据POPCXPOPBXPOPAX ENDM此宏定义为光标位置的设定,首先是寄存器数据压入堆栈保护。光标设定需要调用INT10H,给AH赋值02H,执行设置光标位置命令,然后由DH、DL的数值确定光标的行号和列号。由于根据设计需求,在此还需设置光标属性为隐藏,此功能同样为调用INT10H,使得AH赋值为01H,根据CH的值确定光标的属性。最后为寄存器数据出栈。3.4.3多字符显示程序介绍SHOWMACROB ;宏定义显示寄存器中内容 LEADX,B ;将b的首地址给DX MOVAH,9 ;显示器I/O,多字符输出 INT21H ;DOS中断调用 ENDM此处宏定义为多字符的屏幕显示,首先是将需要显示的字符的存储区的便宜地址给DX,然后通过功能调用AH=09H;INT21H,便可将多个字符输出至屏幕。3.4.4读取键盘状态程序介绍SCANKEYMACRO PUSHAX MOVAH,01H INT16H POPAX ENDM此处宏定义为读取键盘状态,通过功能调用AH=01H;INT21H即可实现,如有按键按下,则ZF=1,若无,则ZF=0。3.4.5读取键盘值程序介绍INPKEYMACRO PUSHAX MOVAH,00H INT16H MOVBL,AL POPAX ENDM此处宏定义为读取键盘函数值,通过功能调用AH=00H;INT21H实现,此命令会将键盘按键的ASCII码值输入至AL寄存器中。3.4.6调用系统时间显示程序介绍TIMEDISPLAYPROCNEAR;定义时间显示子程序 MOVAH,2CH;取当前系统时间 INT21H MOVBX,10 LEADI,TIMEDIS;TIMEDIS的首地址给DI MOVAL,CH;小时传递给AL XORAH,AH;AH清零 DIVBL;小时的十位为AH,个位为AL ADDAX,3030H;转为ASCII码 MOV[DI+1],AX;将小时存入[DI+1] MOVAL,CL;将分钟传递给AL XORAH,AH;AH清零 DIVBL;分钟的高位为AH,低位为AL ADDAX,3030H;转为ASCII码 MOV[DI+6],AX;将分钟存入[DI+6] MOVAL,DH;将秒传递给AL XORAH,AH;AH清零 DIVBL;秒的高位存入AH,低位存入AL ADDAX,3030H;转换ASCII码 MOV[DI+11],AX;将秒存入[DI+11] CURSOR_POSITION8,21H SHOWTIMEDIS;显示TIMEDIS中内容系统时间 RET;时间调用返回 TIMEDISPLAYENDP此处子程序为调用系统时间,然后到屏幕输出,系统时间的调用采用DOS功能调用,AH=2CH;INT21H,调用后的系统时间,将小时的二进制码保存在CH寄存器中,分钟的二进制码存入CL寄存器中,秒数的二进制码存入DH寄存器中,然后DL寄存器中的值为1/100秒,根据设计要求只需要保存CH、CL、DH中的内容,并将其除以10,先转换为BCD码,再加上3030H,转换为ASCII码,存入设置的数据缓冲区。然后定义光标位置,调用输出命令,将其输出至屏幕。3.4.7调用系统日期显示程序介绍DATEDISPLAYPROCNEAR;定义日期显示子程序 MOVAH,2AH;取当前系统日期 INT21H MOVAX,CX;送年份入AX(二进制数) MOVBX,10;(BX)=10 LEASI,DATEDIS+14;使SI指向年的最后一位 MOVCX,4;(CX)=4 PUSHDX;保存月日TAB:XORDX,DX;DX清零 DIVBX;(DX,AX)/BX,商送AX,余数送DX() ADDDL,30H;余数与30H相加变为字符的ASCII码 MOV[SI],DL;余数送入SI所指向的字节区 DECSI;SI减一 LOOPTAB ;循环(将4个8字节的年份存入SI) POPDX;DX还原 MOVAL,DL;日送AL XORAH,AH;AH清零 DIVBL;AX/BL,商送AH,余数送AL ADDAX,3030H;转变为数字字符的ASCII码 SUBSI,4;使SI指向日的第一位 MOV[SI],AX;(AX)送SI所指向的字节区(将4位表示变为8位表示) MOVAL,DH;月送AL XORAH,AH;AH清零 DIVBL;AX/BL,商送AH,余数送AL ADDAX,3030H;转变为数字字符的ASCII码 SUBSI,5;使SI指向月的第一位 MOV[SI],AX;(AX)送SI所指向的字节区 CURSOR_POSITION10H,28H SHOWDATEDIS;显示日期 CURSOR_POSITION10H,10H SHOWmess3 RET;调用后返回DATEDISPLAYENDP此处子程序为调用系统日期,然后到屏幕输出,系统时间的调用采用DOS功能调用,AH=2AH;INT21H,调用后的系统日期,将年份的二进制码保存在CX寄存器中,月份的二进制码存入DH寄存器中,日的二进制码存入DL寄存器中。其流程跟时间显示基本一致,将提取的二进制码转换为ASCII码,存入缓冲区,定义输出位置输出。3.4.8计时器程序介绍CHRONOGRAPHPROCNEAR CURSOR_POSITION10H,14H SHOWmess4 CURSOR_POSITION10H,28H SHOWmess5CHPH: CALLTIMEDISPLAYSCANKEY CALLDELAY_1 JECLEAR INPKEY CMPBL,53H JESTAT JMPCLEARSTAT: CALLTIMEDISPLAY CALLTIME SCANKEY JESTAT INPKEY CMPBL,50H JEPAUSE CMPBL,54H JEPAUSE JMPSTATPAUSE: CALLTIMEDISPLAY SCANKEY JEPAUSE INPKEY CMPBL,47H JESTAT CMPBL,43H JECLEAR CALLTIMEDISPLAY JMPPAUSECLEAR:CALLTIMEDISPLAY MOVCOUNT1,0 MOVCOUNT2,0 MOVCOUNT3,0 RET CHRONOGRAPHENDP计时器子程序首先显示提示界面,通过按键的判断执行不同的功能选择,主要通过提取键盘值,然后进行程序的跳转完成。3.4.9将二进制数转换为ASCII码程序介绍CHANGEPROCNEARMOVCX,10D;显示十位CALLDECDIVMOVCX,1;显示个位CALLDECDIVRETCHANGEENDPDECDIVPROCNEAR;转化成字符显示MOVDX,0DIVCXMOVBX,0ADDAL,30H;转换成ASCIIMOVAH,0EHINT10H;显示一个字符MOVAX,DXRETDECDIVENDP以上程序完成的为进制转换,首先将二进制数除以10将商和余数分别保存,转换为BCD码,分十位、个位分别操作,分别加上30H调整为ASCII码。3.4.10计时程序介绍TIME PROC PUSHAX PUSHDXMAIN: MOVAH,2 INT1AH CMPDH,SECOND JNEGET JMPNEXTGET: MOVSECOND,DH INCCOUNT1 MOVAX,COUNT1 CMPAX,32H JNENEXT4 MOVCOUNT1,0 INCCOUNT2 MOVAX,COUNT2 CMPAX,32H JNENEXT4 MOVCOUNT2,0 INCCOUNT3NEXT4: CURSOR_POSITION10H,28H MOVAX,COUNT3 CALLCHANGE MOVAH,2 MOVDL,':' INT21H CURSOR_POSITION10H,2BH MOVAX,COUNT2 CALLCHANGE MOVAH,2 MOVDL,':' INT21H CURSOR_POSITION10H,2EH MOVAX,COUNT1 CALLCHANGENEXT: POPDX POPAX RETTIME ENDP此程序为计时器的主体程序,通过功能调用AH=2;INT1AH,得到系统时间,并且得到系统现在的秒数,保存至DH寄存器中,首先将SECOND赋值为0,然后和提取的秒对比,若相等,则输出此时的计时的小时、分钟、秒,若不想等,秒加一,且将DH的值赋给SECOND,在此输出,同时考虑分钟的最大值,若到达60,则将分钟值加一,秒数清零,输出,若分钟数达到60,则将小时数加一,分钟数清零输出。

4调试结果及分析4.1程序初始运行状态程序运行之后,屏幕出现程序初始界面如图4-1所示。图4-1程序初始界面在此界面下,如果有按键“Q”(必须是大写的)按下,则会退出此执行界面。根据界面显示的不同提示语句,可根据不同的输入实现不同的功能。4.2日期显示运行结果在程序初始界面的前提下,按下键盘“D”,则进入日期显示功能,其日期显示界面如图4-2所示。在此界面下,会输出系统的当前日期,只有当按下键盘“L”后,退出此功能,且回到程序初始界面。图4-2日期显示界面4.3计时功能运行结果在程序初始界面的前提下,按下键盘“H”,则进入计时功能,计时功能界面如图4-3所示。图4-3计时功能界面此界面显示程序进入计时器功能,程序准备好计时,此事按下键盘“S”,计时开始,计时时间开始运行,得到的计时功能开始后界面如图4-4所示。图4-4计时功能开始后界面在此界面中,显示已经经过的时间,在此状态下,按下键盘“P”,计时暂停,界面上的计时器出的时间显示暂停,不再变化。此时若按下“G”,计时继续开始,在原来时间的基础上继续变化。若有键盘“T”按下,则计时停止。如果按下键盘“C”,计时器清零,界面计时器处的显示重新为00:00:00,此事等待重新计时按键“S”,或退出按键“L”使屏幕恢复到初始运行状态。

5收获与体会微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。讨论某一部分原理时又要涉及到其它部分的工作原理。这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。在此次的课程设计的上机与理论学习,带给了我更深的感受。此次课程设计让我了解到编写程序的复杂性,必须保持编写程序时的细心认真。为了编写程序方便,以及程序调试的方便,将程序进行分块书写,便于程序的阅读、改正,以及更多功能的增添。同时在程序的运行、调试过程也遇到了比较繁琐的难题。第一是光标的闪烁问题,由于要不断的调用系统时间,不断的光标定位,然后输出到屏幕显示。由于时间比较快,所以不断闪烁。最后选择解决方案为设置光标的属性,将光标设置为隐藏不显示。第二是功能选择问题,由于跳转的选项较多,使得各功能的进入退出出现问题,经过不断的调试,整理思路,调整程序顺序,以达到最后的功能。第三就是计时器功能的实现,需要不断的需系统时间进行对比,系统时间变化一秒,计时器数值增加一秒,同时将计时器存储的数值分为小时、分钟、秒存储,且需要将其转换为ASCII码进行输出。在解决程序设计出现的问题的同时我也体会到在二进制转化成ASCII码的过程中,二进制数首先转化为双四位的BCD码,再将高四位低四位分别相加30H,从而转化为ASCII码,此时要对照书本ASCII码表,了解电脑CPU如何将ASCII码的信息转换成显示字符。再有要多多学习经典程序书写思路、方式,且熟练掌握,将其作为自己的子程序运用到自己的设计当中去。此次课程设计,让我们将理论知识于实际相结合,自己深入设计其中,感到了自己的进步,也发现了自己的不足。明确自己需要在以后不断学习,不断进取,同时也感谢老师在此次课程设计中的指导帮助。

参考文献姚燕南,薛均义主编.微型计算机原理与接口技术.高等教育出版社,2004李群芳,张士军,黄建编著.单片机微型计算机与接口技术.电子工业出版社,2005薛均义主编.微型计算机原理及应用(Intel80X86系列).机械工业出版,2002黄明,梁旭,常征著.汇编语言程序设计习题详解.北京:机械工业出版社,2004王永山,杨宏五,杨婵娟著.微型计算机原理与应用(第二版).西安:西安电子科技大学出版社,2006温冬蝉,沈美明.IBMPC汇编语言程序设计(第2版).北京:清华大学出版社,2002姚燕南,薛均义主编.微型计算机原理与接口技术.北京:高等教育出版社,2004

附录:设计源程序;name:ELECTRONICCLOCK;designbybaixiaomeng,dianqi1107;*****************************清屏*******************************CLEAR_SCREENMACROOP1,OP2,OP3,OP4;清屏 PUSHAX;入栈保护现场PUSHBXPUSHCXPUSHDX MOVAH,06H;向上滚屏 MOVAL,00H;全屏幕为空白 MOVBH,79H;空白区域缺省属性 MOVCH,OP1;左上角行号 MOVCL,OP2;左上角列号 MOVDH,OP3;右下角行号 MOVDL,OP4;右下角列号 INT10H;BIOS对屏幕及显示器中断调用 POPDX;出栈显示数据POPCXPOPBXPOPAX ENDM;******************************光标定位******************************* CURSOR_POSITIONMACROROW,CLM;设置光标位置宏定义PUSHAX;入栈保护现场PUSHBXPUSHCXPUSHDX MOVAH,2MOVBH,0;光标页号MOVDH,ROW;光标行号MOVDL,CLM;光标列号INT10H;BIOS对屏幕及显示器中断调用 MOVAH,1;置光标类型,不显示光标 MOVCH,20H INT10HPOPDX;出栈显示数据POPCXPOPBXPOPAX ENDM;**********************************字符显示***************************** SHOWMACROB ;宏定义显示寄存器中内容 LEADX,B ;将b的首地址给DX MOVAH,9 ;显示器I/O,多字符输出 INT21H ;DOS中断调用 ENDM ;**************************从键盘输入一个字符************************INPUTMACROPUSHAXMOVAH,1 INT21H MOVBL,AL POPAX ENDM;********************************读取键盘状态***************************SCANKEYMACRO PUSHAX MOVAH,01H INT16H POPAX ENDM ;**********************************读取键盘值***************************INPKEYMACRO PUSHAX MOVAH,00H INT16H MOVBL,AL POPAX ENDM;*******************************定义数据段******************************DATASEGMENTmess1db'Welcometomybeautiful!','$',0ah,0dhmess2db'',0ah,0dh db'+~~~(*^__^*)~~~+',0ah,0dh db'++',0ah,0dh db'+ELECTRONICCLOCK+',0ah,0dh db'+baixiaomeng+',0ah,0dh db'+Thetimeisnow:+',0ah,0dhdb'++',0ah,0dh db'++',0ah,0dh db'+AdditionalFunction:+',0ah,0dh db'+1.ShowDateTimeOpen:DClose:L+',0ah,0dh db'+2.ChronographOpen:HClose:L+',0ah,0dh db'+Start:SPause:PContinue:GStop:TClear:C+',0ah,0dh db'++',0ah,0dh db'++',0ah,0dh db'++',0ah,0dh db'+PressQbuttontoquit+',0ah,0dh db'+****************************************************+','$' mess3db'TheDateTimeisnow:',0ah,0dh,'$' mess4db'ThePastTimeis:',0ah,0dh,'$' mess5db'00:00:00',0ah,0dh,'$'mess6db'ZhengDianBaoShi',0ah,0dh,'$' D_BUF1db20DUP(?);在数据段开辟一时间显示缓冲区 D_BUF2db20DUP(?)SECONDDB0 COUNT1DW0 ;秒COUNT2DW0 ;分COUNT3DW0 ;时 DATEDISDB'00-00-0000',0AH,'$';显示DATE TIMEDISDB'00',3AH,'00',3AH,'00',0AH,'$' DATAENDS;*********************************定义堆栈段****************************STACKSEGMENTdb100dup(?)STACKENDS;***********************************定义指令段**************************CODESEGMENTASSUMEcs:code,ss:stack,ds:dataSTART: MOVAH,0;设置显示模式 MOVAL,3 ;文字分辨率80*25颜色16 INT10H;BIOS对屏幕及显示器中断调用 CLEAR_SCREEN00H,00H,50H,50H;调用宏定义设置区域 MOVAX,DATA;数据段首地址给AX MOVDS,AX;数据段首地址给DS MOVAX,STACK;堆栈段首地址给AX MOVSS,AX;堆栈段首地址给SS CURSOR_POSITION1,1 SHOWmess1 CURSOR_POSITION2,1 SHOWmess2LOOP1: CALLTIMEDISPLAY SCANKEY JELOOP1 INPKEY CMPBL,57H JEZDTM CMPBL,44H JEDATE CMPBL,48H JECHRO CMPBL,51H JEQUIT JMPLOOP1DATE:CALLDATEDISPLAYCALLTIMEDISPLAYSCANKEY JEDATE INPKEY CMPBL,4CH JNEDATE CLEAR_SCREEN0FH,0FH,10H,37H CURSOR_POSITION0EH,15JMPLOOP1CHRO: CALLCHRONOGRAPHCALLTIMEDISPLAYSCANKEY JECHRO INPKEY CMPBL,4CH JNECHRO CLEAR_SCREEN0FH,0FH,10H,37H CURSOR_POSITION0EH,15JMPLOOP1`ZDTM:CURSOR_POSITION10H,1DHSHOWmess6 CALLTIMEDISPLAYSCANKEY JEZDTM INPKEY CMPBL,4CH JNEZDTM CLEAR_SCREEN0FH,0FH,10H,37HJMPLOOP1QUIT:CURSOR_POSITION14H,1HMOVAH,4CHINT21H ;***********************秒表子程序***************************CHRONOGRAPHPROCNEAR CURSOR_POSITION10H,14H SHOWmess4 CURSOR_POSITION10H,28H SHOWmess5CHPH: CALLTIMEDISPLAYSCANKEY CALLDELAY_1 JECLEAR INPKEY CMPBL,53H JESTAT JMPCLEARSTAT: CALLTIMEDISPLAY CALLTIME SCANKEY JESTAT INPKEY CMPBL,50H JEPAUSE CMPBL,54H JEPAUSE JMPSTATPAUSE: CALLTIMEDISPLAY SCANKEY JEPAUSE INPKEY CMPBL,47H JESTAT CMPBL,43H JECLEAR CALLTIMEDISPLAY JMPPAUSECLEAR:CALLTIMEDISPLAY MOVCOUNT1,0 MOVCOUNT2,0 MOVCOUNT3,0 RET CHRONOGRAPHENDP ;***********************时间显示子程序***********************TIMEDISPLAYPROCNEAR;定义时间显示子程序 MOVAH,2CH;取当前系统时间 INT21H MOVBX,10 LEADI,TIMEDIS;TIMEDIS的首地址给DI MOVAL,CH;小时传递给AL XORAH,AH;AH清零 DIVBL;小时的十位为AH,个位为AL ADDAX,3030H;转为ASCII码 MOV[DI+1],AX;将小时存入[DI+1] MOVAL,CL;将分钟传递给AL XORAH,AH;AH清零 DIVBL;分钟的高位为AH,低位为AL ADDAX,3030H;转为ASCII码 MOV[DI+6],AX;将分钟存入[DI+6] MOVAL,DH;将秒传递给AL XORAH,AH;AH清零 DIVBL;秒的高位存入AH,低位存入AL ADDAX,3030H;转换ASCII码 MOV[DI+11],AX;将秒存入[DI+11] CURSOR_POSITION8,21H SHOWTIMEDIS;显示TIMEDIS中内容系统时间 RET;时间调用返回 TIMEDISPLAYENDP;************************延迟时间子程序****************************DELAY PROC PUSHCX MOVCX,0FFFHNEXT_D:NOP LOOPNEXT_D POPCX RETDELAY ENDP;*************************短延时**********************************DELAY_1 PROC PUSHCX MOVCX,00FFHNEXT_D1:NOP LOOPNEXT_D1 POPCX RETDELAY_1 ENDP;****************************日期显示子程序*****

温馨提示

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

最新文档

评论

0/150

提交评论