Upload
wafazi93
View
28
Download
0
Tags:
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