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