LCD_RS EQU P3.3 ; port setup
LCD_RW EQU P3.4
LCD_EN EQU P3.5
LCD_BUS EQU P1
NOWTIME EQU 08DH ; CURSOR SET
SUBNEXT1 EQU 0CDH
SUBNEXT2 EQU 09DH
SUBNEXT3 EQU 0DDH
ORG 0000H ; reset vector
JMP INIT
ORG 0003H ; external INT0 interrupt vector
INIT:
MOV SP,#60H ; set stack pointer
CALL DISP_LCD_INIT ; display initial view
CALL START
DISP_LCD_INIT:
CALL INIT_LCD
CALL LCD_CLS ; CLR LCD
MOV A,#081H ; START STRING
CALL WRITELCDCOMMAND
MOV DPTR,#START0
CALL LCD_PRINTSTRING
MOV A,#0C1H
CALL WRITELCDCOMMAND
MOV DPTR,#START1
CALL LCD_PRINTSTRING
MOV A,#091H
CALL WRITELCDCOMMAND
MOV DPTR,#START2
CALL LCD_PRINTSTRING
MOV A,#0D6H
CALL WRITELCDCOMMAND
MOV DPTR,#START3
CALL LCD_PRINTSTRING
CALL SDELAY
CALL SDELAY
CALL SDELAY
CALL DISP_LCD_TWINKLE
CALL DISP_LCD_TWINKLE
CALL LCD_CLS
START:
MOV A,#081H ; 1LINE DISP STRING
CALL WRITELCDCOMMAND
MOV DPTR,#STRING0
CALL LCD_PRINTSTRING
MOV A,#08AH ; CLOCK
CALL WRITELCDCOMMAND
MOV DPTR,#NOW0
CALL LCD_PRINTSTRING
MOV A,#0C0H ; 2LINE
CALL WRITELCDCOMMAND
MOV DPTR,#STRING1
CALL LCD_PRINTSTRING
MOV A,#090H ; 3LINE
CALL WRITELCDCOMMAND
MOV DPTR,#STRING2
CALL LCD_PRINTSTRING
MOV A,#0D0H ; 4LINE
CALL WRITELCDCOMMAND
MOV DPTR,#STRING3
CALL LCD_PRINTSTRING
JMP TIME_START
JMP START
JMP $
TIME_START:
MOV A,#SUBNEXT1 ; TIME1
CALL WRITELCDCOMMAND
MOV DPTR,#TIME1
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME2
CALL WRITELCDCOMMAND
MOV DPTR,#TIME2
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME3
CALL WRITELCDCOMMAND
MOV DPTR,#TIME3
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW1
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW2
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW3
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW4
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW5
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW6
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW7
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW8
MOV R0,DPH
MOV R1,DPL
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW9
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW10
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW11
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW12
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME2
CALL WRITELCDCOMMAND
MOV DPTR,#TIME2
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME3
CALL WRITELCDCOMMAND
MOV DPTR,#TIME3
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME4
CALL WRITELCDCOMMAND
MOV DPTR,#TIME4
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW13
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW14
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW15
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME3
CALL WRITELCDCOMMAND
MOV DPTR,#TIME3
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME4
CALL WRITELCDCOMMAND
MOV DPTR,#TIME4
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME5
CALL WRITELCDCOMMAND
MOV DPTR,#TIME5
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW16
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW17
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME4
CALL WRITELCDCOMMAND
MOV DPTR,#TIME4
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME5
CALL WRITELCDCOMMAND
MOV DPTR,#TIME5
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME6
CALL WRITELCDCOMMAND
MOV DPTR,#TIME6
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW18
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW19
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW20
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW21
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW22
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW23
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW24
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW25
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME5
CALL WRITELCDCOMMAND
MOV DPTR,#TIME5
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME6
CALL WRITELCDCOMMAND
MOV DPTR,#TIME6
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME7
CALL WRITELCDCOMMAND
MOV DPTR,#TIME7
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW26
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW27
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW28
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW29
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW30
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME6
CALL WRITELCDCOMMAND
MOV DPTR,#TIME6
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME7
CALL WRITELCDCOMMAND
MOV DPTR,#TIME7
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME8
CALL WRITELCDCOMMAND
MOV DPTR,#TIME8
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW31
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW32
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW33
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW34
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW35
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW36
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW37
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW38
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW39
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW40
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW41
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW42
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW43
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW44
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW45
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME7
CALL WRITELCDCOMMAND
MOV DPTR,#TIME7
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME8
CALL WRITELCDCOMMAND
MOV DPTR,#TIME8
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME9
CALL WRITELCDCOMMAND
MOV DPTR,#TIME9
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW46
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW47
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME8
CALL WRITELCDCOMMAND
MOV DPTR,#TIME8
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME9
CALL WRITELCDCOMMAND
MOV DPTR,#TIME9
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME1
CALL WRITELCDCOMMAND
MOV DPTR,#TIME1
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW48
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW49
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW50
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME9
CALL WRITELCDCOMMAND
MOV DPTR,#TIME9
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME1
CALL WRITELCDCOMMAND
MOV DPTR,#TIME1
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME2
CALL WRITELCDCOMMAND
MOV DPTR,#TIME2
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW51
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW52
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW53
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW54
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW55
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW56
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW57
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW58
CALL LCD_PRINTSTRING
CALL TDELAY
MOV A,#SUBNEXT1 ; TIME1
CALL WRITELCDCOMMAND
MOV DPTR,#TIME1
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT2 ; TIME2
CALL WRITELCDCOMMAND
MOV DPTR,#TIME2
CALL LCD_PRINTSTRING
MOV A,#SUBNEXT3 ; TIME3
CALL WRITELCDCOMMAND
MOV DPTR,#TIME3
CALL LCD_PRINTSTRING
MOV A,#NOWTIME
CALL WRITELCDCOMMAND
MOV DPTR,#NOW59
CALL LCD_PRINTSTRING
CALL TDELAY
INIT_LCD:
MOV A,#38H ; 8-BIT, 4-LINE, 5x7-DOT
CALL WRITELCDCOMMAND
MOV A,#0EH ; DISPLAY ON, CURSOR ON,BLINK ON
CALL WRITELCDCOMMAND
MOV A,#06H ; INCREASE MODE, NO SHIFT
CALL WRITELCDCOMMAND
RET
LCD_CLS:
MOV A,#01H ; CLEAR DISPLAY, DDRAM<=0, CURSOR HOME
CALL WRITELCDCOMMAND
RET
LCD_PRINTSTRING: ; DISPLAY STRING
PUSH ACC
LCD_PRINTSTRINGLOOP:
CLR A
MOVC A,@A+DPTR
JZ LCD_PRINTSTRINGEND
CALL WRITELCDDATA
INC DPTR
JMP LCD_PRINTSTRINGLOOP
LCD_PRINTSTRINGEND:
POP ACC
RET
WRITELCDDATA: ; SELECT DR & DISPLAY CHARACTER
CALL CHECK_LCDBUSY
SETB LCD_RS
CLR LCD_RW
SETB LCD_EN
MOV LCD_BUS,A
CLR LCD_EN
SETB LCD_RW
SETB LCD_RS
RET
WRITELCDCOMMAND: ;SELECT IR & SET INSTRUCTION
CALL CHECK_LCDBUSY
CLR LCD_RS
CLR LCD_RW
SETB LCD_EN
MOV LCD_BUS,A
CLR LCD_EN
SETB LCD_RW
SETB LCD_RS
RET
READLCDCOMMAND: ; READ BUSYFLAG & ADDRESS COUNTER
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
MOV A,LCD_BUS
CLR LCD_EN
SETB LCD_RW
SETB LCD_RS
RET
CHECK_LCDBUSY: ; CHECK BUSYFLAG & WAIT UNTIL BUSYFLAG=0
CALL DELAY
PUSH ACC
CHECK_LCDBUSYLOOP:
CALL READLCDCOMMAND
JB ACC.7,CHECK_LCDBUSYLOOP
POP ACC
RET
DISP_LCD_TWINKLE:
MOV R0,#03H
DISP_LCD_TWINKLELOOP:
MOV A,#09H
CALL WRITELCDCOMMAND
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOV A,#0EH
CALL WRITELCDCOMMAND
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
DJNZ R0,DISP_LCD_TWINKLELOOP
RET
NOW_TIME:
MOV R0,#60
MOV A,#08DH
CALL WRITELCDCOMMAND
MOV DPTR,#NOW1
NOW_TIMELOOP:
CALL LCD_PRINTSTRING
INC DPTR
DJNZ R0,NOW_TIMELOOP
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
RET
DELAY:
MOV R2,#2FH
DELAY1:
MOV R3,#0FFH
DJNZ R3,$
DJNZ R2,DELAY1
RET
SDELAY:
MOV R0,#0FFH
SDELAY1:
MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,SDELAY1
RET
;TIMER SET
MOV TMOD,#01H
MOV TH0,#3BH
MOV TL0,#5CH
SETB TR0
TDELAY:
MOV R0,#0FFH
TDELAY1:
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,TDELAY1
RET
;NOW TIME, SUBWAY TIME, STRING
STRING0 DB 'NOW',0
STRING1 DB 'Next Subway',0
STRING2 DB 'Next Subway',0
STRING3 DB 'Next Subway',0
TIME1 DB '12',0
TIME2 DB '15',0
TIME3 DB '17',0
TIME4 DB '25',0
TIME5 DB '30',0
TIME6 DB '45',0
TIME7 DB '47',0
TIME8 DB '50',0
TIME9 DB '58',0
NOW0 DB '09:00',0
NOW1 DB '01',0
NOW2 DB '02',0
NOW3 DB '03',0
NOW4 DB '04',0
NOW5 DB '05',0
NOW6 DB '06',0
NOW7 DB '07',0
NOW8 DB '08',0
NOW9 DB '09',0
NOW10 DB '10',0
NOW11 DB '11',0
NOW12 DB '12',0
NOW13 DB '13',0
NOW14 DB '14',0
NOW15 DB '15',0
NOW16 DB '16',0
NOW17 DB '17',0
NOW18 DB '18',0
NOW19 DB '19',0
NOW20 DB '20',0
NOW21 DB '21',0
NOW22 DB '22',0
NOW23 DB '23',0
NOW24 DB '24',0
NOW25 DB '25',0
NOW26 DB '26',0
NOW27 DB '27',0
NOW28 DB '28',0
NOW29 DB '29',0
NOW30 DB '30',0
NOW31 DB '31',0
NOW32 DB '32',0
NOW33 DB '33',0
NOW34 DB '34',0
NOW35 DB '35',0
NOW36 DB '36',0
NOW37 DB '37',0
NOW38 DB '38',0
NOW39 DB '39',0
NOW40 DB '40',0
NOW41 DB '41',0
NOW42 DB '42',0
NOW43 DB '43',0
NOW44 DB '44',0
NOW45 DB '45',0
NOW46 DB '46',0
NOW47 DB '47',0
NOW48 DB '48',0
NOW49 DB '49',0
NOW50 DB '50',0
NOW51 DB '51',0
NOW52 DB '52',0
NOW53 DB '53',0
NOW54 DB '54',0
NOW55 DB '55',0
NOW56 DB '56',0
NOW57 DB '57',0
NOW58 DB '58',0
NOW59 DB '59',0
START0 DB '^^b',0
START1 DB 'WELCOME',0
START2 DB 'HERE WE GO~',0
START3 DB '27TH CHOI',0
END