二.程序内容:
第一部分:定义显示界面。
第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成 ASCII 码,并将时间
数存入内存区。
第三部分:将存在系统内存区的时间数用显示字符串的形式显示出来。
第四部分:获取键盘的按键值,判断键值并退出系统。
三.程序设计原理:
首先在数据段开辟一显示缓冲区,用来存储系统时间。调用 DOS 中断,返回系统时间,并
将来返回的二进制时间转换成 ASCII 码,方便时间显示时的调用。分别将来小时数、分钟
数、秒数存入显示缓冲区,并最终存入一结束字符号’$’。调用 DOS 字符串显示功能将时间
显示出来。并调用屏幕 I/O 中断,定位光标的开始位置,结合着将时间显示在我们预先定
义好的位置上。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不
断获取系统的时间,这样就形成了会跳动的电子钟了。时间显示的刷新要配合延时程序进
行,为了得到良好的显示效果,延时程序要尽量接近 1 秒,但又不能超过一秒,所以本程
序调用了一段较精确的时间延迟程序,屏幕显示延迟一段时间后再跳回到初始位置,再显
示,由此循环下去。程序的最后还设计一了个按“ ESC”键就退出的功能,采取了判断键值
的方法。为了显示的美观,还设计一个字符图界面,通过显示字符串的方法显示出来。本
程序具有很强的扩展功能,我们可以在此基础上进行一些输入、输出扩展,显示的扩展,
比如可以做成计时器,并设计一个精美的运动的图形界面,时间到了会自动调用 PC 喇叭
发出报警声等等。。。但是由于时间的原因,所以只做了核心的部分,这不得不说是一个
遗憾。本程序使用了未来汇编,与 VISUAL ASM 开发平台。
四.程序设计心得:
本程序虽然只花了一天的时间,但是也收获颇多。其实本程序的设计思路并不难想,核心
代码的设计所花的时间也不长。但是调试的时间却占了差不多 70%的时间,在本程序设计
的初期曾经走了不少弯路碰见过不少难题,所幸的是在我们的坚持下最终把难题一一击破
下面就列举下我们遇见过的比较繁琐的难题:
1. 进制转换问题。开始我们的思路是想将 AL 的内容除于 10,然后分别讲除数跟商分别
加上 30H 转换成 ASCII 码并保存在 AH 跟 AL 里面。但是写完调试的时候系统自动弹出
一个对话框,要求关闭,可是用自带的编译器却可以通过,百思不得其解,最后上网
找了资料才发现是编译系统跟操作系统不兼容的问题,本人的操作系统是最新的
WIN2003,纯 32 位的系统,跟 16 位的软件有不兼容也是有可能的。但我本人又不想重
装个 WIN98 来调试程序,于是就放弃这种方法,改用逻辑移位,调整的方式来实现了。
2. 屏幕显示问题。开始做完程序的时候由于采用了光标定位的方法,发现运行了程序后
显示光标不停地跳动,而且在不同的位置上跳动,严重影响了程序的可观赏性。检查
发现原来光标的跳动跟程序的刷新频率跟人眼的视觉残象成影原理有关,只要系统的
刷新频率大于 1/25 秒,那么人眼就会认为图象在改变,这跟电影为什么要设成 25 帧/
秒的播放速率的原理是一样的。这样一来,就必须设计一较为精确的延时程序来改善
画面的显示了,只要不让屏幕刷新得太快就可以打到要求了,具体的显示时间是通过
延时程序里的 DX 值决定的,通过调整 DX 的值,我们发现当 DX 等于 04FF 的时候显
示效果是最好的。