第一题的程序给你,
TLOW EQU 00H
THIGH EQU 0EEH
COUN0 EQU 200 ;5ms * 200 = 1S
HOUR EQU 3FH ;小时
MINUTE EQU 3EH ;分钟
SECOND EQU 3DH ;秒单元
COUN_WEI EQU 3CH ;显示位
D_TIME EQU 3BH ;
DISP_BUF EQU 50H ;8字节缓存
LED_WEI EQU P3 ;数码管位选
LED_DAT EQU P0 ;数码管数据
C__ EQU 22 ;"-";22
C_DIE EQU 24 ;"熄灭";24
;--------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0BH
JMP T0_INT
;--------------------------------------------------
MAIN:
MOV SP,#60H
MOV A,#00H
MOV D_TIME,A
MOV SECOND,#59H;bcd
MOV MINUTE,#59H
MOV HOUR,#23H
;显存初始化
MOV R5,#08H
MOV R0,#DISP_BUF
CLR A
INTDISPBUF:
MOV @R0,A
INC R0
INC A
DJNZ R5,INTDISPBUF
CALL INIT_TIMER
SETB TR0
loop_test:
CALL SHOW_TIME
JMP loop_test
;;-------------------------
;;显示子程序
;;使用寄存器组:第2组寄存器
;;出口:
;;入口:
;;--------------------------
DISPLAY:
PUSH ACC
PUSH PSW
CLR PSW.3 ;RS1、RS0(PSW.4、PSW.3): 1 0
SETB PSW.4
MOV A,COUN_WEI
CJMP0:
CJNE A,#0,CJMP1
JMP DISP_WEI1
CJMP1:
CJNE A,#1,CJMP2
JMP DISP_WEI2
CJMP2:
CJNE A,#2,CJMP3
JMP DISP_WEI3
CJMP3:
CJNE A,#3,CJMP4
JMP DISP_WEI4
CJMP4:
CJNE A,#4,CJMP5
JMP DISP_WEI5
CJMP5:
CJNE A,#5,CJMP6
JMP DISP_WEI6
CJMP6:
CJNE A,#6,CJMP7
JMP DISP_WEI7
CJMP7:
CJNE A,#7,DISP_WEI0
JMP DISP_WEI8
DISP_WEI0:
MOV COUN_WEI,#0
DISP_WEI1:
MOV LED_WEI,#01H ;P3
JMP DISP_WEI_END
DISP_WEI2:
MOV LED_WEI,#02H ;P3
JMP DISP_WEI_END
DISP_WEI3:
MOV LED_WEI,#04H ;P3
JMP DISP_WEI_END
DISP_WEI4:
MOV LED_WEI,#08H ;P3
JMP DISP_WEI_END
DISP_WEI5:
MOV LED_WEI,#10H ;P3
JMP DISP_WEI_END
DISP_WEI6:
MOV LED_WEI,#20H ;P3
JMP DISP_WEI_END
DISP_WEI7:
MOV LED_WEI,#40H ;P3
JMP DISP_WEI_END
DISP_WEI8:
MOV LED_WEI,#80H ;P3
; JMP DISP_WEI_END
DISP_WEI_END:
MOV R0,#DISP_BUF
MOV A,COUN_WEI
ADD A,R0
MOV R0,A
MOV A,@R0
MOV DPTR,#LED_TAB
MOVC A,@A+DPTR
MOV LED_DAT,A
INC COUN_WEI
POP PSW
POP ACC
RET
LED_TAB:
DB 0C0H ;"0"
DB 0F9H ;"1"
DB 0A4H ;"2"
DB 0B0H ;"3"
DB 99H ;"4"
DB 92H ;"5"
DB 82H ;"6"
DB 0F8H ;"7"
DB 80H ;"8"
DB 90H ;"9"
DB 88H ;"A"
DB 83H ;"B"
DB 0C6H ;"C"
DB 0A1H ;"D"
DB 86H ;"E"
DB 8EH ;"F";15
DB 89H ;"H";16
DB 0C7H ;"L";17
DB 0C8H ;"n";18;11001000
DB 0C1H ;"u";19
DB 8CH ;"P";20
DB 0A3H ;"o";21
DB 0BFH ;"-";22
DB 0AFH ;"r";23
DB 0FFH ;"熄灭";24
DB 091H ;"y" ;25
DB 0FFH ;"自定义"
;;-------------------------
SHOW_TIME:
CALL SHOW_HOUR
MOV 52H,#C__;-
CALL SHOW_MINUTE
MOV 55H,#C__;-
CALL SHOW_SECOND
RET
SHOW_SECOND:
MOV A,SECOND
MOV B,A
SWAP A
ANL A,#0FH
MOV 56H,A
MOV A,B
ANL A,#0FH
MOV 57H,A
RET
SHOW_MINUTE:
MOV A,MINUTE
MOV B,A
SWAP A
ANL A,#0FH
MOV 53H,A
MOV A,B
ANL A,#0FH
MOV 54H,A
RET
SHOW_HOUR:
MOV A,HOUR
MOV B,A
SWAP A
ANL A,#0FH
MOV 50H,A
MOV A,B
ANL A,#0FH
MOV 51H,A
RET
SHOW_SECOND_DIE:
MOV 56H,#C_DIE
MOV 57H,#C_DIE
RET
SHOW_HOUR_DIE:
MOV 50H,#C_DIE
MOV 51H,#C_DIE
RET
SHOW_MINUTE_DIE:
MOV 53H,#C_DIE
MOV 54H,#C_DIE
RET
;;-------------------------
INIT_TIMER: ;初始化定时器
MOV TMOD,#01H ;设置定时器0 工作模式为模式1
MOV IE, #82H ;启用定时器0 中断产生
MOV TL0,#TLOW
MOV TH0,#THIGH
RET
;;-------------------------
T0_INT:
PUSH ACC
PUSH PSW
MOV TL0,#TLOW
MOV TH0,#THIGH
CALL DISPLAY
INC D_TIME
MOV A,D_TIME ;5ms 计数值加1
CJNE A,#COUN0,T0_INT_EXIT
MOV D_TIME,#0
MOV A,SECOND
ADD A,#01 ;秒加1
DA A
MOV SECOND,A
CJNE A,#60H,T0_INT_EXIT
MOV SECOND,#0
MOV A,MINUTE
ADD A,#01 ;分加1
DA A
MOV MINUTE,A
CJNE A,#60H,T0_INT_EXIT
MOV MINUTE,#0
MOV A,HOUR
ADD A,#01 ;时加1
DA A
MOV HOUR,A
CJNE A,#24H,T0_INT_EXIT ;是否到8秒?
MOV HOUR,#0 ;秒单元清0
T0_INT_EXIT:
POP PSW
POP ACC
RETI
;;-------------------------
END
这个不难做,但是分太少了。。。。
给我邮箱 发个万年历的程序给你看看