微机原理课程设计数字时钟程序.docx
《微机原理课程设计数字时钟程序.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计数字时钟程序.docx(29页珍藏版)》请在冰点文库上搜索。
微机原理课程设计数字时钟程序
河北科技大学
课程设计报告
学生姓名:
学 号:
专业班级:
电子信息科学与工程
课程名称:
微型计算机原理及应用
学年学期:
20 11—2012学年第1学期
指导教师:
2 0011 年 12月
课程设计成绩评定表
学生姓名
学 号
成绩
专业班级
起止时间
2011/12/26—2011/12/30
设计题目
数字时钟程序
指
导
教
师
评
语
指导教师:
年 月日
一、课设题目及目的………………………………….4
二、设计任务………………………………………….4
三、总框图及设计流程……………………………….4
四、ﻩ源程序清单……………………………………….6
五、ﻩ调试结果及显示………………………………….19
六、ﻩ个人贡献………………………………………….19
七、课程设计总结及体会…………………………….21
一、课设题目及目的
实习题目:
数字时钟程序
实习目的:
通过实习,使我们进一步弄懂所学到的课本知识,巩固和深化对8086系统的指令系统、中断系统、键盘/显示系统、程序设计、应用开发等基本理论知识的理解,提高汇编语言应用于技术的实践操作技能,掌握汇编语言应用系统设计、研制的方法,培养利用科技革新、开发和创新的基本能力,为毕业后从事与其相关的工作打下一定的基础。
二、课设任务
本课题为利用汇编语言设置时钟程序,其显示效果为:
截取系统时间,能以时、分、秒(其中时为24小时制)的形式显示,并且通过合理的操作能修改时和分的内容来修改时间。
再有,可以给它设定一个ALARM时间,到这个时间它就能产生信号,起到定时作用,。
除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx月xx日。
三、总框图及流程
四.源程序清单
DATA SEGMENT;数据段开始
MESS1DB'****************ASMASSIGNMENT******************* ',0AH,0DH
DB' ***************ELECTRONICCLOCK****************** ',0AH,0DH
DB'*******Press C or c toEDITthe ALARMtime******* ',0AH,0DH
DB '*******PRESSM ORmTOCHANGE SOUND!
*************',0AH,0DH
DB’****PRESSSORsTOSETTHETIME************** ',0AH,0DH ;显示功能菜单
DB' ***********PRESS ESC BUTTONTOEXIT************** ',0AH,0DH,'$'
TNDB 'PLEASEINPUTTHENEWTIME(hh:
mm:
ss):
',0DH,0AH,'$'
TMDB'PLEASEINPUT THEALARM TIME(hh:
mm:
ss):
',0DH,0AH,'$'
MUSICMESSDB 'PLEASECHOOSE THE TYPEOFMUSIC:
1(FAST)2(MIDDLE)3(SLOW)',0DH,0AH,'$'
MESS2 DB 'Timeis:
',0AH,0DH,'$'
MESS3 DB'TODAYIS:
',0AH,0DH,'$'
DBUFFER1 DB 20DUP(' ')
T_BUFFDB40 ;在数据段开一段时间显示缓冲区
DB?
DB40 DUP(?
)
HORDB ?
MINDB?
SECDB ?
TEMPHOR DB?
TEMPMINDB ?
TEMPSECDB?
MUSICDW800 ; 存放音乐的频率数
DATA ENDS
STACKSEGMENT
DB100DUP(?
)
STACK ENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
START:
CALL CLEAR ;调用清屏子程序
DISPLAY:
;时间显示部分
MOV AX,DATA
MOVDS,AX
MOVBX,OFFSET T_BUFF;送T_BUFF的偏移地址到BX
MOVAH,2CH;调用DOS时间调用功能,功能号:
2CH,小时,分钟,秒数分别保存在CH,CL,DH中
INT21H
;判断时间是否相等
SUBDH,1 ;秒数+1修正
CALLCHECK
;.........................................................................
MOVAL,CH ;小时数设定
MOV AH,0
CALLBCTD ;调用进制转换子程序二进制BCD码子程序
PUSHAX
AND AL,0F0H ;选取AL高四位
MOVCL,4 ;设置右循环的次数
RORAL,CL ;右循环
ORAL,30H ;加30H得到ACSII码
MOV[BX],AL ;将得到的结果送到T_BUFF缓冲区
INCBX ;BX自加1,指针指向下一个缓冲区的下一个地址
POPAX
ANDAL,0FH ;选取低四位
OR AL,30H
MOV[BX],AL;将转换后的低四位值送入缓冲区的下一个地址
INC BX
;........................................................................
MOVAL,':
';显示分隔符号
MOV[BX],AL
INCBX
;........................................................................
MOVAH,2CH;取时间
INT 21H
;.......................................................................
MOVAL,CL;分钟数设定
MOVAH,0
CALL BCTD;调用进制转换子程序二进制BCD码子程序
PUSH AX
ANDAL,0F0H;选取AL高四位
MOVCL,4;设定循环次数
rolal,cl;循环左移4次
or al,30h;加30H得到ACSII码
mov[bx],al;将得到的结果送到T_BUFF缓冲区
inc bx;BX自加1,指针指向下一个缓冲区的下一个地址
pop ax
andal,0fh;选取低四位
oral,30h
mov [bx],al;将转换后的低四位值送入缓冲区的下一个地址
inc bx
;.....................................................................
moval,':
' ;显示分隔符号
mov [bx],al
incbx
;.....................................................................
mov ah,2ch;秒设定
int21h
moval,dh
movah,0
callbctd;调用进制转换子程序二进制BCD码子程序
pushax
and al,0f0h;选取AL高四位
movcl,4
rolal,cl
or al,30h;加30H得到ACSII码
mov [bx],al;将得到的结果送到T_BUFF缓冲区
incbx
pop ax
and al,0fh;选取低四位
oral,30h
mov[bx],al;将转换后的低四位值送入缓冲区的下一个地址
inc bx
;..........................................................
mov al,'$';将字符串的结束位送至显示缓冲区的最后一位
mov[bx],al
;..........................................................
calldate
pushbx;置光标位置,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX
movah,2;0~1用于此程序最下边的 在下面的两个置光标位置
movbh,0
movdh,17;行
movdl,41;列
int10h
popbx
leadx,t_buff;送T_BUFF偏移地址到DX,并调用DOS显示功能,功能号为9
movah,9
int21h;至此当前时间的显示功能结束!
pushbx;置光标位置
movah,2
movbh,0
mov dh,16
movdl,41
int10h;日期
popbx
leadx,DBUFFER1
movah,9
int21h
pushbx;置光标位置
mov ah,2
movbh,0
movdh,16
mov dl,21
int 10h
pop bx
lea dx,mess3
mov ah,9
int21h ;显示MESS3
pushbx;置光标位置
movah,2
movbh,0
mov dh,0
mov dl,0
int10h
popbx
leadx,mess1
movah,9
int21h;显示MESS1
pushbx;置光标位置
movah,2
movbh,0
mov dh,17
movdl,21
int10h
popbx
leadx,mess2
mov ah,9
int21h ;显示MESS2
;.............................................
call delay1
mov ah,1 ;调用键盘I/O中断功能号1,获取键值到AL
int 16h
cmp al,'M'
jeeditmusic
cmpal,'m'
jeeditmusic
cmpal,'c';是c键,转移闹钟时间修改程序
jeedittime
cmpal,'C' ;是C键,转移闹钟时间修改程序
je edittime
cmp al,'s';是s键,转移时间修改程序
jecor
cmpal,'S' ;是S键,转移时间修改程序
jecor
cmpal,1bh
jzquit ;是ESC键,退出程序
jmp display
quit:
movah,4ch
int 21h
ret
Cor:
callsettime;设置时间
;..........................................
editmusic proc
pushax;入栈保护数据
push bx
pushcx
pushdx
pushf
movdx,offsetmusicmess;显示修改音乐的种类提示
mov ah,09h
int21h
mov dx,offsett_buff;数据缓冲区的数据输入
movah,0ah
int21h
anddx,0h
leabx,t_buff
incbx
inc bx
inc bx
mov al,[bx]
cmpal,'1'
jem800to
cmp al,'2'
jem1600to
cmpal,'3'
jem3200to
m800to:
mov music,800
jmpt
m1600to:
movmusic,1600
jmpt
m3200to:
movmusic,3200
t:
popf;出栈恢复数据
popdx
popcx
pop bx
popax
jmp start
ret;返回DOS
editmusicendp;结束
bctdprocnear;二进制BCD码子程序
;AX输入参数
;AX输出参数,存放调整过的BCD码
mov dx,ax
mov ax,0
movcx,16;设置循环次数
bctd1:
clc;清进位标志C
rcl dx,1;通过进位的循环左移
adcal,al;带进位加法
daa ;加法的十进制调整
xchg al,ah;交换高,低8位
adcal,al
daa
xchg al,ah
loopbctd1;循环次数保存在CX里
ret
bctd endp
;.....................................
edittime proc ;时间修改程序
pushax ;入栈保护数据
pushbx
pushcx
pushdx
pushf
movdx,offsettm ;显示修改时间的格式提示
mov ah,09h
int21h
mov dx,offsett_buff;数据缓冲区的数据输入
mov ah,0ah
int 21h
anddx,0h
leabx,t_buff
incbx
incbx
incbx
movdh,[bx]
subdh,30h
incbx
MOVDL,[BX]
SUBDL,30H
MOV CL,10
MOV AL,DH
MULCL
ADDAL,DL
MOVCH,AL
MOV HOR,AL
MOVTEMPHOR,AL
INC BX
INC BX
MOVDH,[BX]
SUBDH,30H
INCBX
MOV DL,[BX]
SUBDL,30H
MOVCL,10
MOVAL,DH
MUL CL
ADDAL,DL
MOVCL,AL
MOV MIN,AL
MOVTEMPMIN,AL
INC BX
INCBX
MOVDH,[BX]
SUBDH,30H
INCBX
MOV DL,[BX]
SUB DL,30H
MOVCL,10
MOVAL,DH
MULCL
ADDAL,DL
MOV DH,AL
MOVTEMPSEC,AL
POPF ;出栈恢复数据
POPDX
POPCX
POPBX
POPAX
JMP START
RET
EDITTIMEENDP
;......................................
CLEARPROCNEAR
PUSHAX;入栈保护现场
PUSH BX
PUSH CX
PUSHDX
MOV AX,0600H;AH=06(滚动)AL=00(全屏空白)
MOV BH,1FH;设置背景颜色(1蓝色)和前景颜色(F白色)
SUBCX,CX
MOVDX,5F5FH
INT 10H
POP DX;出栈恢复现场
POP CX
POP BX
POP AX
RET
CLEAR ENDP
;....................
DATE PROC NEAR
MOV AH,2AH;取日期CX:
DH:
DL=年:
月:
日AL=星期
INT 21H
MOV SI,0
MOV AX,CX
MOVBX,100
DIV BL
MOVBL,AH
CALL BCDASC1;日期数值转换成相应的ASCII码字符
MOV AL,BL
CALL BCDASC1
INC SI
MOV AL,DH
CALLBCDASC1
INC SI
MOV AL,DL
CALLBCDASC1
MOV AL,'$'
MOV DBUFFER1[SI],AL
RET
DATEENDP
;..................
BCDASC1 PROCNEAR
PUSH BX
CBW
MOVBL,10
DIVBL
ADD AL,'0'
MOVDBUFFER1[SI],AL
INC SI
ADD AH,'0'
MOV DBUFFER1[SI],AH
INC SI
POP BX
RET
BCDASC1 ENDP
;........................................
SETTIMEPROC;时间修改子程序
CALLINPUT;调用键盘输入子程序输入数据
MOV CH,HOR
MOV CL,MIN
MOV DH,SEC
AND DL,0H
MOV AH,2DH
INT 21H
JMPSTART
RET
SETTIME ENDP
;........................................
DELAY1 PROC;精确延迟时间子程序
MOV DX,04FFH;循环次数
UP:
XOR CX,CX
A:
NOP
LOOPA
DECDX
JNZ UP
RET
DELAY1 ENDP
;.......................................
INPUT PROC;输入子程序
PUSH AX;入栈保护数据
PUSH BX
PUSH CX
PUSHDX
PUSHF
MOVDX,OFFSETTN;显示修改时间的格式提示
MOV AH,09H
INT21H
MOVDX,OFFSETT_BUFF;数据缓冲区的数据输入
MOVAH,0AH
INT 21H
AND DX,0H
LEA BX,T_BUFF
INCBX
INCBX
MOV DH,[BX]
SUBDH,30H
INC BX
MOV DL,[BX]
SUB DL,30H
MOV CL,10
MOVAL,DH
MULCL
ADD AL,DL
MOV CH,AL
MOV HOR,AL
INC BX
INC BX
MOV DH,[BX]
SUBDH,30H
INC BX
MOV DL,[BX]
SUB DL,30H
MOVCL,10
MOVAL,DH
MULCL
ADD AL,DL
MOV CL,AL
MOV MIN,AL
INC BX
INC BX
MOV DH,[BX]
SUB DH,30H
INC BX
MOV DL,[BX]
SUB DL,30H
MOV CL,10
MOV AL,DH
MUL CL
ADDAL,DL
MOVDH,AL
MOV SEC,AL
POPF;出栈恢复数据
POPDX
POPCX
POPBX
POPAX
RET
INPUTENDP
;..................................................
CHECKPROC
PUSHAX
PUSH BX
CMPCH,TEMPHOR;设置定点报时
JNE CF1
CMPCL,TEMPMIN
JNE CF1
CMP DH,TEMPSEC
JEXIANG
CF1:
CMPCL,0 ;设置整点报时
JNE CF
CMPDH,0
JNECF
XIANG:
CALLOPEN