0% found this document useful (0 votes)
53 views

Coding Program

This document contains the program code for a "Who Wants To Be A Millionaire" game show simulation. The program initializes ports and an LCD display. It then asks the player a series of 3 multiple choice questions, displaying the questions and possible answers on the LCD. The player uses switches to select an answer. If correct, the player wins virtual money and advances to the next question. If incorrect, the player loses and the game ends. Subroutines are used to handle correct/incorrect feedback and money updates between questions.

Uploaded by

wafazi93
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views

Coding Program

This document contains the program code for a "Who Wants To Be A Millionaire" game show simulation. The program initializes ports and an LCD display. It then asks the player a series of 3 multiple choice questions, displaying the questions and possible answers on the LCD. The player uses switches to select an answer. If correct, the player wins virtual money and advances to the next question. If incorrect, the player loses and the game ends. Subroutines are used to handle correct/incorrect feedback and money updates between questions.

Uploaded by

wafazi93
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 21

4.

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

You might also like