;;;
//平年的每月天数表 MONTHS: END
DB 31D,28D,31D,30D,31D,30D,31D,31D,30D,31D,30D,31D
MOV MONTH,#2 MOV DAY,#14
SETB SOUND_ON ;开声音 RET
4.2 主时钟设置模块:
4.2.1 主时钟设置模块代码:
;*********************************主时钟设置模块*******************************************; ;***外部接口:SET_TIME ;*** 参数:无 ;*** 日期:2012/2/20 NAME SETTING_CLOCK
EXTRN CODE (DISP,GET_KEY,CONVERT,BEEP) PUBLIC SET_TIME
SETTING_CLOCK_SEG SEGMENT CODE RSEG SETTING_CLOCK_SEG
HOUR_TP EQU 2AH MIN_TP EQU 2BH SEC_TP EQU 2CH HOUR EQU 36H ;小时 MIN EQU 37H ;分钟 SEC EQU 38H ;秒 VAR_HOUR EQU 40H VAR_MIN EQU 41H VAR_SEC EQU 42H ;;;设置时间 SET_TIME:
;CLR TR0 ;时间停止(定时器暂停) MOV HOUR_TP,HOUR MOV MIN_TP,MIN MOV SEC_TP,SEC CJNE A,#0,TO_9 LJMP NO_KEY
L0: LCALL GET_KEY
TO_9:
CJNE A,#9,TO_13 LCALL BEEP ;SETB TR0 RET
CJNE A,#13,TO_10 CLR TR0
MOV HOUR,HOUR_TP MOV MIN,MIN_TP MOV SEC,SEC_TP LCALL BEEP SETB TR0 RET
CJNE A,#10,TO_14 INC HOUR_TP MOV A,HOUR_TP
CJNE A,#24,SHOW_SET_TIME MOV HOUR_TP,#0 LCALL BEEP
MOV VAR_HOUR,HOUR_TP MOV VAR_MIN,MIN_TP MOV VAR_SEC,SEC_TP LCALL CONVERT LCALL DISP JMP L0
CJNE A,#14,TO_11 DEC HOUR_TP MOV A,HOUR_TP
CJNE A,#-1,SHOW_SET_TIME MOV HOUR_TP,#23 JMP SHOW_SET_TIME CJNE A,#11,TO_15 INC MIN_TP MOV A,MIN_TP
CJNE A,#60,SHOW_SET_TIME MOV MIN_TP,#0 LJMP SHOW_SET_TIME CJNE A,#15,TO_12
TO_13:
TO_10:
SHOW_SET_TIME: NO_KEY:
TO_14:
TO_11:
TO_15:
;;; END
DEC MIN_TP MOV A,MIN_TP
CJNE A,#-1,SHOW_SET_TIME MOV MIN_TP,#59 LJMP SHOW_SET_TIME CJNE A,#12,TO_16 INC SEC_TP MOV A,SEC_TP
CJNE A,#60,SHOW_SET_TIME MOV SEC_TP,#0 LJMP SHOW_SET_TIME CJNE A,#16,NO_KEY DEC SEC_TP MOV A,SEC_TP
CJNE A,#-1,SHOW_SET_TIME MOV SEC_TP,#59 LJMP SHOW_SET_TIME
TO_12:
TO_16:
4.3 闹钟功能模块
4.3.1 闹钟功能模块代码:
;**************************************闹钟功能模块***************************************; ;***外部接口:SET_ALARM_TIME ;*** 参数:无 ;*** 日期:2012/2/21
NAME SETTING_ALARM_CLOCK PUBLIC SET_ALARM_TIME
EXTRN CODE (DISP,CONVERT,BEEP,GET_KEY) S_A_CLOCK_SEG SEGMENT CODE RSEG S_A_CLOCK_SEG
HOUR_TP EQU 2AH MIN_TP EQU 2BH SEC_TP EQU 2CH
ALARM EQU 20H.0 ;闹钟设置标志 HOUR EQU 36H ;小时 MIN EQU 37H ;分钟 SEC EQU 38H ;秒 HOUR_ALARM EQU 3AH MIN_ALARM EQU 3BH
SEC_ALARM EQU 4BH VAR_HOUR EQU 40H VAR_MIN EQU 41H VAR_SEC EQU 42H ;;;设置闹钟时间 SET_ALARM_TIME: N0:
LCALL GET_KEY CJNE A,#0,TO_10 LJMP NO_KEY
;MOV VAR_HOUR,HOUR_ALARM ;MOV VAR_MIN,MIN_TP ; MOV VAR_SEC,SEC_ALARM
;LCALL CONVERT ;传入参数后等效于 CONVERTA
;LCALL CONVERTA ;加载闹钟数据 ;LCALL DISP
MOV HOUR_TP,HOUR_ALARM MOV MIN_TP,MIN_ALARM MOV SEC_TP,SEC_ALARM
N00:LJMP N0 TO_10:
CJNE A,#10,TO_14 INC HOUR_TP MOV A,HOUR_TP
CJNE A,#24,SHOW_ALARM_TIME MOV HOUR_TP,#0 LCALL BEEP
MOV VAR_HOUR,HOUR_TP MOV VAR_MIN,MIN_TP MOV VAR_SEC,SEC_TP
LCALL CONVERT ;传入参数后等效于 CONVERTA LCALL DISP JMP N0
CJNE A,#14,TO_11 DEC HOUR_TP MOV A,HOUR_TP
CJNE A,#-1,SHOW_ALARM_TIME MOV HOUR_TP,#23 JMP SHOW_ALARM_TIME
SHOW_ALARM_TIME: NO_KEY:
TO_14:
TO_11:
CJNE A,#11,TO_15 INC MIN_TP MOV A,MIN_TP
CJNE A,#60,SHOW_ALARM_TIME MOV MIN_TP,#0
LJMP SHOW_ALARM_TIME CJNE A,#15,TO_12 DEC MIN_TP MOV A,MIN_TP
CJNE A,#-1,SHOW_ALARM_TIME MOV MIN_TP,#59
LJMP SHOW_ALARM_TIME CJNE A,#12,TO_16 INC SEC_TP MOV A,SEC_TP
CJNE A,#60,SHOW_ALARM_TIME MOV SEC_TP,#0
LJMP SHOW_ALARM_TIME CJNE A,#16,TO_9 DEC SEC_TP MOV A,SEC_TP
CJNE A,#-1,SHOW_ALARM_TIME MOV SEC_TP,#59
LJMP SHOW_ALARM_TIME CJNE A,#9,TO_13 LCALL BEEP RET
CJNE A,#13,N00
MOV HOUR_ALARM,HOUR_TP MOV MIN_ALARM,MIN_TP MOV SEC_ALARM,SEC_TP LCALL BEEP RET
/* MOV VAR_HOUR,HOUR MOV VAR_MIN,MIN MOV VAR_SEC,SEC
LCALL CONVERT ;加载当前时间数据,设置闹钟时,原来的计时仍在继续,现在让它显示出来 RET */
TO_15:
TO_12:
TO_16:
TO_9:
TO_13: