微机课程设计之数字时钟程序.docx
《微机课程设计之数字时钟程序.docx》由会员分享,可在线阅读,更多相关《微机课程设计之数字时钟程序.docx(12页珍藏版)》请在冰豆网上搜索。
微机课程设计之数字时钟程序
HappyBirthdayToYou
一、运行界面
二、 程序
;***********************************定义数据段*********************************
DATASEGMENT
DATEDIS DB' 0000-00-00','$' ;日期显示
TIMEDIS DB'00:
00:
00','$' ;时间显示
LIGHT_ON DB'LIGHT_ON','$' ;模拟灯开
LIGHT_OFFDB'LIGHT_OFF','$' ;模拟灯关
SET_FAIL DB'SETFAIL!
','$' ;更改响铃、广播失败
SET_SUCCE_RADDB'CHANGEVADIOSUCCESS(45M)!
','$' ;更改广播成功
SET_SUCCE_RIN DB'CHANGERING SUCCESS(10M)!
','$' ;更改响铃成功
SET_RAD0 DB' ','$'
SET_RIN0 DB' ','$'
TIME_RINGDB 07H,08H,09H,0AH,0BH,0CH,0DH;7~20点会整点或过5分打铃
DB 0EH,0FH,10H,11H,12H,13H,14H ;10:
30会广播(默认)
FLAGDB00H ;控制一分之内只响铃一次(不控制会一直响)
NOW_GUDB00H ;区分手动广播和默认广播
RING_RECOVERDB00H;恢复打铃时间(5分钟)
RADIO_RECOVERDB00H;恢复广播时间
TIME_SET DB 05H ;默认响铃分(5分钟)
TIME_TWO DB 0AH ;手动设置打铃(10分钟)
TIME_SET0 DB 00H ;默认响铃(0分钟)
TIME_MUS DB 1EH ;默认广播(30分钟)
TIME_MUSTWODB45;手动设置广播(45分钟)
MUS_FREG DW262,262,294,262,349 ;广播频率表
DW330,262,262,294,262
DW392,349,262,262,523
DW440,349,262,262,466
DW466,440,262,392,349,-1
MUS_FREG1 DW393,393,393,294,-2 ;响铃频率表
DW495,495,495,393,-2
DW393,495,589,589,-2
DW525,495,441,-2
DW441,495,525,-2,525,-2
DW495,441,495,393,-2
DW393,495,441,294,-2
DW371,441,393,-1
STR1 DB'*********************Functiondeclaration*****************',0DH,0AH,'$'
STR2 DB' OpenLight CloseLight Radio Ring ',0DH,0AH,'$'
STR3 DB' ChangeRadio ChangeRing ',0DH,0AH,'$'
STR4 DB'**********************************************************',0DH,0AH,'$'
STR5 DB' ',0DH,0AH,'$'
STR6 DB' ',0DH,0AH,'$';灯、时间的状态显示处
STR7 DB' ',0DH,0AH,'$' ;修改后的状态显示处
STR8 DB'**********************************************************',0DH,0AH,'$'
DATAENDS
;********************************定义堆栈段***********************************
STACKSEGMENT
STA DW255DUP(?
)
TOPEQU$-STA;50
STACKENDS
;**********************************数据段*************************************
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MAIN PROCFAR
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX ;各段初始化
CLI
MOVAL,1CH
MOVAH,35H
INT21H
PUSHES
PUSHBX
PUSHDS
MOVDX,OFFSETCLOCK
MOVAX,SEGCLOCK
MOVDS,AX
MOVAX,251CH
INT21H ;写入新的中断向量(CLOCK)
POPDS
CALLINITIAL ;屏面初始化
STI
SHOW MACROSTR ;显示字符串函数
LEADX,STR
MOVAH,9
INT21H
ENDM
SHOWH:
CALLDELAY_SOFT ;软件延时函数
MOVAH,0BH
INT21H ;读键盘状态
CMPAL,00H
JZCONTINU ;无键按下继续等待
MOVAH,08H
INT21H ;读取键值
CMPAL,4FH ;若是O就开灯
JZOPEN_LIGHT
CMPAL,43H ;若是C就关灯
JZ CLOSE_LIGHT
CMPAL,4DH ;若是M就开音乐广播(手动控制)
JZ PLAY_MUSIC
CMPAL,52H ;若是R就打铃(手动控制)
JZRING
CMPAL,56H ;若是V就修改广播时间
JZSET_VODZ
CMPAL,54H ;若果是T就修改打铃时间
JZ SET_TIME
CMPAL,1BH ;退出键ESC
JZEXIT1
JMPSHOWH
CONTINU:
JMPSHOWH
OPEN_LIGHT:
MOVDH,06H ;开灯
MOVDL,03H
MOVBX,00H
MOVAH,02H
INT10H
SHOWLIGHT_ON
JMPSHOWH
CLOSE_LIGHT:
MOVDH,06H ;关灯
MOVDL,03H
MOVBX,00H
MOVAH,02H
INT10H
SHOWLIGHT_OFF
JMPSHOWH
PLAY_MUSIC:
MOV AL,01H ;播放广播
MOV NOW_GU,AL
CALL MUSIC
MOVAL,00H
MOV NOW_GU,AL
JMPSHOWH
RING:
CALLSOUND;打铃
JMPSHOWH
SET_VODZ:
CMPRADIO_RECOVER,00H;恢复广播时间
JZSETVODZ
MOV AL,00H
MOVRADIO_RECOVER,AL
MOVDH,09H
MOVDL,0FH
MOVBX,00H
MOVAH,02H
INT10H
MOVAL,30
MOVTIME_MUS,AL
SHOWSET_RAD0
JMPSHOWH
EXIT1:
JMPEXIT
SET_TIME:
CMPRING_RECOVER,00H;恢复打铃时间
JZSETTIME
MOVAL,00H
MOVRING_RECOVER,AL
MOVDH,08H
MOVDL,0FH
MOVBX,00H
MOVAH,02H
INT10H
MOVAL,05H
MOVTIME_SET,AL
SHOWSET_RIN0
JMPSHOWH
SETTIME:
MOVAL,01H ;设置打铃时间
MOVRING_RECOVER,AL
MOVDH,08H
MOVDL,0FH
MOVBX,00H
MOVAH,02H
INT10H
CALLSET_TM
JMPSHOWH
SETVODZ:
MOVAL,01H ;设置广播时间
MOVRADIO_RECOVER,AL
MOVDH,09H
MOVDL,0FH
MOVBX,00H
MOVAH,02H
INT10H
CALL SET_VOD
JMPSHOWH
EXIT:
POPBX ;退出程序
POPES
MOVDX,BX
MOVBX,ES
MOVDS,BX
MOVAX,251CH
INT21H
MOVAH,4CH
INT21H
RET
MAINENDP
INITIALPROCNEAR ;初始化程序
SHOWSTR1
SHOWSTR2
SHOWSTR3
SHOWSTR4
SHOWSTR5
SHOWSTR6
SHOWSTR7
SHOWSTR8
RET
INITIALENDP
;*********************************修改打铃、广播时间************
SET_VOD PROCNEAR
CLI
MOVAL,TIME_MUSTWO
MOVTIME_MUS,AL
SHOWSET_SUCCE_RAD
STI
RET
SET_VOD ENDP
SET_TM PROCNEAR
CLI
MOVAL,TIME_TWO
MOVTIME_SET,AL
SHOWSET_SUCCE_RIN
STI
RET
SET_TM ENDP
;**************************软件延时程序************************
DELAY_SOFT PROCNEAR
PUSHCX
MOVCX,0FFFFH
CYCLE:
MOVAL,AH
MOVBX,0FFFFH
CYCLE1:
MOVAL,AH
DECBX
CMPBX,0
JNZ CYCLE1
LOOPCYCLE
POPCX
RET
DELAY_SOFT ENDP
;***********************中断服务程序***************************
CLOCKPROCNEAR
PUSHDS
MOVAX,DATA
MOVDS,AX
CALLDATEDISPLAY
CALLTIMEDISPLAY
POPDS
IRET
CLOCKENDP
;************************中断程序完******************************
;******************************年份显示子程序********************
DATEDISPLAYPROCNEAR
PUSHSI
MOVAH,2AH ;取当前系统日期
INT21H
MOVAX,CX
MOVBX,10
LEASI,DATEDIS+4
MOVCX,4
PUSHDX
TAB:
XORDX,DX
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
LOOPTAB
POPDX
MOVAL,DL
XORAH,AH
DIVBL