《微机原理与接口技术》课程设计显示系统时间的程序

上传人:M****1 文档编号:563796324 上传时间:2023-08-23 格式:DOC 页数:21 大小:363KB
返回 下载 相关 举报
《微机原理与接口技术》课程设计显示系统时间的程序_第1页
第1页 / 共21页
《微机原理与接口技术》课程设计显示系统时间的程序_第2页
第2页 / 共21页
《微机原理与接口技术》课程设计显示系统时间的程序_第3页
第3页 / 共21页
《微机原理与接口技术》课程设计显示系统时间的程序_第4页
第4页 / 共21页
《微机原理与接口技术》课程设计显示系统时间的程序_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《《微机原理与接口技术》课程设计显示系统时间的程序》由会员分享,可在线阅读,更多相关《《微机原理与接口技术》课程设计显示系统时间的程序(21页珍藏版)》请在金锄头文库上搜索。

1、 目 录1 设计的目的要求11.1 设计目的11.2 设计任务21.3 具体要求22任务原理分析223 子程序132.2.2 子程序242.2.3 子程序372.3 拓展设计及功能说明92.4 程序设计的主流程图93 方案比较103.1 方案1103.1.1 原理说明103.1.2 相关理论知识113.1.3 方案1的流程图123.2 方案2133.2.1 原理说明134 程序的调试过程145 调试过程中的问题166 心得体会17参考文献18附录19显示系统时间的程序1 设计的目的要求 设计目的1. 掌握中断的使用方法。2. 掌握BIOS系统功能调用。3. 掌握基本的显存读写技术。4. 学会用

2、汇编语言编写一个较完整的实用程序, 培养自己的动手操作能力。5 . 学习程序设计的基本思路和方法,编程、调试、撰写报告等。1.2 设计任务采用汇编语言设计一个显示系统时间程序,在屏幕上以“时:分:秒”的形式显示本机系统的时间。按Q退出程序。 具体要求(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5) 调试记录及结果分析(6) 总结(7) 参考资料(8) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图2任务原理分析本课设的设计任务要求在运行时,在屏幕上以“时:分:秒”的形式显示本机系统的时间,并

3、且按Q退出程序。由此可知,首先定义光标显示界面,然后调用BIOS中断,读取系统时间,并将调用的用二进制表示的时间数转换成ASCII码,并将时间数存入显存区,最后将存在系统内存区的时间用字符串的形式显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成循环的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可输入“Q”即可退出。如果用图形方式显示效果会更好,而且需注意设置显示时候的背景颜色。在本课程设计中,主要需要三个子程序来完成。子程序分析子程序1 子程序1的功能就是设置光标位置。其基本原理是:在子程序1中,我用到了

4、显示器驱动程序(INT 10H)中AH=2的功能。AH=2的功能是设置光标位置,入口参数:(DH,DL)=行、列;BH=页号(图形模式为0)。为了使显示的时间在DOS屏幕中的中间显示,DX设置为0A24H,即DH=0AH,DL=24H,就是在0AH行,24H列。如果想改变时间显示的位置,只要改变DX的数值就可以达到目的。由于在第零页中定位,可用SUB BH,BH来完成此操作。子程序1的源程序如下:MOV BX,005EHMOV AX,1301HINT 10H ;设置光标位置 MOV AH,02HMOV DH,0AHMOV DL,24H ;dh显示行(x坐标);dl显示列(y坐标)MOV BH,

5、0 ;页码为0INT 10H子程序1的流程图如图1所示。图1 子程序1的流程图2.2.2 子程序2子程序2的功能是把二进制数转换为十进制ASCII码输出。其基本原理是:首先要完成二进制到十进制数的转换,一般采用“除10取余”法来完成,其大致过程如下:将待转换的数(在AX中)除以10,得到第一个商和余数,此第一个余数就是所求的十进制数的个位;再用第一个商除以10,得到第二个商和余数,此第二个余数就是所求十进制数的十位;重复这一过程直至商为0,此时的余数就是所求十进制数的最高位。 在内存中分配一缓冲区,用来存放以上分离出来的十进制数的每一位,然后再逐个转换成ASCII码,转换成ASCII码的过程很

