S_SET BIT P3.2 ;数字钟秒控制位
M_SET BIT P3.3 ;分钟控制位
H_SET BIT P3.4 ;小时控制位
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
TCNT EQU 34H
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
START: MOV DPTR,#TABLE
MOV HOUR,#0 ;初始化
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256 ;定时50毫秒
MOV TL0,#(65536-50000)MOD 256
MOV IE,#82H
SETB TR0
;****************************************************
;判断是否有控制键按下,是哪一个键按下
A1: LCALL DISPLAY
JNB S_SET,S1
JNB M_SET,S2
JNB H_SET,S3
LJMP A1
S1: LCALL DELAY ;去抖动
JB S_SET,A1
INC SECOND ;秒值加1
MOV A,SECOND
CJNE A,#60,J0 ;判断是否加到60秒
MOV SECOND,#0
LJMP K1
S2: LCALL DELAY
JB M_SET,A1
K1: INC MINUTE ;分钟值加1
MOV A,MINUTE
CJNE A,#60,J1 ;判断是否加到60分
MOV MINUTE,#0
LJMP K2
S3: LCALL DELAY
JB H_SET,A1
K2: INC HOUR ;小时值加1
MOV A,HOUR
CJNE A,#24,J2 ;判断是否加到24小时
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
LJMP A1
;****************************************************
;等待按键抬起
J0: JB S_SET,A1
LCALL DISPLAY
SJMP J0
J1: JB M_SET,A1
LCALL DISPLAY
SJMP J1
J2: JB H_SET,A1
LCALL DISPLAY
SJMP J2
;***********************************************
;定时器中断服务程序,对秒,分钟和小时的计数
INT_T0: MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
INC TCNT
MOV A,TCNT
CJNE A,#40,RETUNE ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#25,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;******************************************
;显示控制子程序
DISPLAY: MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.6
MOV A,B
CLR P2.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.7
CLR P2.5
MOV P0,#40H
LCALL DELAY
SETB P2.5
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.3
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.4
CLR P2.2
MOV P0,#40H
LCALL DELAY
SETB P2.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P2.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.0
MOV A,B
CLR P2.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SETB P2.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
运行过~~!!!
一般可以用单片机内部时钟以及时钟芯片来做。<口口:二五三一
二六三期二六>有问
题
可
找
我。