Coding Program
Coding Program
2 PROGRAMMING
PROGRAM OF GAME:WHO WANTS TO BE A MILLIONAIRE
ORG 0000H
DPH_RAM1 EQU 2000H
DPL_RAM1 EQU 2001H
DPH_RAM2 EQU 2002H
DPL_RAM2 EQU 2003H
MULA: LCALL BLINK ;CALL BLINK SUBROUTINE
LCALL INITPORT
LCALL INITLCD
;----------------------MAIN PROGRAMME------------------
START: LCALL LCD_CLR
MOV DPTR,#TEXT1 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL ROW2
MOV DPTR,#TEXT2 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT3 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL ROW2
MOV DPTR,#LETS ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#KEY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL ROW2
MOV DPTR,#KEY2 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#Fc_Q1 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
SW7: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
CJNE A,#07FH,SW7
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
SJMP QUES1
;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;
QUES1: LCALL LCD_CLR
MOV DPTR,#TEXT4 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT5 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT6 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#SOLVE ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#Q1 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT7 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#AQ1 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
CHOOSE_ANSQ1:
CHO_AQ1:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FEH,CHO_BQ1
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL WRONG1
LCALL FALSE
LCALL OVER1
LJMP ENDING
CHO_BQ1:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FDH,CHO_CQ1
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL WRONG1
LCALL FALSE
LCALL OVER1
LJMP ENDING
CHO_CQ1:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FBH,CHO_AQ1
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL CORR_1
LCALL TRUE
LCALL WIN300
LCALL LCD_CLR
MOV DPTR,#SAMBUNG ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#YESNO ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
SW0A: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FEH,SW1A
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
SJMP NEXT
SW1A: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FDH,SW0A
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL ENDING
NEXT: LCALL LCD_CLR
MOV DPTR,#Fc_Q2 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
SW6: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
CJNE A,#0BFH,SW6
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
SJMP QUES2
;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;
QUES2: LCALL LCD_CLR
MOV DPTR,#TEXT18 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT19 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT20 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#Q2 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#AQ2 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
CHOOSE_ANSQ2:
CHO_AQ2:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FEH,CHO_BQ2
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL CORR_2
LCALL TRUE
LCALL WIN500
SJMP NEXT1
CHO_BQ2:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FDH,CHO_AQ2
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL WRONG2
LCALL FALSE
LCALL OVER2
LJMP ENDING
NEXT1: LCALL LCD_CLR
MOV DPTR,#SAMBUNG ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL ROW2
MOV DPTR,#YESNO ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
SW0B: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FEH,SW1B
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
SJMP NEXT2
SW1B: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FDH,SW0B
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD
LCALL DELAYC ;WAIT
LCALL ENDING
NEXT2: LCALL LCD_CLR
MOV DPTR,#Fc_Q3 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
SW5: MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
CJNE A,#0DFH,SW5
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
SJMP QUES3
;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;
QUES3: LCALL LCD_CLR
MOV DPTR,#TEXT23 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT24 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT25 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#Q3a ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#Q3b ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT7 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#AQ3 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
CHOOSE_ANSQ3:
CHO_AQ3:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FEH,CHO_BQ3
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL WRONG3
LCALL FALSE
LCALL OVER3
LJMP ENDING
CHO_BQ3:MOV DPTR,#0E001H ;PC address
MOVX A,@DPTR ;toggle PC bits
CJNE A,#0FDH,CHO_AQ3
MOV R5,A
MOV A,#0FFH ;toggle PC bits
MOV DPTR,#8002H ;PC address
MOVX @DPTR,A
LCALL CORR_3
LCALL TRUE
LCALL WIN_1M
;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;
WRONG1: LCALL LCD_CLR
MOV DPTR,#TEXT8 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT9 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
RET
OVER1: LCALL LCD_CLR
MOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
RET
CORR_1: LCALL LCD_CLR
MOV DPTR,#TEXT14 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT15 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
RET
WIN300: LCALL LCD_CLR
MOV DPTR,#TEXT16 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT17 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
RET
WRONG2: LCALL LCD_CLR
MOV DPTR,#TEXT8 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT21 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
RET
OVER2: LCALL LCD_CLR
MOV DPTR,#TEXT10 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT11 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
RET
CORR_2: LCALL LCD_CLR
MOV DPTR,#TEXT14 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT15 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
RET
WIN500: LCALL LCD_CLR
MOV DPTR,#TEXT16 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT22 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
RET
WRONG3:LCALL LCD_CLR
MOV DPTR,#TEXT8 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT26 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
RET
OVER3:LCALL LCD_CLR
MOV DPTR,#TEXT10 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT11 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
RET
CORR_3:LCALL LCD_CLR
MOV DPTR,#TEXT14 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT15 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
RET
WIN_1M:LCALL LCD_CLR
MOV DPTR,#TEXT27 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#TEXT28 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#TEXT29 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#END1 ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL ROW2
MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR
LCALL SENDLCD2
LCALL DELAYC ;WAIT
LCALL LCD_CLR
LJMP ENDING
TRUE: MOV R4,#1
XX: MOV A,#7FH ;A = 55H
MOV DPTR,#8001H ;PC address
MOVX @DPTR,A ;toggle PC bits
LCALL DELAYH ;wait
MOV A,#0FFH ;A = 55H
MOV DPTR,#8001H ;PC address
MOVX @DPTR,A ;toggle PC bits
LCALL DELAYH ;wait
DJNZ R4,XX
SJMP ULANG
; PROGRAM FOR DOT MATRIX
; COLUMN -> PORT A : C8 C7 C6 C5 C4 C3 C2 C1
; ROW -> PORT C : R5 R6 R7 R8 R1 R2 R3 R4
MOV R3,#60H
ULANG: MOV A, #00100010B ; TURN ON COLUMN 2 + COLUMN 6
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000001B ; TURN ON ROW 4
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00010100B ; TURN ON COLUMN 3 + COLUMN 5
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #10000000B ; TURN ON ROW 5
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00001000B ; TURN ON COLUMN 4
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #01000000B ; TURN ON ROW 6
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #01000000B ; TURN ON COLUMN 7
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000010B ; TURN ON ROW 3
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #10000000B ; TURN ON COLUMN 8
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000100B ; TURN ON ROW 2
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00000000B ; TURN OFF ALL COLUMN
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000000B ; TURN OFF ALL ROW
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
DJNZ R3,ULANG
LCALL DELAYH
RET
FALSE: MOV R4,#2
XX1: MOV A,#7FH ;A = 55H
MOV DPTR,#8001H ;PC address
MOVX @DPTR,A ;toggle PC bits
LCALL DELAYG ;wait
MOV A,#0FFH ;A = 55H
MOV DPTR,#8001H ;PC address
MOVX @DPTR,A ;toggle PC bits
LCALL DELAYE ;wait
DJNZ R4,XX1
SJMP ULANG1
; PROGRAM FOR DOT MATRIX
; COLUMN -> PORT A : C8 C7 C6 C5 C4 C3 C2 C1
; ROW -> PORT C : R5 R6 R7 R8 R1 R2 R3 R4
MOV R3,#60H
ULANG1: MOV A, #01000010B ; TURN ON COLUMN 2 + COLUMN 7
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000100B ; TURN ON ROW 2
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00100100B ; TURN ON COLUMN 3 + COLUMN 6
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000010B ; TURN ON ROW 3
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00011000B ; TURN ON COLUMN 4 + COLUMN 5
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000001B ; TURN ON ROW 4
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00011000B ; TURN ON COLUMN 4 + COLUMN 5
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #10000000B ; TURN ON ROW 5
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00100100B ; TURN ON COLUMN 3 + COLUMN 6
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #01000000B ; TURN ON ROW 6
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #01000010B ; TURN ON COLUMN 2 + COLUMN 7
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00100000B ; TURN ON ROW 7
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
MOV A, #00000000B ; TURN OFF ALL COLUMN
MOV DPTR, #0A000H ; PORT A @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
MOV A, #00000000B ; TURN OFF ALL ROW
MOV DPTR, #0A002H ; PORT C @ PPI 82C55 A2
MOVX @DPTR, A ; SEND DATA
LCALL DELAYF
DJNZ R3,ULANG1
LCALL DELAYH
RET
SENDLCD:CLR A
MOVC A,@A+DPTR
JZ TEXTEND
INC DPTR
MOV R5,DPH
MOV R4,DPL
ACALL DATALCD
MOV DPH,R5
MOV DPL,R4
SJMP SENDLCD
TEXTEND:RET
SENDLCD2:CLR A
MOVC A,@A+DPTR
JZ TEXTEND
INC DPTR
MOV R5,DPH
MOV R4,DPL
ACALL DATALCD2
MOV DPH,R5
MOV DPL,R4
SJMP SENDLCD2
TEXTEND2:RET
DATALCD:MOV R6,A ;COPY DATA A TO R6 TEMPORARY
MOV A,#30H ;A <- RS=0 , E=1 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYB ;WAIT
MOV A,R6 ;LOAD COPIED DATA TO A
MOV DPTR,#6001H ;LCD DATA PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD DATA PORT
LCALL DELAYB
MOV A,#20H ;A <- RS=0 , E=0 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYB
RET
DATALCD2:MOV R6,A ;COPY DATA A TO R6 TEMPORARY
MOV A,#30H ;A <- RS=0 , E=1 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYD ;WAIT
MOV A,R6 ;LOAD COPIED DATA TO A
MOV DPTR,#6001H ;LCD DATA PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD DATA PORT
LCALL DELAYD
MOV A,#20H ;A <- RS=0 , E=0 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYD
RET
ROW2: MOV A,#0C0H ;LCD RAM ADDRESS = 2ND LINE = C0
ACALL CNTRLCD ;SEND TO LCD
RET
LCD_CLR:
MOV A,#01H ;CLEAR LCD
ACALL CNTRLCD ;SEND TO LCD
MOV A,#80H ;1ST ROW POSITION
ACALL CNTRLCD ;SEND TO LCD
RET
INITLCD:
MOV A,#38H ;PUT DATA
ACALL CNTRLCD ;SEND TO LCD
MOV A,#0CH ;PUT DATA
ACALL CNTRLCD ;SEND TO LCD
MOV A,#06H ;PUT DATA
ACALL CNTRLCD ;SEND TO LCD
MOV A,#01H ;PUT DATA
ACALL CNTRLCD ;SEND TO LCD
MOV A,#80H ;PUT DATA
ACALL CNTRLCD ;SEND TO LCD
RET
CNTRLCD:MOV R6,A ;COPY DATA A TO R6 TEMPORARY
MOV A,#10H ;A <- RS=0 , E=1 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYB ;WAIT
MOV A,R6 ;LOAD COPIED DATA TO A
MOV DPTR,#6001H ;LCD DATA PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD DATA PORT
LCALL DELAYB
MOV A,#00H ;A <- RS=0 , E=0 X X RS E X X X X
MOV DPTR,#6002H ;LCD CONTROL PORT
MOVX @DPTR,A ;TRANSFER DATA TO LCD CONTROL PORT
LCALL DELAYB
RET
INITPORT:
MOV A,#80H ;INIT PORT 82C55A0 , PA=7SEGMENT, PB=LCD DATA, PC=LCD CONTROL
MOV DPTR,#6003H ;SET ALL PORT OUTPUT
MOVX @DPTR,A ;TRANSFER #80H TO PGCR
MOV A,#80H ;INIT PORT 82C55A1 , PA=CON2=OUTPUT, PB=DCMOTOR, PC=LED
MOV DPTR,#8003H ;SET ALL PORT OUTPUT
MOVX @DPTR,A ;TRANSFER #80H TO PGCR
MOV A,#0F0H ;INIT PORT 82C55A1 , PA=CON2=OUTPUT, PB=DCMOTOR, PC=LED
MOV DPTR,#8001H ;SET ALL PORT OUTPUT
MOVX @DPTR,A ;TRANSFER #80H TO PGCR
MOV A,#0FFH
MOV DPTR,#8002H ;PGCR ADDRESS
MOVX @DPTR,A
MOV A,#80H ;INIT PORT 82C55A2 , PA=DOTROW, PB=CON3=INPUT, PC=DOTCOL
MOV DPTR,#0A003H ;SET ALL PORT OUTPUT
MOVX @DPTR,A ;TRANSFER #80H TO PGCR
MOV A,#83H ;INIT PORT 82C55A2 , PA=CON4, PB=SWITCH, PC=KPAD(PCL=INPUT,
PCH=OUTPUT)
MOV DPTR,#0E003H ;SET ALL PORT OUTPUT
MOVX @DPTR,A ;TRANSFER #80H TO PGCR
MOV A,#0FFH ;OFF 7 segment
MOV DPTR,#6000H
MOVX @DPTR,A
RET
BLINK: MOV R7,#3H ;SET LOOP 3X
REPEAT: MOV A,#0FEH ;TURN ON LED P1.0
MOV P1,A ;TRANSFER A TO PORT1
LCALL DELAY ;CALL FOR DELAY
MOV A,#0FDH ;TURN ON LED P1.1
MOV P1,A ;TRANSFER A TO PORT1
LCALL DELAY ;CALL FOR DELAY
DJNZ R7,REPEAT ;CHECK LOOP FOR 3X
MOV A,#0FFH ;TURN ON LED P1.1
MOV P1,A ;TRANSFER A TO PORT1
RET ;RETURN FROM SUBROUTINE
DELAY: MOV r2,#3
LOOP3: MOV r1,#100
LOOP2: MOV R0,#255
LOOP: DJNZ R0,LOOP
DJNZ r1,LOOP2
DJNZ r2,LOOP3
RET
DELAYB: MOV r2,#10
LOOP3B: MOV r1,#10
LOOP2B: MOV R0,#100
LOOPB: DJNZ R0,LOOPB
DJNZ r1,LOOP2B
DJNZ r2,LOOP3B
RET
DELAYC: MOV r2,#30
LOOP3C: MOV r1,#200
LOOP2C: MOV R0,#200
LOOPC: DJNZ R0,LOOPC
DJNZ r1,LOOP2C
DJNZ r2,LOOP3C
RET
DELAYD: MOV r2,#1
LOOP3D: MOV r1,#20
LOOP2D: MOV R0,#50
LOOPD: DJNZ R0,LOOPD
DJNZ r1,LOOP2D
DJNZ r2,LOOP3D
RET
; DELAYE SUBROUTINE
DELAYE: MOV R2, #1
LOOP3E: MOV R1, #165
LOOP2E: MOV R0, #255
LOOPE: DJNZ R0, LOOPE
DJNZ R1, LOOP2E
DJNZ R2, LOOP3E
RET
DELAYH: MOV R2, #3
LOOP3H: MOV R1, #200
LOOP2H: MOV R0, #200
LOOPH: DJNZ R0, LOOPH
DJNZ R1, LOOP2H
DJNZ R2, LOOP3H
RET
DELAYG: MOV R2, #1
LOOP3G: MOV R1, #180
LOOP2G: MOV R0, #255
LOOPG: DJNZ R0, LOOPG
DJNZ R1, LOOP2G
DJNZ R2, LOOP3G
RET
; DELAYF SUBROUTINE
DELAYF: MOV R2, #1
LOOP3F: MOV R1, #1
LOOP2F: MOV R0, #255
LOOPF: DJNZ R0, LOOPF
DJNZ R1, LOOP2F
DJNZ R2, LOOP3F
RET
DELS1: MOV r2,#1
LOPS1: MOV r1,#5
LOPS1B: MOV R0,#5
LOPS1C: DJNZ R0,LOPS1C
DJNZ r1,LOPS1B
DJNZ r2,LOPS1B
RET
DELS2: MOV r2,#20
LOPS2: MOV r1,#5
LOPS2B: MOV R0,#5
LOPS2C: DJNZ R0,LOPS2C
DJNZ r1,LOPS2B
DJNZ r2,LOPS2B
RET
DELS3: MOV r2,#2
LOPS3: MOV r1,#5
LOPS3B: MOV R0,#5
LOPS3C: DJNZ R0,LOPS3C
DJNZ r1,LOPS3B
DJNZ r2,LOPS3B
RET
DELS4: MOV r2,#15
LOPS4: MOV r1,#5
LOPS4B: MOV R0,#5
LOPS4C: DJNZ R0,LOPS4C
DJNZ r1,LOPS4B
DJNZ r2,LOPS4B
RET
TEXT1:DB 'WHO WANTS TO BE ',0
TEXT2:DB 'A MILLIONAIRE?',0
TEXT3:DB 'ARE YOU READY?',0
LETS: DB 'LETS START...',0
KEY: DB 'KEY-->SW0=A,',0
KEY2:DB 'SW1=B,SW2=C',0
Fc_Q1:DB 'PRESS SW7-->Q1',0
TEXT4:DB 'Question 1...',0
TEXT5:DB 'This question ',0
TEXT6:DB 'worth RM300,000',0
SOLVE:DB 'Solve this: ',0
Q1: DB '96/3=?',0
TEXT7:DB 'Choose 1 answer',0
AQ1: DB 'A)30 B)40 C)32',0
TEXT8:DB 'SORRY!',0
TEXT9:DB 'The answer is C',0
TEXT10:DB 'Your money is ',0
TEXT11:DB 'reset to 0 =(',0
TEXT14:DB 'Your answer is',0
TEXT15:DB 'correct =)',0
TEXT16:DB 'You just won',0
TEXT17:DB ' RM300,000!',0
Fc_Q2:DB 'PRESS SW6-->Q2',0
TEXT18:DB 'Question 2...',0
TEXT19:DB 'This question ',0
TEXT20:DB 'worth RM500,000',0
Q2:DB '1kg=1 liter',0
AQ2:DB 'A)YES B)NO',0
TEXT21:DB 'The answer is A',0
TEXT22:DB ' RM500,000!',0
Fc_Q3:DB 'PRESS SW5-->Q3',0
TEXT23:DB 'Question 3...',0
TEXT24:DB 'This question ',0
TEXT25:DB 'worth RM1000000',0
Q3a:DB 'Tun Hussein Onn',0
Q3b:DB 'is our 2nd PM?',0
AQ3:DB 'A)TRUE B)FALSE',0
TEXT26:DB 'The answer is B',0
TEXT27:DB 'CONGRATULATIONS!!',0
TEXT28:DB ' YOU ARE NOW',0
TEXT29:DB 'A MILLIONAIRE!',0
END1:DB ' END OF GAME',0
THANK:DB 'THANK YOU',0
PLAY:DB 'FOR PLAYING =)',0
LOSE:DB 'GAME OVER!',0
SAMBUNG:DB 'CONTINUE?',0
YESNO:DB 'SW0->YES SW1->NO',0
DOTROW: DB 20H,30H
DOTCOL: DB 30H,40H
ENDING: END