_normal_key_function.a51

来自「使用PROTEUS仿真的推箱子游戏,全汇编格式,通过按钮操作,1602显示」· A51 代码 · 共 343 行

A51
343
字号

;===============================================
KEY_FUNCTION:
	MOV	C,KEY_FLAG
	JNC	KEY_FUNCTION_RET
	CLR	KEY_FLAG

	MOV	KEY_VALUE_BUF,KEY_VALUE
	MOV	DPTR,#KEY_FUNC_TABLE
	MOV	A,KEY_VALUE_BUF
	CLR	C
	RL	A
	MOV	KEY_VALUE_BUF,A
	MOVC	A,@A+DPTR
	PUSH	ACC
	MOV	A,KEY_VALUE_BUF
	INC	A
	MOVC	A,@A+DPTR
	MOV	DPL,A
	POP	ACC
	MOV	DPH,A
	CLR	A
	JMP	@A+DPTR

KEY_FUNCTION_RET:
	RET                   
;===============================================
KEY_FUNC_TABLE:
	DW NORMAL_KEY1 ,NORMAL_KEY2 ,NORMAL_KEY3 ,NORMAL_KEY4 ,NORMAL_KEY5
	DW NORMAL_KEY6 ,NORMAL_KEY7 ,NORMAL_KEY8 ,NORMAL_KEY9 ,NORMAL_KEY10
	DW NORMAL_KEY11,NORMAL_KEY12,NORMAL_KEY13,NORMAL_KEY14,NORMAL_KEY15
;===============================================
;向上键子程序
NORMAL_KEY1:
	MOV  C,START_GAME_FLAG
	JNC  NORMAL_KEY1_RET

	MOV R0,MAN_POSITION
GOUP:  	CLR  C
       	MOV  A,R0
       	SUBB A,#08H        	;
       	MOV  R0,A
       
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,U111   ;
       	AJMP NORMAL_KEY1_RET
       
  U111:	CJNE A,#box_code,U222   
       	MOV  A,R0
       	CLR  C
       	SUBB A,#08H        	;
       	MOV  R0,A
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,U11    ;
	AJMP NORMAL_KEY1_RET
       
   U11:	CJNE A,#box_code,U12    ;
        AJMP NORMAL_KEY1_RET
       
   U12:	SWAP A
	ORL  A,#box_code
	MOV  @R0,A
       	MOV  A,R0
       	ADD  A,#08H
       	MOV  R0,A
	MOV  MAN_POSITION,R0
	MOV  A,@R0
	ANL  A,#0F0H
	ORL  A,#man_code
	MOV  @R0,A
       	MOV  A,R0
       	ADD  A,#08H
       	MOV  R0,A
	MOV  A,@R0
	ANL  A,#0F0H
	SWAP A
	MOV  @R0,A
	SETB DISPLAY_FLAG
	SETB CHECK_UPGRADE
      	AJMP NORMAL_KEY1_RET

  U222:	SWAP A
  	ORL A,#man_code
	MOV @R0,A
	MOV MAN_POSITION,R0
	MOV A,R0
	ADD A,#08H
	MOV R0,A
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A
	SETB DISPLAY_FLAG 

NORMAL_KEY1_RET:
	RET
;===============================================
;;向左键子程序
NORMAL_KEY2:
	MOV  C,START_GAME_FLAG
	JNC  NORMAL_KEY2_RET

	MOV R0,MAN_POSITION
GOLEFT:	DEC  R0
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,L111
       	AJMP NORMAL_KEY2_RET
       
  L111:	CJNE A,#box_code,L222
       	DEC  R0
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,L11
       	AJMP NORMAL_KEY2_RET
       
   L11:	CJNE A,#box_code,L12
       	AJMP NORMAL_KEY2_RET
       
   L12:	
   	SWAP A
	ORL A,#box_code
	MOV @R0,A
	INC R0
	MOV MAN_POSITION,R0
	MOV A,@R0
	ANL A,#0F0H
	ORL A,#man_code
	MOV @R0,A
	INC R0
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A
	SETB DISPLAY_FLAG
	SETB CHECK_UPGRADE
	AJMP NORMAL_KEY2_RET

  L222:	SWAP A
  	ORL A,#man_code
	MOV @R0,A
	MOV MAN_POSITION,R0
	INC R0
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A
	SETB DISPLAY_FLAG 
NORMAL_KEY2_RET:
	RET
