|
各位大侠,我仿真的电子钟的数码管不能同时显示,还望指点一下:
仿真图:
程序:
S_SET BIT P1.0 ;数字钟秒控制位
M_SET BIT P1.1 ;分钟控制位
H_SET BIT P1.2 ;小时控制位
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,#20,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,#24,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 P0.1
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.1
MOV A, B
CLR P0.0
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.0
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P0.3
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.3
MOV A,B
CLR P0.2
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.2
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P0.5
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.5
MOV A,B
CLR P0.4
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY
SETB P0.4
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY: MOV R1,#150
LOOP: MOV R6,#200
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
END
我觉得是显示程序有问题,是数码管动态显示,但不知道该怎么修改。。。
|
|