_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 + -
显示快捷键?