📄 victory3.bak
字号:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP MINE_BOMB
ORG 000BH
LJMP TIMER
ORG 0013H
LJMP HUOER
ORG 001BH
LJMP SPEED
;**************************************************
ORG 0030H
;**************************************************
MINE_BOMB:
PUSH A
PUSH PSW
INC 3AH
MOV A,40H
MOV 3BH,A
MOV A,41H
MOV 3CH,A
CLR 20H.3
SETB P3.4
SETB P3.5
POP PSW
POP A
RETI
;**************************************************
TIMER:
PUSH A
PUSH PSW
MOV TL0,#0F0H
MOV TH0,#0D8H
INC 37H
MOV A,37H
CJNE A,#100,TIMEREND
;is 1second
IS_HUN:
MOV 37H,#0
; IS C_MINE,STOP AND THAN XUAN
JB 20H.0,QI_LAI ;THIS TIME,THE CAR IS WAITTING IN THE END,
DEC 39H
MOV A,39H
CJNE A,#0H,TIMEREND
SETB 20H.0
LJMP TIMEREND
QI_LAI:
JB 20H.1,WAKE_UP
DEC 38H
CPL P3.4
MOV A,38H
CJNE A,#0H,WAKE_UP
SETB 20H.1
CLR P3.4
SETB TR1
MOV 5AH,#23
WAKE_UP:
INC 43H
MOV A,43H
CJNE A,#30,GOGOGO_DOWN
MOV A,42H
JZ GOGOGO_DOWN
LJMP HOME
GOGOGO_DOWN:
MOV A,43H
CJNE A,#60,TIMEREND
MOV 43H,#0
INC 42H
MOV A,42H
CJNE A,#60,TIMEREND
MOV 42H,#0
TIMEREND:
POP PSW
POP A
RETI
;**************************************************
HUOER:
PUSH A
PUSH PSW
MOV A,3FH
CLR C
ADD A,#64 ;加上6.3毫米
CJNE A,#100,CHECK_CM
CHECK_CM:
JC ADD_CM
SUBB A,#100 ;大于10个毫米了,要作调整
MOV 3FH,A
INC 41H
ADD_CM: ;厘米上要加2
INC 41H
INC 41H
MOV A,41H
CJNE A,#100,CHECK_M
CHECK_M:
JC HUOER_END
SUBB A,#100 ;大于一米了,要调整一下
MOV 41H,A
INC 40H
;查看是否是两米了,是的话就算到了B区
MOV A,40H
CJNE A,#2,HUOER_END
MOV 36H,#0BH
HUOER_END:
POP PSW
POP A
RETI
;**************************************************
SPEED:
PUSH A
PUSH PSW
MOV TL1,#0B0H
MOV TH1,#03CH
INC 5BH
MOV A,5BH
CJNE A,5AH,SPEED_NO_EQUAL ; 5A中放了速度值,比5A大,刚置为停,小则行
CLR P3.0 ; 等于5A了,置为停
LJMP SP_END
SPEED_NO_EQUAL: ; 不是5A
JC IS_GOGOGO ; 小于5A,则向前走
CJNE A,#40,SP_BIG_TOTAL ; 是不是比总脉冲值大
SETB P3.0
MOV 5BH,#0H
LJMP SP_END
IS_GOGOGO: ;是行,就置行
SETB P3.0
LJMP SP_END
SP_BIG_TOTAL: ; 大于5A,不是40
CLR P3.0
JC SP_END ;比40小则是停,就不管
MOV 5AH,#0H
SP_END:
POP PSW
POP A
RETI
;**************************************************
;**************************************************
MAIN:
MOV SP,#5FH
LCALL INIT
; LJMP HOME;\\\\\\\\\
SIX_SECOND:
JB 20H.0,GO_MINE_ZEON
MOV R1,#39H
LCALL SETCODEALL
LCALL OUT
LJMP SIX_SECOND
GO_MINE_ZEON:
SETB TR1
LJMP MINE_WAY
RET
;**************************************************
;**************************************************
INIT:
MOV R1,#36H
MOV R2,#34
INIT_LOOP:
MOV @R1,#0
INC R1
DJNZ R2,INIT_LOOP
MOV 20H,#0H
SETB 20H.1
SETB 20H.3
MOV 39H,#6H ;倒计时654321
MOV 38H,#5H ;倒计时54321
MOV 5AH,#24 ;用于车速控制
MOV 36H,#0AH
MOV P3,#0CH
MOV P2,#0H
INT_ZONE:
LCALL SET_INT
RET
;**************************************************
SET_INT:
MOV TMOD,#01H
MOV TL0,#0F0H
MOV TH0,#0D8H
MOV TL1,#0B0H
MOV TH1,#03CH
SETB TR0
CLR TR1
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB IT0
SETB EX1
SETB IT1
RET
;**************************************************
SETCODEALL:;6543210
MOV R0,#30H
MOV R2,#6
SETCODEALL_LOOP:
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R2,SETCODEALL_LOOP
RET
;**************************************************
;**************************************************
MINE_WAY:
LCALL TRACK
JB 20H.3,MINE_WAY
MOV C,P3.2 ;下面有雷,就是低
JC MINE_WAY
;下面是关小灯和蜂鸣器
CLR P3.4
CLR P3.5
;看看长度是否超过4米
MOV A,40H
CJNE A,#4H,PASS_C
LJMP C_POINT
PASS_C:
JNC C_POINT
;下面调用一般雷的处理方法,再返回主程序
LCALL NORMAL_MINE
LJMP MINE_WAY
;下面是到达C点了
C_POINT:
CLR 20H.1
LCALL FIVE_SECOND
SETB 20H.3
SETB TR1
MOV 5AH,#23
LJMP BOLK
RET
;****************************************************
TRACK:
MOV A,P0
ANL A,#07H
CJNE A,#7H,SET_TURN
LJMP LIGHT_END
SET_TURN:
CJNE A,#3H,LIGHT_NEXT
RIGHT_LIGHT: ; 看右边的光敏元件
CLR P2.7 ;这时就要向右转弯了
SETB P2.6
LCALL TURN_DELAY
CLR P2.6
RET
LIGHT_NEXT: ; 左转了
CJNE A,#06H,LIGHT_END
SETB P2.7
SETB P2.6
LCALL TURN_DELAY
CLR P2.6
RET
LIGHT_END:
CLR P2.6
RET
;****************************************************
TURN_DELAY:
MOV 5AH,#26
MOV C, P0.1
JC TURN_DELAY
MOV A,36H
CJNE A,#0AH,IS_ZONE_B
MOV 5AH,#24
LJMP TURN_DELAY_END
IS_ZONE_B:
MOV 5AH,#20
TURN_DELAY_END:
RET
;****************************************************
NORMAL_MINE:
CLR TR1
CLR P2.6
;以下是保存雷长度
MOV A,3CH
ADD A,#53H
MOV R0,A
CLR C
MOV A,41H
ADD A,#100
SUBB A,3CH
CJNE A,#100,NORMAL_MINE_LENGTH
NORMAL_MINE_LENGTH:
JC NO_CHANGE
SUBB A,#100
NO_CHANGE:
MOV @R0,A
;以下是计算中点距起点的距离
MOV B,#2H
DIV AB
ADD A,3CH
CJNE A,#100,SET_CENTER
SET_CENTER:
JC NO_P_WAY
SUBB A,#100
INC 3BH
NO_P_WAY:
MOV 3CH,A
;保存中点距离
MOV A,3AH
DEC A
MOV B,#2H
MUL AB
MOV R0,48H
ADD A,R0
MOV R0,A
MOV A,3BH
MOV @R0,A
INC R0
MOV A,3CH
MOV @R0,A
CLR P3.0
CLR P3.1
CLR P2.6
CLR TR1
;以下是延时显示程序
LCALL DELAY_MINE2
CLR P3.1
SETB P3.0
SETB TR1
SETB 20H.3
RET
;****************************************************
DELAY_MINE1:
MOV R6,#2H
DELAY_LOOP_MINE1:
LCALL DELAY
DJNZ R6,DELAY_LOOP_MINE1
RET
;****************************************************
;****************************************************
DELAY_MINE2:
LCALL SET_CODE_MINE
MOV R5,#03H
DELAY_LOOP_MINE_F:
MOV R6,#08FH
DELAY_LOOP_MINE2:
LCALL OUT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -