zaythf_gem90
Newbie level 1
I try to design a digital clock using LED. After every 1 hour a message will come out at LCD.
I really appreciate your help!!
LEDHOUR EQU 0FFC3H ; CLOCK ON LED
LEDMIN EQU 0FFC2H
LEDSEC EQU 0FFC1H
LCDWIR EQU 0FFE0H
LCDWDR EQU 0FFE1H
LCDRIR EQU 0FFE3H
LCDRDR EQU 0FFE3H
VSEC EQU 30H; CLOCK VARIABLE
VMIN EQU 31H
VHOUR EQU 32H
INST EQU 20H ; LCD VARIABLE
DATA EQU 21H
LROW EQU 22H
LCOL EQU 23H
NUMFONT EQU 24H
FDPL EQU 25H
FDPH EQU 26H
CLEAR EQU 01H
CUR_HOME EQU 02H
ENTRY2 EQU 06H
DCB6 EQU 0EH
FUN5 EQU 38H
LINE_1 EQU 80H
LINE_2 EQU 0C0H
ORG 8000H
MOV VSEC, #0 ; CLOCK INITIAL
MOV VMIN, #0
MOV VHOUR, #0
CALL LCD_MESG
RUN: MOV R2, #0008H
DELAY3: MOV R1, #00FFH
DELAY2: MOV R0, #00E0H
DELAY1: DJNZ R0, DELAY1
DJNZ R1, DELAY2
DJNZ R2, DELAY3
MOV R3, #147
REPEAT: MOV R1, #1
LCALL VALENCE
DJNZ R3, REPEAT
MOV R1, #1
LCALL VALENCE
CALL UPDATE
SJMP RUN
UPDATE: MOV R0, #VSEC
CJNE @R0, #59H, SEC
MOV @R0, #0
INC R0
MUL AB
SJMP MINCHECK
SEC: MOV R1, #7
LCALL VALENCE
SJMP ADDONE
MINCHECK: CJNE @R0, #59H, MIN
MOV @R0, #0
INC R0
MUL AB
SJMP HOURCHECK
MIN: MOV R1, #2
LCALL VALENCE
SJMP ADDONE
HOURCHECK: CJNE @R0, #23H, HOUR
MOV @R0, #0
INC R0
MUL AB
JMP RETPOINT
HOUR: JMP DISFONT
JMP ADDONE
RETPOINT: CALL DISPLAY
RET
ADDONE: MOV A, @R0
ADD A, #1
DA A
MOV @R0, A
SJMP RETPOINT
VALENCE: DJNZ R1, $
NOP
RET
DISPLAY: MOV DPTR,#LEDSEC ; SEC
MOV A,VSEC
MOVX @DPTR,A
MOV DPTR,#LEDMIN ; MIN
MOV A, VMIN
MOVX @DPTR,A
MOV DPTR,#LEDHOUR ; HOUR
MOV A,VHOUR
MOVX @DPTR,A
RET
LCD_INIT: MOV INST, #FUN5
CALL INSTWR
MOV INST, #DCB6
CALL INSTWR
MOV INST, #CLEAR
CALL INSTWR
MOV INST, #ENTRY2
CALL INSTWR
LCD_MESG: MOV LROW, #01H
MOV LCOL, #02H
CALL CUR_MOV
MOV DPTR, #MESSAGE1
MOV FDPL, DPL
MOV FDPH, DPH
MOV NUMFONT, #0EH
CALL DISFONT
MOV LROW, #02H
MOV LCOL, #02H
CALL CUR_MOV
MOV DPTR, #MESSAGE2
MOV FDPL, DPL
MOV FDPH, DPH
MOV NUMFONT, #0EH
CALL DISFONT
DISFONT: MOV R5, #00H
FLOOP: MOV DPL, FDPL
MOV DPH, FDPH
MOV A, R5
MOVC A, @A+DPTR
MOV DATA, A
CALL DATAWR
INC R5
MOV A, R5
CJNE A, NUMFONT, FLOOP
RET
CUR_MOV: MOV A, LROW
CJNE A, #01H, NEXT
MOV A, #LINE_1
ADD A, LCOL
MOV INST, A
CALL INSTWR
JMP RET_POINT
NEXT: CJNE A, #02H, RET_POINT
MOV A, #LINE_2
ADD A, LCOL
MOV INST, A
CALL INSTWR
RET_POINT: RET
INSTWR: CALL INSTRD
MOV DPTR, #LCDWIR
MOV A, INST
MOVX @DPTR, A
RET
DATAWR: CALL INSTRD
MOV DPTR, #LCDWDR
MOV A, DATA
MOVX @DPTR, A
RET
INSTRD: MOV DPTR, #LCDRIR
MOVX A, @DPTR
JB ACC.7, INSTRD
RET
MESSAGE1: DB 'H','A','V','E',' '
DB 'A',' ','N','I','C'
DB 'E',' ','D','A','Y'
MESSAGE2: DB ' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' '
DELAY: MOV R7, #03H
END
I really appreciate your help!!
LEDHOUR EQU 0FFC3H ; CLOCK ON LED
LEDMIN EQU 0FFC2H
LEDSEC EQU 0FFC1H
LCDWIR EQU 0FFE0H
LCDWDR EQU 0FFE1H
LCDRIR EQU 0FFE3H
LCDRDR EQU 0FFE3H
VSEC EQU 30H; CLOCK VARIABLE
VMIN EQU 31H
VHOUR EQU 32H
INST EQU 20H ; LCD VARIABLE
DATA EQU 21H
LROW EQU 22H
LCOL EQU 23H
NUMFONT EQU 24H
FDPL EQU 25H
FDPH EQU 26H
CLEAR EQU 01H
CUR_HOME EQU 02H
ENTRY2 EQU 06H
DCB6 EQU 0EH
FUN5 EQU 38H
LINE_1 EQU 80H
LINE_2 EQU 0C0H
ORG 8000H
MOV VSEC, #0 ; CLOCK INITIAL
MOV VMIN, #0
MOV VHOUR, #0
CALL LCD_MESG
RUN: MOV R2, #0008H
DELAY3: MOV R1, #00FFH
DELAY2: MOV R0, #00E0H
DELAY1: DJNZ R0, DELAY1
DJNZ R1, DELAY2
DJNZ R2, DELAY3
MOV R3, #147
REPEAT: MOV R1, #1
LCALL VALENCE
DJNZ R3, REPEAT
MOV R1, #1
LCALL VALENCE
CALL UPDATE
SJMP RUN
UPDATE: MOV R0, #VSEC
CJNE @R0, #59H, SEC
MOV @R0, #0
INC R0
MUL AB
SJMP MINCHECK
SEC: MOV R1, #7
LCALL VALENCE
SJMP ADDONE
MINCHECK: CJNE @R0, #59H, MIN
MOV @R0, #0
INC R0
MUL AB
SJMP HOURCHECK
MIN: MOV R1, #2
LCALL VALENCE
SJMP ADDONE
HOURCHECK: CJNE @R0, #23H, HOUR
MOV @R0, #0
INC R0
MUL AB
JMP RETPOINT
HOUR: JMP DISFONT
JMP ADDONE
RETPOINT: CALL DISPLAY
RET
ADDONE: MOV A, @R0
ADD A, #1
DA A
MOV @R0, A
SJMP RETPOINT
VALENCE: DJNZ R1, $
NOP
RET
DISPLAY: MOV DPTR,#LEDSEC ; SEC
MOV A,VSEC
MOVX @DPTR,A
MOV DPTR,#LEDMIN ; MIN
MOV A, VMIN
MOVX @DPTR,A
MOV DPTR,#LEDHOUR ; HOUR
MOV A,VHOUR
MOVX @DPTR,A
RET
LCD_INIT: MOV INST, #FUN5
CALL INSTWR
MOV INST, #DCB6
CALL INSTWR
MOV INST, #CLEAR
CALL INSTWR
MOV INST, #ENTRY2
CALL INSTWR
LCD_MESG: MOV LROW, #01H
MOV LCOL, #02H
CALL CUR_MOV
MOV DPTR, #MESSAGE1
MOV FDPL, DPL
MOV FDPH, DPH
MOV NUMFONT, #0EH
CALL DISFONT
MOV LROW, #02H
MOV LCOL, #02H
CALL CUR_MOV
MOV DPTR, #MESSAGE2
MOV FDPL, DPL
MOV FDPH, DPH
MOV NUMFONT, #0EH
CALL DISFONT
DISFONT: MOV R5, #00H
FLOOP: MOV DPL, FDPL
MOV DPH, FDPH
MOV A, R5
MOVC A, @A+DPTR
MOV DATA, A
CALL DATAWR
INC R5
MOV A, R5
CJNE A, NUMFONT, FLOOP
RET
CUR_MOV: MOV A, LROW
CJNE A, #01H, NEXT
MOV A, #LINE_1
ADD A, LCOL
MOV INST, A
CALL INSTWR
JMP RET_POINT
NEXT: CJNE A, #02H, RET_POINT
MOV A, #LINE_2
ADD A, LCOL
MOV INST, A
CALL INSTWR
RET_POINT: RET
INSTWR: CALL INSTRD
MOV DPTR, #LCDWIR
MOV A, INST
MOVX @DPTR, A
RET
DATAWR: CALL INSTRD
MOV DPTR, #LCDWDR
MOV A, DATA
MOVX @DPTR, A
RET
INSTRD: MOV DPTR, #LCDRIR
MOVX A, @DPTR
JB ACC.7, INSTRD
RET
MESSAGE1: DB 'H','A','V','E',' '
DB 'A',' ','N','I','C'
DB 'E',' ','D','A','Y'
MESSAGE2: DB ' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' '
DB ' ',' ',' ',' ',' '
DELAY: MOV R7, #03H
END