毕业设计84吉林建筑工程学院电子时钟显示程序设计Word文档下载推荐.docx
《毕业设计84吉林建筑工程学院电子时钟显示程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《毕业设计84吉林建筑工程学院电子时钟显示程序设计Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
NHOURdb0;
设置时间使用
NMINdb0;
NSECdb0;
FUNKEYdb?
;
功能设置使用
keySwdb00h;
是否按键开关
SWITCHdb0FFh;
刷新开关,真,则不断在定时器中断函数中刷新,否则不刷新
ndb0dh,0ah,'
$'
countdw1
sMsgdb'
****welcometoSimpleclock****'
0dh,0ah,'
qMsgdb'
****PleaseInputqtoquit****'
0dh,0ah
db'
'
'
****InputstosetnewTime****'
setTMsgdb'
PleaseInputnewTime(HH:
MM:
SS)'
authorMsgdb'
______________________________________'
Author:
DingChuanxiang'
E-mail:
dingsg3c16@'
class:
xingong_042_08hao'
Date:
2007/07/07'
.code
PUSHAMACRO
PUSHDS
PUSHAX
PUSHBX
PUSHCX
PUSHDX
ENDM
POPAMACRO
POPDX
POPCX
POPBX
POPAX
POPDS
mainprocfar
start:
movax,@data
movds,ax
pushds
callGETTIME;
取得系统时间
callinitUI;
初始化界面
moval,1ch
movah,35h
int21h;
DOS调用取中断向量
pushes
pushbx
pushds
movdx,offsettUpdate
movax,segtUpdate
movds,ax
movah,25h
DOS调用设置中断向量
popds
inal,21h
andal,11111100b
out21h,al
sti
delay:
PUSHA
cmpds:
[keySw],0FFh;
检查是否有按键
jzexitdelay;
有按键则跳转
POPA
jmpdelay
exitdelay:
popdx
moval,1ch
movah,25h
popds;
restoreds
读敲入的按键
movah,07h
int21h
cmpal,'
s'
jnenext1
判断读入字符然后进行相应处理,此时中断函数已经取消,只是单线程
setT:
movds:
[FUNKEY],al
callSETTIME;
调用子函数设置时间
[keySw],00h
jmpstart
next1:
q'
jeendmain
endmain:
movax,4c00h;
exit
mainendp
定时中断程序()
tUpdateprocnear
pushds;
保存工作寄存器
pushax
pushbx
pushcx
pushdx
movax,@data
movds,ax
deccount;
时间间隔总数(约18.2次为1秒)
jnzexit;
不到一秒则跳转
movcount,18
callCALTIME;
更新时间
检测刷新开关是否打开
movbl,ds:
[SWITCH]
cmpbl,00
jzexit
检测是否有按键按下,取适当的值进行退出控制
MOVAH,0BH;
检测是否输入消息(按键消息)
INT21H
INCAL
JNZnokey
设置已经被按键
jmpexit
nokey:
callDISPLYH;
显示小时
callDISPLYM;
显示分钟
callDISPLYS;
显示秒
exit:
cli
moval,20h
out20h,al
popcx
popbx
popax
popds
iret;
返回中断
tUpdateendp
--------------------------------------------------------------------
关闭定时刷新开关
closeSwprocnear
movbl,0h
[SWITCH],bl;
关闭刷新开关
ret
closeSwendp
----------------------------------------------------------
打开定时刷新开关
openSwprocnear
movbl,0FFh
打开刷新开关
openSwendp
---------------------------------------------------------------------------
初始化显示界面
initUIprocnear
设置显示方式(40×
25黑白文本,16级灰度)
movah,0h
moval,00h;
BIOS调用设置显示方式
int10h
显示头标题
movdh,00h
movdl,00h
callMOVCUR
movdx,offsetsMsg
movah,09h;
DOS调用显示字符串
callDOS
显示结尾标题
movdh,06h
movdl,02h
movdx,offsetqMsg
int21h
显示作者信息
movdh,0bh
movdx,offsetauthorMsg
initUIendp
--------------------------------------------------------------------------
移动光标(dh:
row,dl:
col)
dh;
参数设置行
dl;
参数设置列
MOVCURprocnear
设置光标位置
movah,2h
movbh,0
ret
MOVCURendp
DISPLYHPROCNEAR
设置光标位置
movdh,3h
movdl,13d.
movdh,0
movdl,ds:
[HOUR]
calloutput;
调用output函数输出小时
movdl,'
:
'
movah,02h
RET
DISPLYHENDP
DISPLYMPROCNEAR
movdh,3h;
setRowNo.
movdl,16d;
setColumnNO.
[MIN]
calloutput
DISPLYMENDP
DISPLYSPROCNEAR
movdl,19d;
[SEC]
DISPLYSendp
调用DOS中断取得系统时间
GETTIMEPROCNEAR
movah,2ch;
取得系统时间,CH:
CL=(H:
M),DH:
DL=(s:
1/100s)
[HOUR],CH;
取得小时
[MIN],CL;
取得分钟
decDH;
延迟1秒
[SEC],DH;
取得秒
[MSEC],DL
GETTIMEendp
调整时间,累加秒,分,时
CALTIMEprocnear
PUSHA;
调整秒
incds:
[SEC],60d
jbendc
[SEC],0h
setM:
调整分钟
[MIN],60d
[MIN],0h
setH:
调整小时
[HOUR],24d
[HOUR],0h
endc:
CALTIMEendp
设置时间
SETTIMEprocnear
callcloseSw;
关闭定时刷新
movdh,11h
callMOVCUR;
移动光标
movdx,00h
输出提示信息,提示输出设置时间
movdx,offsetsetTMsg
callREADNT;
读取时间(HH:
SS)
movch,ds:
[NHOUR];
HOUR
movcl,ds:
[NMIN];
MIN
movdh,ds:
[NSEC];
SECOND
movdl,0h;
1/100SECOND
movah,2Dh
cmpal,00h
jeSetSuccess
movah,02h;
设置时间中断调用失败处理
!
SetSuccess:
callopenSw;
打开刷新开关
SETTIMEendp
---------------------------------------------------------------------
rSetSuccess:
------------------------------------------------------------------
读取时间(从ASCII码到16进制数值的转换)(HH:
READNTprocnear
movah,01h
movbx,0h;
bx存放得到的数值(16进制)
loop1:
0'
读取小时
jlendloop1
9'
jgendloop1
subal,30h
cbw
xchgax,bx
movcx,0ah
mulcx
addbx,ax
jmploop1
存取小时
endloop1:
[NHOUR],bl;
movbx,0h;
loop2:
读取分钟
jlendloop2
jgendloop2
addbx,ax
jmploop2
存取分钟
endloop2:
[NMIN],bl
movbx,0h
loop3:
读取秒
jlrlast
jgrlast
jmploop3
rlast:
存取秒
[NSEC],bl
READNTendp
输出字符(dx中存放十进制数值)
outputprocnear
movax,dx
movdx,00h
movcx,0h
trans:
movbx,000ah
divbx
adddl,30h
movdh,0h
inccx
cmpax,00h
jgtrans
cmpcx,01h
jgprint
addZero:
增加前导0,,比如:
02
movdh,0
inccx
print:
cmpcx,0h
jleendout
popdx
deccx
jmpprint
endout:
outputendp
endstart;
endassemble
.end
(五)结果显示:
四、总结:
1、本设计主要用到的DOS、BIOS调用及功能
DOS中断功能调用:
AH
功能
调用参数
返回参数
01
键盘输入并回显
AL=输入字符
显示输出
DL=输出字符
07
键盘输入(无回显)
09
显示字符串
DS:
DX=串地址
(S为串结束字符)
0B
检验键盘状态
AL=00有输入
=FF无输出
25
设置中断向量
DX=中断向量
AL=中断类型号
2C
取时间
CH:
CL=时:
分
DH:
DL=秒:
1/100秒
2D
AL=00成功
=FF无效
35
取中断向量
AL=中断类型号
ES:
BX=中断向量
4C
带返回码结束
AL=返回码
BIOS中断功能调用;
设置显示方式
AL=0040×
25黑白方式
2
BH=页号
DH、DL=行、列
2、心得体会
课程设计是培养学生综合运用所学的知识,发现、提出、分析和解决实际问题和锻炼能力的主要过程,是对学生实际能力的综合体现。
这次微机原理课程设计历时两个星期,在这两个星期的日子里,可谓是历尽艰难,但到最后还是取得了成功,学到了很多的东西。
同时不仅巩固了以前所学的知识,而且学到了很多在书本上所没有学到的知识。
通过本次课程设计使我懂得了理论与实际相结合的重要性。
只有理论知识其实是所谓的“纸上谈兵”那是远远不够的,只有把所学的理论知识与实践结合起来,从理论得出结论,从结论中分析过程,才能达到当代大学生必备的素质,从而为自己走向社会打下基础。
在整个设计过程中遇到的问题非常多,但在这方面处理上我摆正自己的位置,认识到自己基础知识的欠缺和对以前学习中对学过的知识理解的不够深刻,掌握的不牢固,所以在设计过程中我努力查阅资料,力求老师和同学的帮助,才得以顺利完成。
做程序设计是一个非常艰苦的过程。
虽然编写程序一个人有一个人的方法,但是一步走错,程序就不能运行,以前在课本上接触的都是一些小的程序,但是这次设计我的程序长达10篇之多,要分析起来确实困难,好在我的写流程图的时候下了一番功夫,又对每个子程序进行推敲,也使较长的程序变的简单。
在设计中使用了大量的DOS调用和BIOS调用,也对里面常用的功能号有了深刻的记忆。
其次,以前对于编程工具的使用还处于一知半解的状态,但是经过一段时间的调试,对怎么去排错、查错、怎么去看每一步的运行结果都有了很大的提高。
微机原理课程设计很快结束了,在设计中有失落也有惊喜,有付出也有收获,最主要的是自己学到了知识,为下学期的单片机的课程设计打下了基础。
五、参考文献:
1、《微型计算机系统原理及应用》,(第2版)主编:
杨素行
出版社:
清华大学出版社
出版时间:
2004年
2、《微机原理与汇编语言程序设计》主编:
刘永华王成端
中国铁道出版社
2000年
3、《微机原理与接口技术实验及课程设计》主编: