⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _tg12864b.a51

📁 使用PROTEUS仿真的推箱子游戏,全汇编格式,通过按钮操作,1602显示
💻 A51
字号:
;===========================================================
;;----初始化子程序---------------------------- 
LCD_INITIAL: 
	CLR   E
	CLR   RW 
	CLR   RST 
       	LCALL DELAY40MS
       	SETB  RST 
       	MOV   LCD_DATA,#3FH 
       	LCALL WRITE_INST 
       	MOV   LCD_DATA,#start_line
       	LCALL WRITE_INST 
       	RET 
;===========================================================
;;-----显示子程序-------------------
DISPLAY:
	MOV   C,DISPLAY_FLAG
	JNC   DISPLAY_RTN
	CLR   C
	CLR   DISPLAY_FLAG

	LCALL DISABLE_TIMER1
       	CLR   CS2
       	SETB  CS1 
	MOV   LCD_DATA,#start_line 
	LCALL WRITE_INST
	MOV   R0,#lcd_ram_addr
	MOV   PAGE_INDEX,#8H     	;
	MOV   X_POINTER,#base_x  	;
DIS1:    
	MOV   LCD_DATA,X_POINTER
	LCALL WRITE_INST 
	MOV   LCD_DATA,#base_y
	LCALL WRITE_INST
 
	MOV   Y_POINTER,#08H     	; 
DIS2:   MOV   A ,@R0
        ANL   A ,#0FH     		;
        MOV   B ,#08H
        MUL   AB          		;
        MOV   R5,A
        MOV   A ,@R0
        ANL   A ,#0F0H    		;
        SWAP  A
        JZ    DIS3        		;
	MOV   B,#08H
        MUL   AB
        MOV   R6,A
        AJMP  DIS4
DIS3:   MOV   A,R5
	MOV   R6,A
DIS4:   MOV   DPTR,#SHAPE  		;

        MOV   COLUMN_INDEX,#8H       	;
DIS5:   MOV   A,R5
        MOVC  A,@A+DPTR   		;
        MOV   R7,A
        MOV   A,R6
        MOVC  A,@A+DPTR   		;
        ORL   A,R7       		;	 
        MOV   LCD_DATA,A 
        LCALL WRITE_DATA
        LCALL DELAY_NOP
        INC   DPTR 
        DJNZ  COLUMN_INDEX,DIS5

        INC   R0          
        DJNZ  Y_POINTER,DIS2
        INC   X_POINTER          	;
        DJNZ  PAGE_INDEX,DIS1

	LCALL ENABLE_TIMER1
DISPLAY_RTN:
        RET
;===========================================================
DISPLAY2:
	MOV A,R0
        MOV LCD_DATA,#start_line
        LCALL WRITE_INST
	CLR C
	MOV B,#18
	MUL AB
        ADD A,DPL
	MOV DPL,A
	XCH A,B
	ADDC A,DPH
	MOV DPH,A

        MOV A,#0
	MOVC A,@A+DPTR
	ADD A,#base_x
	MOV X_POINTER,A
	INC DPTR
	MOV A,#0
	MOVC A,@A+DPTR
	ADD A,#base_y
	MOV Y_POINTER,A

	MOV PAGE_INDEX,#2
        INC DPTR
DDIS2:  MOV LCD_DATA,X_POINTER
        LCALL WRITE_INST
        MOV LCD_DATA,Y_POINTER
        LCALL WRITE_INST

        MOV R5,#8      
DDIS3:  MOV A,#0
        MOVC A,@A+DPTR
        MOV  LCD_DATA,A
        LCALL WRITE_DATA
        LCALL DELAY_NOP
        INC  DPTR
        DJNZ R5,DDIS3
         
        INC  X_POINTER
        DJNZ PAGE_INDEX,DDIS2
        RET
;===========================================================
DISPLAY_ALL:
	MOV   LCD_DATA,#start_line
	LCALL WRITE_INST
	    
	MOV   PAGE_INDEX,#08H
	MOV   X_POINTER,#base_x
DISPLAY_LOOP1: 
	MOV   LCD_DATA,X_POINTER
	LCALL WRITE_INST
	MOV   LCD_DATA,#base_y
	LCALL WRITE_INST

	MOV   Y_POINTER,#40H
DISPLAY_LOOP2:
	MOV   LCD_DATA,#0FFH
	LCALL WRITE_DATA
	DJNZ  Y_POINTER,DISPLAY_LOOP2

	INC   X_POINTER
	DJNZ  PAGE_INDEX,DISPLAY_LOOP1
	RET
;===========================================================
CLEAR_ALL:
	MOV   LCD_DATA,#start_line
	LCALL WRITE_INST
	    
	MOV   PAGE_INDEX,#08H
	MOV   X_POINTER,#base_x
CLEAR_LOOP1: 
	MOV   LCD_DATA,X_POINTER
	LCALL WRITE_INST
	MOV   LCD_DATA,#base_y
	LCALL WRITE_INST

	MOV   Y_POINTER,#40H
CLEAR_LOOP2:	
	MOV   LCD_DATA,#00H
	LCALL WRITE_DATA
	DJNZ  Y_POINTER,CLEAR_LOOP2

	INC   X_POINTER
	DJNZ  PAGE_INDEX,CLEAR_LOOP1
	RET
;===========================================================
;;---写指令子程序-------------------------
WRITE_INST:
	CLR   E
	CLR   RW
     	CLR   DI 
    	MOV   LCD_DATA_PORT,LCD_DATA
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
     	SETB  E 
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
     	RET
;===========================================================
;;---写数据子程序---------------------- 
WRITE_DATA: 	
	CLR   E 
	CLR   RW
     	SETB  DI 
     	MOV   LCD_DATA_PORT,LCD_DATA
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
     	SETB  E 
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
     	RET
;===========================================================
;;---读数据子程序---------------------- 
READ_DATA:
	CLR   E 
	SETB  RW
     	SETB  DI 
     	CLR   E 
     	LCALL DELAY_NOP
     	SETB  E 
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
	
	SETB  RW
     	SETB  DI 
     	CLR   E 
     	LCALL DELAY_NOP
     	SETB  E 
     	LCALL DELAY_NOP
     	CLR   E 
     	LCALL DELAY_NOP
	MOV   LCD_DATA,LCD_DATA_PORT
	RET
;===========================================================
DELAY_NOP:
	NOP
	NOP
	NOP
	NOP
	RET
;=======================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -