Coding Program

Embed Size (px)

Citation preview

4.2 PROGRAMMING

PROGRAM OF GAME:WHO WANTS TO BE A MILLIONAIRE

ORG0000H

DPH_RAM1 EQU 2000HDPL_RAM1 EQU 2001HDPH_RAM2 EQU 2002HDPL_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 LCALLWRONG1 LCALLFALSE LCALLOVER1 LJMPENDING

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 LCALLWRONG1 LCALLFALSE LCALLOVER1 LJMPENDING

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 LCALLCORR_1 LCALLTRUE LCALLWIN300

LCALLLCD_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 SJMPNEXT

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

LCALLLCD_CLR MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALL ROW2 MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALLDELAYC ;WAIT LCALLENDING

NEXT: LCALLLCD_CLR MOVDPTR,#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

SJMPQUES2

;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;; QUES2: LCALLLCD_CLR MOV DPTR,#TEXT18 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_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 LCALLCORR_2 LCALLTRUE LCALLWIN500 SJMPNEXT1

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 LCALLWRONG2 LCALLFALSE LCALLOVER2 LJMPENDING

NEXT1: LCALLLCD_CLR MOV DPTR,#SAMBUNG ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALL ROW2 MOV DPTR,#YESNO ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALLDELAYC ;WAITSW0B: 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 SJMPNEXT2

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

LCALLLCD_CLR MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALL ROW2 MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD LCALLDELAYC ;WAIT LCALLENDING

NEXT2: LCALLLCD_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

SJMPQUES3

;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;; QUES3: LCALLLCD_CLR MOV DPTR,#TEXT23 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR MOV DPTR,#TEXT24 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#TEXT25 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR MOV DPTR,#Q3a ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#Q3b ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_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 LCALLWRONG3 LCALLFALSE LCALLOVER3 LJMPENDING

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 LCALLCORR_3 LCALLTRUE LCALLWIN_1M

;;;;;;;;;;;;;;;;;SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;

WRONG1: LCALLLCD_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: LCALLLCD_CLR MOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR RET

CORR_1: LCALLLCD_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: LCALLLCD_CLR MOV DPTR,#TEXT16 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#TEXT17 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT RET

WRONG2: LCALLLCD_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: LCALLLCD_CLR MOV DPTR,#TEXT10 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#TEXT11 ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR MOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR MOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALL ROW2 MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTR LCALL SENDLCD2 LCALLDELAYC ;WAIT LCALLLCD_CLR RET

CORR_2: LCALLLCD_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 LCALLDELAYC ;WAIT RET

WRONG3:LCALL LCD_CLRMOV DPTR,#TEXT8 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#TEXT26 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAITRET

OVER3:LCALL LCD_CLRMOV DPTR,#TEXT10 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#TEXT11 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAIT

LCALL LCD_CLRMOV DPTR,#LOSE ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAIT

LCALL LCD_CLRMOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAITLCALL LCD_CLRRET

CORR_3:LCALL LCD_CLRMOV DPTR,#TEXT14 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#TEXT15 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAITRET

WIN_1M:LCALL LCD_CLRMOV DPTR,#TEXT27 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAIT

LCALL LCD_CLRMOV DPTR,#TEXT28 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#TEXT29 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAIT

LCALL LCD_CLRMOV DPTR,#END1 ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAIT

LCALL LCD_CLRMOV DPTR,#THANK ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL ROW2MOV DPTR,#PLAY ;PUT TEXT ADDRESS INTO DPTRLCALL SENDLCD2LCALL DELAYC ;WAITLCALL LCD_CLRLJMP ENDING

TRUE:MOVR4,#1XX: MOV A,#7FH ;A = 55HMOV DPTR,#8001H ;PC addressMOVX @DPTR,A ;toggle PC bitsLCALLDELAYH ;wait

MOV A,#0FFH ;A = 55HMOV DPTR,#8001H ;PC addressMOVX @DPTR,A ;toggle PC bitsLCALLDELAYH ;wait DJNZR4,XXSJMPULANG; 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 R4MOVR3,#60HULANG:MOVA, #00100010B; TURN ON COLUMN 2 + COLUMN 6MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000001B; TURN ON ROW 4MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00010100B; TURN ON COLUMN 3 + COLUMN 5MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #10000000B; TURN ON ROW 5MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00001000B; TURN ON COLUMN 4MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #01000000B; TURN ON ROW 6MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #01000000B; TURN ON COLUMN 7MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000010B; TURN ON ROW 3MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #10000000B; TURN ON COLUMN 8MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000100B; TURN ON ROW 2MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00000000B; TURN OFF ALL COLUMNMOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000000B; TURN OFF ALL ROWMOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFDJNZR3,ULANGLCALLDELAYHRET

FALSE:MOVR4,#2XX1: MOV A,#7FH ;A = 55HMOV DPTR,#8001H ;PC addressMOVX @DPTR,A ;toggle PC bitsLCALLDELAYG ;wait

MOV A,#0FFH ;A = 55HMOV DPTR,#8001H ;PC addressMOVX @DPTR,A ;toggle PC bitsLCALLDELAYE ;wait

DJNZR4,XX1SJMPULANG1; 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

MOVR3,#60HULANG1:MOVA, #01000010B; TURN ON COLUMN 2 + COLUMN 7MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000100B; TURN ON ROW 2MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00100100B; TURN ON COLUMN 3 + COLUMN 6MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000010B; TURN ON ROW 3MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00011000B; TURN ON COLUMN 4 + COLUMN 5MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000001B; TURN ON ROW 4MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00011000B; TURN ON COLUMN 4 + COLUMN 5MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #10000000B; TURN ON ROW 5MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00100100B; TURN ON COLUMN 3 + COLUMN 6MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #01000000B; TURN ON ROW 6MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #01000010B; TURN ON COLUMN 2 + COLUMN 7MOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00100000B; TURN ON ROW 7MOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFMOVA, #00000000B; TURN OFF ALL COLUMNMOVDPTR, #0A000H; PORT A @ PPI 82C55 A2MOVX@DPTR, A; SEND DATAMOVA, #00000000B; TURN OFF ALL ROWMOVDPTR, #0A002H; PORT C @ PPI 82C55 A2MOVX@DPTR, A; SEND DATALCALLDELAYFDJNZR3,ULANG1LCALLDELAYHRET

SENDLCD:CLR AMOVC A,@A+DPTRJZ TEXTENDINC DPTRMOV R5,DPHMOV R4,DPLACALL DATALCD

MOV DPH,R5MOV DPL,R4SJMP SENDLCDTEXTEND:RET

SENDLCD2:CLR AMOVC A,@A+DPTRJZ TEXTENDINC DPTRMOV R5,DPHMOV R4,DPLACALL DATALCD2

MOV DPH,R5MOV DPL,R4SJMP SENDLCD2TEXTEND2:RET

DATALCD:MOV R6,A ;COPY DATA A TO R6 TEMPORARYMOV A,#30H ;A