6、简单,就是给每个十进制位加上30H即可;最后送显示器输出。从转换的过程可以看出,先分离出来的是十进制数的低位,要后显示;后分离出来的是十进制数的高位,应该先显示。因此在编程时,我们可以利用堆栈操作中“先进后出、后进先出”的特性,当分离出各十进制位时依次入栈,要逐个转换成ASCII码送显示时依次出栈。 子程序2的流程图如下:BIN10OUT PROC ;二进制转十进制ASCUII码输出子程序 PUSH DI PUSH DX PUSH CX PUSH AX MOV CX,0 LEA DI,TBUF ;去缓冲区首地址BIN1: PUSH CX MOV AX,DX MOV DX,0 MOV CX,10

7、 DIV CX ;AX内容除以DX内容,商在AX,余数在DX XCHG AX,DX ;交换AX,DX的内容 ADD AL,30H ;余数加30H,入栈准备输出 MOV DI,AL INC DI POP CX INC CX ;累加每调用一次要输出的位数 CMP DX,0 ;商和0比较 JNZ BIN1 ;不等于0转BIN1 CMP CX,1 ;累加器和1比较 JNZ BIN2 ;不等于1转BIN2 MOV AH,2 ;等于1位,先在改位前输出0 MOV DL,0 INT 21HBIN2: DEC DI ;等于0输出十进制数的各位 MOV AL,DI CALL STDOUT LOOP BIN2 P

8、OP AX ;恢复现场 POP CX POP DX POP DI RETBIN10OUT ENDP子程序2的流程图如图2所示。图2 子程序2的流程图.3 子程序3子程序3的功能是读取系统的时间。其基本原理是调用DOS中断功能中的INT 21H ,当AH=2CH时,读取系统的时间,使得CH:CL=时:分,DH:DL=秒:秒100,此程序中精确到秒,这里只要提取时、分、秒、并在内存中分配一缓冲区,用来存放时间,不过此时的时、分、秒都是二进制的,因此要进行二进制和十进制的转换因此进入BCDASC1子程序进行转换成相应的ASCII码字符。子程序的源程序如下: TIME PROC NEAR ;显示时间子

9、程序 DISPLAY1: MOV SI,0 MOV BX,100 ;除以100取整、取余 DIV BL MOV AH,2CH ;取系统时间 INT 21H MOV AL,CH ;把小时数给al CALL BCDASC ;将时间数值转换成ASCII码字符 INC SI MOV AL,CL ;把分数给al CALL BCDASC INC SI MOV AL,DH ;把秒数给al CALL BCDASC MOV BP,OFFSET DBUFFER ;输出:,作为分隔符 MOV DX,0C0DH MOV CX,8 MOV BX,005EH MOV AX,1301HRE: MOV CX,0FFFFH ;

10、延时 DEC BX ;bx减1 JNZ RE ;如果不等于零,转移到re MOV AH,01H ;读键盘缓冲区字符到AH寄存器 INT 16H ;读磁盘变化状态 JE DISPLAY1 ;相等转移到display1程序 JMP START MOV AH,4CH INT 21H ;返dos RET TIME ENDP 子程序3的流程图如图3所示。图3 子程序3的流程图 拓展设计及功能说明 在本课设中,在完成老师要求的ASCII码的转换等基本任务以外,我还在显示方式中的背景颜色和字体颜色等方面做了拓展。为了使屏幕显示更加美观,同时也可以方便地改变字体颜色,我采用的是显示器输出中断调用即为INT 1

11、0H,其中的0号功能就是指设置显示方式,入口参数:AH=0(功能号),AL=设置方式(0 7)。出口参数:无。一共有8中不同的显示方式,通过修改AL的值即可。 程序设计的主流程图其程序设计的主流程图如图4所示:图4 程序设计的主流程图3 方案比较 方案1 原理说明首先在数据段开辟一显示缓冲区,用来存储系统时间。然后调用BIOS中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,分别将来小时数、分钟数、秒数存入显示缓冲区。按照输入的提示,若输入为“T”时, 则通过写显存将时间显示出来,并且运用了延时设置CX,进行缓冲,对BX递减1并判断BX,当结果为0时,然后读取键盘缓冲区字符,若键盘缓冲区有新的字符输入,则跳入START重新开始,若,没有则继续从系统读取系统时间,程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可输入“Q”即可退出。在本方案中用到了我以上介绍的三个子程序。 相关理论知识1)、BIOS功能调用:在存储器

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号