;===============================================
;;向右键子程序
NORMAL_KEY3:
	MOV  C,START_GAME_FLAG
	JNC  NORMAL_KEY3_RET

	MOV R0,MAN_POSITION
GORIGHT:INC  R0
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,R111
       	LJMP NORMAL_KEY3_RET  
       
  R111:	CJNE A,#box_code,R222
       	INC  R0
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,R11
       	LJMP NORMAL_KEY3_RET  
       
   R11:	CJNE A,#box_code,R12
       	LJMP NORMAL_KEY3_RET  
       
   R12:	SWAP A
	ORL A,#box_code
	MOV @R0,A
	DEC R0
	MOV MAN_POSITION,R0
	MOV A,@R0
	ANL A,#0F0H
	ORL A,#man_code
	MOV @R0,A
	DEC R0
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A

	SETB DISPLAY_FLAG
	SETB CHECK_UPGRADE       
        LJMP NORMAL_KEY3_RET   

  R222: SWAP A
  	ORL A,#man_code
	MOV @R0,A
	MOV MAN_POSITION,R0
	DEC R0
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A
	SETB DISPLAY_FLAG 
NORMAL_KEY3_RET:
	RET
;===============================================
;;向下键子程序
NORMAL_KEY4:
	MOV  C,START_GAME_FLAG
	JNC  NORMAL_KEY4_RET
	
	MOV  R0,MAN_POSITION
GODOWN:	CLR  C
       	MOV  A,R0
       	ADD  A,#08H
       	MOV  R0,A
       	MOV  A,@R0
       	ANL  A,#0FH
	CJNE A,#wall_code,D111
	LJMP NORMAL_KEY4_RET
       
  D111:	CJNE A,#box_code,D222
       	MOV  A,R0
       	ADD  A,#08H
       	MOV  R0,A
       	MOV  A,@R0
       	ANL  A,#0FH
       	CJNE A,#wall_code,D11
 	LJMP NORMAL_KEY4_RET
       
   D11:	CJNE A,#box_code,D12
 	AJMP NORMAL_KEY4_RET
       
   D12: SWAP A
	ORL A,#box_code
	MOV @R0,A
	MOV A,R0
	CLR C
	SUBB A,#08H
	MOV R0,A
	MOV MAN_POSITION,R0
	MOV A,@R0
	ANL A,#0F0H
	ORL A,#man_code
	MOV @R0,A
	MOV A,R0
	CLR C
	SUBB A,#08H
	MOV R0,A
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A

	SETB DISPLAY_FLAG
	SETB CHECK_UPGRADE
	AJMP NORMAL_KEY4_RET

  D222:	SWAP A
  	ORL A,#man_code
	MOV @R0,A
	MOV MAN_POSITION,R0
	MOV A,R0
	CLR C
	SUBB A,#08H
	MOV R0,A
	MOV A,@R0
	ANL A,#0F0H
	SWAP A
	MOV @R0,A
	SETB DISPLAY_FLAG 
NORMAL_KEY4_RET:
	RET
;===============================================
;enter key
NORMAL_KEY5:
	MOV C,ENTER_KEY_FLAG
	JC NORMAL_KEY5_RET

	SETB ENTER_KEY_FLAG
	SETB START_GAME_FLAG
	SETB STAGE_UPGRADE

NORMAL_KEY5_RET:
	RET
;===============================================
;restart key
NORMAL_KEY6:
	SETB STAGE_UPGRADE
NORMAL_KEY6_RET:
	RET
;===============================================
NORMAL_KEY7:


NORMAL_KEY7_RET:
	RET
;===============================================
NORMAL_KEY8:


NORMAL_KEY8_RET:
	RET
;===============================================
NORMAL_KEY9:

NORMAL_KEY9_RET:
	RET
;===============================================
NORMAL_KEY10:

NORMAL_KEY10_RET:
	RET
;===============================================
NORMAL_KEY11:

NORMAL_KEY11_RET:
	RET
;===============================================
NORMAL_KEY12:

NORMAL_KEY12_RET:
	RET
;===============================================
NORMAL_KEY13:

NORMAL_KEY13_RET:
	RET
;===============================================
NORMAL_KEY14:

NORMAL_KEY14_RET:
	RET
;===============================================
NORMAL_KEY15:

NORMAL_KEY15_RET:
	RET
;===============================================
SEG_DATA_TAB:
   DB	03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH

⌨️ 快捷键说明

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