$MOD51
ORG 00
JMP MAIN
ORG 01BH
CLR TR1
DJNZ T_DELAY,THOATNGAT
MOV DK,#9
SETB LOA
JMP THOATNGAT2
THOATNGAT:
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
CLR TF1
SETB TR1
THOATNGAT2:
RETI
;***************************
OK BIT P2.4
DOWN BIT P2.5
UP BIT P2.6
SW_SET BIT P2.7
SW_HG BIT P2.1
LOA BIT P2.0
HESO DATA 3FH
GIAY DATA 40H
PHUT DATA 41H
GIO DATA 42H
MASW DATA 43H
T_DELAY DATA 44H
DK DATA 45H
GIOHEN DATA 46H
PHUTHEN DATA 47H
ORG 100H
;****************************
MAIN:
MOV TMOD,#11H
MOV HESO,#1
SETB TF0
;MOV 8EH,#2
MOV IE,#88H
MOV DK,#9
MOV T_DELAY,#20
LCALL DE_LAY
MOV R0,#10
MOV A,#2FH
MOVX @R0,A
MOV R0,#11
MOV A,#2
MOVX @R0,A
MOV R0,#50
MOVX A,@R0
MOV PHUTHEN,A
MOV R0,#51
MOVX A,@R0
MOV GIOHEN,A
LAP0:
LCALL LOAD
LCALL KTHENGIO
LCALL HIENTHI
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#1,LAP0
JNB SW_HG,LAP1
LCALL CAIDAT
JMP LAP0
LAP1:
LCALL CAIDAT_HENGIO
JMP LAP0
;*****************************
LOAD:
MOV R0,#0
MOVX A,@R0
MOV GIAY,A
MOV R0,#2
MOVX A,@R0
MOV PHUT,A
MOV R0,#4
MOVX A,@R0
MOV GIO,A
RET
;*************************
CAIDAT:
MOV T_DELAY,#20
MOV R0,#GIO
MOV R2,#0EFH
CAIDATGIO:
LCALL HT_CD
LCALL HIENTHI
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#0,CDG0
JMP CAIDATGIO
CDG0:
CJNE A,#1,CDG1
MOV A,GIO
MOV R0,#4
MOVX @R0,A
JMP CAIDATPHUT1
CDG1:
CJNE A,#2,CDG2
MOV A,GIO
CJNE A,#23H,TANGGIO
MOV GIO,#0
JMP CAIDATGIO
TANGGIO:
ADD A,#1
DA A
MOV GIO,A
JMP CAIDATGIO
CDG2:
CJNE A,#3,CDG3
MOV A,GIO
CJNE A,#0,GIAMGIO
MOV GIO,#23H
JMP CAIDATGIO
GIAMGIO:
ADD A,#99H
DA A
MOV GIO,A
JMP CAIDATGIO
CDG3:
CJNE A,#4,CAIDATGIO
MOV A,GIO
MOV R0,#4
MOVX @R0,A
JMP THOATCAIDAT
;*****************************
CAIDATPHUT1:
MOV R0,#PHUT
MOV R2,#0FBH
CAIDATPHUT:
LCALL HT_CD
LCALL HIENTHI
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#0,CDP0
JMP CAIDATPHUT
CDP0:
CJNE A,#1,CDP1
MOV A,PHUT
MOV R0,#2
MOVX @R0,A
JMP CAIDATGIAY1
CDP1:
CJNE A,#2,CDP2
MOV A,PHUT
CJNE A,#59H,TANGPHUT
MOV PHUT,#0
JMP CAIDATPHUT
TANGPHUT:
ADD A,#1
DA A
MOV PHUT,A
JMP CAIDATPHUT
CDP2:
CJNE A,#3,CDP3
MOV A,PHUT
CJNE A,#0,GIAMPHUT
MOV PHUT,#59H
JMP CAIDATPHUT
GIAMPHUT:
ADD A,#99H
DA A
MOV PHUT,A
JMP CAIDATPHUT
CDP3:
CJNE A,#4,CAIDATPHUT
MOV A,PHUT
MOV R0,#2
MOVX @R0,A
JMP THOATCAIDAT
;******************************
CAIDATGIAY1:
MOV R0,#GIAY
MOV R2,#0FEH
CAIDATGIAY:
LCALL HT_CD
LCALL HIENTHI
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#0,CDGI0
JMP CAIDATGIAY
CDGI0:
CJNE A,#1,CDGI1
MOV A,GIAY
MOV R0,#0
MOVX @R0,A
JMP CAIDAT
CDGI1:
CJNE A,#2,CDGI2
MOV A,GIAY
CJNE A,#59H,TANGGIAY
MOV GIAY,#0
JMP CAIDATGIAY
TANGGIAY:
ADD A,#1
DA A
MOV GIAY,A
JMP CAIDATGIAY
CDGI2:
CJNE A,#3,CDGI3
MOV A,GIAY
CJNE A,#0,GIAMGIAY
MOV GIAY,#59H
JMP CAIDATGIAY
GIAMGIAY:
ADD A,#99H
DA A
MOV GIAY,A
JMP CAIDATGIAY
CDGI3:
CJNE A,#4,CAIDATGIAY
MOV A,GIAY
MOV R0,#0
MOVX @R0,A
;*******
THOATCAIDAT:
RET
;**************************
CAIDAT_HENGIO:
MOV T_DELAY,#100
MOV R0,#GIOHEN
MOV R2,#0EFH
CAIDATGIOH:
LCALL HT_CD
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#0,CDGH0
JMP CAIDATGIOH
CDGH0:
CJNE A,#1,CDGH1
MOV A,GIOHEN
MOV R0,#51
MOVX @R0,A
JMP CAIDATPHUTH1
CDGH1:
CJNE A,#2,CDGH2
MOV A,GIOHEN
CJNE A,#23H,TANGGIOH
MOV GIOHEN,#0
JMP CAIDATGIOH
TANGGIOH:
ADD A,#1
DA A
MOV GIOHEN,A
JMP CAIDATGIOH
CDGH2:
CJNE A,#3,CDGH3
MOV A,GIOHEN
CJNE A,#0,GIAMGIOH
MOV GIOHEN,#23H
JMP CAIDATGIOH
GIAMGIOH:
ADD A,#99H
DA A
MOV GIOHEN,A
JMP CAIDATGIOH
CDGH3:
CJNE A,#4,CAIDATGIOH
MOV A,GIOHEN
MOV R0,#51
MOVX @R0,A
JMP THOATCD
;*****************************
CAIDATPHUTH1:
MOV R0,#PHUTHEN
MOV R2,#0FBH
CAIDATPHUTH:
LCALL HT_CD
MOV MASW,#0
LCALL SCANNUT
MOV A,MASW
CJNE A,#0,CDPH0
JMP CAIDATPHUTH
CDPH0:
CJNE A,#1,CDPH1
MOV A,PHUTHEN
MOV R0,#50
MOVX @R0,A
JMP CAIDAT_HENGIO
CDPH1:
CJNE A,#2,CDPH2
MOV A,PHUTHEN
CJNE A,#59H,TANGPHUTH
MOV PHUTHEN,#0
JMP CAIDATPHUTH
TANGPHUTH:
ADD A,#1
DA A
MOV PHUTHEN,A
JMP CAIDATPHUTH
CDPH2:
CJNE A,#3,CDPH3
MOV A,PHUTHEN
CJNE A,#0,GIAMPHUTH
MOV PHUTHEN,#59H
JMP CAIDATPHUTH
GIAMPHUTH:
ADD A,#99H
DA A
MOV PHUTHEN,A
JMP CAIDATPHUTH
CDPH3:
CJNE A,#4,CAIDATPHUTH
MOV A,PHUTHEN
MOV R0,#50
MOVX @R0,A
THOATCD:
RET
;*****************************
KTHENGIO:
JB SW_HG,THOATKTHG
MOV A,DK
CJNE A,#9,THOATKTHG
MOV A,GIAY
CJNE A,#0,THOATKTHG
MOV A,PHUT
CJNE A,PHUTHEN,THOATKTHG
MOV A,GIO
CJNE A,GIOHEN,THOATKTHG
CLR LOA
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
MOV T_DELAY,#100
CLR TF1
SETB TR1
MOV DK,#0
THOATKTHG:
RET
;**************************
SCANNUT:
JNB TF0,THOAT1
CLR TR0
DJNZ HESO,THOAT2
MOV HESO,#1
JB OK,KT_SET
MOV MASW,#4
MOV HESO,T_DELAY
JMP THOAT2
KT_SET:
JB SW_SET,KT_UP
MOV MASW,#1
MOV HESO,T_DELAY
JMP THOAT2
KT_UP:
JB UP,KT_DOWN
MOV MASW,#2
MOV HESO,T_DELAY
JMP THOAT2
KT_DOWN:
JB DOWN,THOAT1
MOV MASW,#3
MOV HESO,T_DELAY
THOAT2:
MOV TH0,#HIGH(-40000)
MOV TL0,#LOW(-40000)
CLR TF0
SETB TR0
THOAT1:
RET
;****************************
HIENTHI:
MOV DPTR,#MALED
PUSH 00
PUSH 02
MOV R0,#GIAY
MOV R2,#0FEH
HT1:
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV P3,R2
LCALL DELAY
MOV P1,#0FFH
MOV A,R2
RL A
MOV R2,A
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV P3,R2
LCALL DELAY
MOV P1,#0FFH
MOV A,R2
RL A
MOV R2,A
INC R0
CJNE R0,#43H,HT1
POP 02
POP 00
RET
;**********************
HT_CD:
MOV DPTR,#MALED2
PUSH 00
PUSH 02
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV P3,R2
LCALL DELAY
MOV P1,#0FFH
MOV A,R2
RL A
MOV R2,A
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
MOV P3,R2
LCALL DELAY
MOV P1,#0FFH
POP 02
POP 00
RET
;************************
DELAY:
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
CLR TF0
SETB TR0
JNB TF0,$
CLR TR0
RET
;****************************
DE_LAY:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
CLR TF0
SETB TR0
JNB TF0,$
CLR TR0
DJNZ T_DELAY,DELAY
RET
;***********************************
MALED:
DB 21H,0BBH,62H,32H,0B8H,34H,24H,0B3H,20H,30H
MALED2:
DB 01H,9BH,42H,12H,98H,14H,04H,93H,00H,10H
END