实时日历时钟系统的设计及实现.docx
- 文档编号:7861198
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:18
- 大小:17.66KB
实时日历时钟系统的设计及实现.docx
《实时日历时钟系统的设计及实现.docx》由会员分享,可在线阅读,更多相关《实时日历时钟系统的设计及实现.docx(18页珍藏版)》请在冰豆网上搜索。
实时日历时钟系统的设计及实现
山东科技大学 信电学院 2011-01-10微机原理课程设计,实时日历/时钟系统的设计及实现
课程设计资源不好找,希望大家好好珍惜!
好好做课程设计,做完好回家!
作者:
WKNB
.386
datasegment
timedb10dup(':
');存放时间
datedb20dup('');存放日期
str1db'Thankyouforusingthisclock',0ah,0dh
db'ItispoweredbyWKNB',0ah,0dh,'$'
str2db'Torevisedate--d',0ah,0dh
db'Torevisetime--t',0ah,0dh
db'Ifyouwanttoquit--q',0ah,0dh,'$'
yeardb'Pleaseinputanewyear:
',0ah,0dh,'$'
monthdb'Pleaseinputanewmonth:
',0ah,0dh,'$'
daydb'Pleaseinputanewday:
',0ah,0dh,'$'
hourdb'Pleaseinputanewhour:
',0ah,0dh,'$'
minudb'Pleaseinputanewminute:
',0ah,0dh,'$'
secodb'Pleaseinputanewsecond:
',0ah,0dh,'$'
chagdb'Areyousure(y/n)?
',0ah,0dh,'$'
errordb'Error!
!
!
Pleaseinputcorrectbutton:
',0ah,0dh,'$'
wrongdb'Youhaveinputthewrongnumber,pleaseinputanewone:
',0ah,0dh,'$'
cant1db'Cantchangethetime,pleaseretry:
',0ah,0dh,'$'
cant2db'Cantchangethedate,pleaseretry:
',0ah,0dh,'$'
dataends
codesegmentuse16
assumeds:
data,cs:
code
start:
movax,data
movds,ax
moves,ax
callclear;清屏
movah,02h;设置光标位置
movbh,00h
movdh,00h;行坐标
movdl,00h;列坐标
int10h
leadx,str1;字符串1
movah,09h
int21h
callhui
movah,02h;设置光标位置
movbh,00h
movdh,0ah;行坐标
movdl,00h;列坐标
int10h
leadx,str2;字符串2
callyin
movah,09h
int21h
clear1:
movah,1;查询键盘缓冲区,测试键盘是否有输入
int16h
jzmain;缓冲区为空,zf=1无输入zf=0有输入
xorax,ax;不为空则取出,清空
int16h
jmpclear1
main:
movsi,0;清空指令读取日期
movah,2ah;CX=年,AL=星期,DH=月,DL=日
int21h
movax,cx;年ASCII码输出
callascyear
andah,0
moval,dh;月ASCII码输出
callascdate
andah,0
moval,dl;日ASCII码输出
callascdate
leabp,date;显示日期ES:
BP=显示字符串的地址
movdx,041eh;DH,DL=起始行列
movcx,10;字符串长度
movbx,00ach;BH=页码BL=背景字体颜色
movax,1301h;第13号调用,AL=显示输出方式1
int10h
movsi,0
movah,2ch;读取时间CH=时(0-23),CL=分(0-59),DH=秒(0-59),DL=百分秒(0-99)
int21h
andah,0
moval,ch;时ASCII码输出
callasctime
andah,0
moval,cl;分ASCII码输出
callasctime
andah,0
moval,dh;秒ASCII码输出
callasctime
leabp,time;显示时间
movdx,051fh
movcx,8
movbx,008eh
movax,1301h
int10h
movah,02h;设置光标位置
movbh,00h;页码
movdh,0fh;y坐标
movdl,00h;x坐标
int10h
movah,01h;键盘中断
int16h
cmpal,'q'
jnzdate1
jmpend1
date1:
cmpal,'d'
jnztime1
callchandate
jmpstart
time1:
cmpal,'t'
jnzclear1
callchantime
jmpstart
end1:
movah,4ch;主程序结束
int21h
ascyearproc;子程序开始,年ASCII码转换
movbl,100
divbl
pushax
andah,0
movbl,10
divbl
addal,30h
movdate[si],al
incsi
addah,30h
movdate[si],ah
incsi
popax
moval,ah
andah,0
movbl,10
divbl
addal,30h
movdate[si],al
incsi
addah,30h
movdate[si],ah
incsi
incsi
ret
ascyearendp
ascdateproc;月日ASCII码转换
movbl,10
divbl
addal,30h
movdate[si],al
incsi
addah,30h
movdate[si],ah
incsi
incsi
ret
ascdateendp
asctimeproc;时间ASCII码转换
movbl,10
divbl
addal,30h
movtime[si],al
incsi
addah,30h
movtime[si],ah
incsi
incsi
ret
asctimeendp
chandateproc
movah,1;查询键盘缓冲区
int16h
jzc
xorax,ax
int16h
c:
callhui
chanyear:
leadx,year;更改年
movah,09h
int21h
andcx,0;存放结果
movah,01h
int21h
callceshi;判断第一个数字范围
subal,30h
andah,0
movbx,1000
mulbx
addcx,ax
movah,01h
int21h
callceshi;第二个数字
subal,30h
andah,0
movbl,100
mulbl
addcx,ax
movah,01h
int21h
callceshi;第三个数字
subal,30h
andah,0
movbl,10
mulbl
addcx,ax
movah,01h
int21h
callceshi;第四个数字
subal,30h
andah,0
addcx,ax
pushcx;将输入的年压入堆栈,保护
callhui
chanmonth:
leadx,month;更改月
movah,09h
int21h
callchan;更改月日时分秒子程序,出口参数bh
cmpbh,1;判断月范围在1-12之间
jaeo
callcuo
jmpchanmonth
o:
cmpbh,12
jbeq
callcuo
jmpchanmonth
q:
movdh,bh
pushdx;将输入的月压入堆栈,保护
callhui
popdx;退出保护年月保护
popcx
callchanday;判断闰年并输出日的范围,出口参数bh
pushcx;重新保护年
movdl,bh
pushdx;保护月日
callhui
leadx,chag
movah,09h
int21h
popdx;退出年月日保护
popcx
ok:
movah,01h;确认输入
int21h
cmpal,'n'
jzc
cmpal,'y'
jzjudge
pushdx
callhui
leadx,wrong
movah,09h
int21h
popdx
jmpok
judge:
movah,2bh;修改系统日期
int21h
cmpal,0;测试更改是否成功,出口参数:
AL=00H:
设置成功,FFH:
设置失败
jzreturn
callhui
leadx,cant2
movah,09h
int21h
jmpchandate
return:
ret
chandateendp
chantimeproc;更改时间
movah,1;查询键盘缓冲区
int16h
jzb
xorax,ax
int16h
b:
callhui
chanhour:
leadx,hour;更改时
movah,09h
int21h
callchan
cmpbh,0;判断时在0-23之间
jaer
callcuo
jmpchanhour
r:
cmpbh,23
jbes
callcuo
jmpchanhour
s:
movch,bh;CH=时
callhui
chanmin:
leadx,minu;更改分
movah,09h
int21h
callchan
cmpbh,0;判断分在0-59之间
jaew
callcuo
jmpchanmin
w:
cmpbh,59
jbev
callcuo
jmpchanmin
v:
movcl,bh;CL=分
callhui
chansec:
leadx,seco;更改秒
movah,09h
int21h
callchan
cmpbh,0;判断秒在0-59之间
jaex
callcuo
jmpchansec
x:
cmpbh,59
jbey
callcuo
jmpchansec
y:
movdh,bh;DH=秒
movdl,00h;DL=百分秒,将其置为0
pushcx;保护
pushdx
callhui
leadx,chag
movah,09h
int21h
popdx
popcx
ok2:
movah,01h;确认时间输入(同日期确认)
int21h
cmpal,'n'
jzb
cmpal,'y'
jzjudge2
pushdx
callhui
leadx,wrong
movah,09h
int21h
popdx
jmpok2
judge2:
movah,2dh
int21h
cmpal,0;修改是否成功,AL=00H成功,ffH失败
jzreturn1
callhui
leadx,cant1
movah,09h
int21h
jmpchanhour
return1:
ret
chantimeendp
ceshiproc;测试输入数字
cmpal,30h
jael;判断数字是否大于等于0
callhui
leadx,error
movah,09h
int21h
jmpchanyear
l:
cmpal,39h
jben;判断数字是否小于等于9
callhui
leadx,error
movah,09h
int21h
jmpchanyear
n:
ret
ceshiendp
huiproc;换行
movdl,0ah
movah,02h
int21h
movdl,0dh
movah,02h
int21h
ret
huiendp
chanproc
g2:
movah,01h;更改月日时分秒子程序
int21h
subal,30h
movbl,10
mulbl
jaeg3;判断第一个数是否大于0
callhui
leadx,error
movah,09h
int21h
jmpg2
g3:
movbh,al;bh出口参数
movah,01h;输入第二个数字
int21h
subal,30h
addbh,al
jaeg1;判断第二个数是否大于0
callhui
leadx,error
movah,09h
int21h
jmpg2
g1:
ret
chanendp
clearproc;清屏子程序
movax,0600h
movbh,07h;背景,字体颜色
movcx,0
movdx,2479h
int10h
ret
clearendp
yinproc;隐藏光标
movcx,2000h
movah,01h
int10h
ret
yinendp
cuoproc;显示错误
callhui
leadx,error
movah,09h
int21h
ret
cuoendp
chandayproc
b2:
pushdx
d:
leadx,day
movah,09h
int21h
movah,01h
int21h
subal,30h
movbl,10
mulbl
jaed1
callhui
leadx,error
movah,09h
int21h
jmpd
d1:
movbh,al
movah,01h
int21h
subal,30h
addbh,al
jaem
callhui
leadx,error
movah,09h
int21h
jmpd
m:
popdx
cmpdh,1
jza1
cmpdh,2
jza2
cmpdh,3
jza1
cmpdh,4
jza3
cmpdh,5
jza1
cmpdh,6
jza3
cmpdh,7
jza1
cmpdh,8
jza1
cmpdh,9
jza3
cmpdh,10
jza1
cmpdh,11
jza3
cmpdh,12
jza1
a1:
cmpbh,1
jaeb1
pushdx
callcuo
popdx
jmpb2
b1:
cmpbh,31
jbeb3
pushdx
callcuo
popdx
jmpb2
a3:
cmpbh,1
jaec1
pushdx
callcuo
popdx
jmpb2
c1:
cmpbh,30
jbeb3
pushdx
callcuo
popdx
jmpb2
a2:
movax,cx
pushbx
pushdx
cwd
movbx,4
divbx
cmpdx,0
popdx
popbx
jnzlab1
movax,cx
movbl,100
divbl
cmpah,0
jnzlab2
movax,cx
pushbx
pushdx
cwd
movbx,400
divbx
cmpdx,0
popdx
popbx
jzlab2
lab1:
cmpbh,1
jaed2
pushdx
callcuo
popdx
jmpb2
d2:
cmpbh,28
jbeb3
pushdx
callcuo
popdx
jmpb2
lab2:
cmpbh,1
jaed3
pushdx
callcuo
popdx
jmpb2
d3:
cmpbh,29
jbeb3
pushdx
callcuo
popdx
jmpb2
b3:
ret
chandayendp
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 日历 时钟 系统 设计 实现