用的是51系列的单片机,说一下,MARK标志位其关键作用。
下面是仿真图
LED0 EQU P1
LED2 EQU P2
LED1 EQU P0
MARK BIT 00H
MARK1 BIT 01H
TIME EQU 30H;时刻缓冲区
SHI EQU 31H ;时长数据缓冲区!
KEY EQU P3.2
KEY1 EQU P3.3
CTH EQU (65536-50000)/256
CTL EQU (65536-50000) MOD 256
ORG 0000H
JMP START
ORG 0003H
JMP INT_0
ORG 000BH
JMP TIME0
ORG 0030H
START: MOV P1,#00H
MOV P0,#0FFH
MOV P2,#0FFH
MOV DPTR,#ABC
MOV SP,#5FH
MOV SHI,#20
MOV R0,SHI
MOV R7,#20
CLR MARK
CLR MARK1
MOV TMOD,#01H
MOV TH0,#CTH;初始指针
MOV TL0,#CTL
SETB EA
SETB IT0
SETB EX0
SETB ET0
SETB TR0
MOV TIME,R0
CALL DISPLAY
MAIN: MOV LED0,#21H;北,红灯亮
CJNE R0,#3,MAIN
MOV SHI,#04
NEXT: MOV R6,#3
A1: MOV LED0,#01H
CALL DELAY_500MS
MOV LED0,#21H
CALL DELAY_500MS
DJNZ R6,A1
S1: JBC MARK,A2
SJMP S1
A2: MOV LED0,#11H; BEI HUANG DENG LIANG
MOV SHI,#20
JBC MARK,MAIN1
SJMP A2
MAIN1: MOV LED0,#0CH ;XI HONG DENG LIANG
CJNE R0,#3,MAIN1
MOV SHI,#04
NEXT1: MOV R6,#3
A3: MOV LED0,#08H
CALL DELAY_500MS
MOV LED0,#0CH
CALL DELAY_500MS
DJNZ R6,A3
S2: JBC MARK,A4
SJMP S2
A4: MOV LED0,#0AH
MOV SHI,#20
JBC MARK,MAIN
SJMP A4
DELAY_500MS:
MOV R5,#20
K1: MOV R4,#50
K2: MOV R3,#250
DJNZ R3,$
DJNZ R4,K2
DJNZ R5,K1
RET
DISPLAY:MOV A,TIME
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV LED2,A
MOV A,B
MOVC A,@A+DPTR
MOV LED1,A
RET
ABC: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
INT_0: PUSH ACC
PUSH PSW
SETB RS1
SETB RS0
MOV R5,#70
K4: MOV R4,#250
DJNZ R4,$
DJNZ R5,K4
JB KEY,ITT_2
MOV TIME,#20
CALL DISPLAY
ITT_1: MOV LED0,#00010010B
CALL DELAY_500MS
MOV LED0,#00H
JNB KEY,ITT_2
CALL DELAY_500MS
JB KEY,ITT_1
ITT_2: JNB KEY ,$
POP PSW
POP ACC
RETI
TIME0: PUSH ACC
PUSH PSW
MOV TH0,#CTH;初始指针
MOV TL0,#CTL
DJNZ R7,TIME1
MOV R7,#20
DJNZ R0,TIME2
SETB MARK
MOV R0,SHI
TIME2: MOV TIME,R0
CALL DISPLAY
TIME1: POP PSW
POP ACC
RETI
END