📄 noname1.asm
字号:
START: SETB P3.7 ;正向跑动
CLR P3.6
MOV 22H,#02H
MOV 23H,#00H
MAIN: JB P3.2,IN0RET
INC 23H ;跑道计数器加1
MOV A,23H ;数据入A
CJNE A,#06H,JUDGE1 ;不是第6道转JUDGE1
LCALL STOP ;是第6道,停车
DJNZ 22H,IN0RET
CLR P3.6
CLR P3.7
SJMP $
JUDGE1: CJNE A,#03H,JUDGE2 ;不是第3道转JUDGE2
LCALL STOPSLOW ;是第3道,变慢车
LJMP IN0RET ;
JUDGE2: CJNE A,#04H,JUDGE3 ;不是第4道转JUDGE3
LCALL FAST ;是第4道,变快车
LJMP IN0RET ;
JUDGE3: CJNE A,#05H,IN0RET ;不是第5道转INORET退出
LCALL STOPSLOW ;是第5道,变慢车
IN0RET: MOV A,23H ;跑道记数数码显示
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
SJMP MAIN
;共阴数码显示
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;************************************
;* 慢车控制子程序 *
;************************************
STOPSLOW:
CPL P3.6 ;反向驱动(刹车)
CPL P3.7 ;反向驱动
LCALL DS50MS ;刹车时间(可根据试车情况调整)
LCALL DS50MS ;
LCALL DS50MS
LCALL DS50MS ;
RET ;返回
;************************************
;* 快车控制子程序 *
;************************************
FAST: CPL P3.6 ; 关4.3V电源
CPL P3.7 ; 开7.5V电源
RET ;返回
;
;************************************
;* 停车控制程序 *
;************************************
STOP: MOV 23H,#00H ;跑道计数单元清0
CPL P3.6 ;反向驱动(刹车)
CPL P3.7 ;反向驱动(刹车)
LCALL DS50MS ;刹车时间
LCALL DS50MS ;刹车时间(可调整)
LCALL DS50MS
LCALL DS50MS
SETB P3.7 ;关电机电源
SETB P3.6
LCALL DS10S ;停车10秒
SETB P3.6 ;汽车反向返回
CLR P3.7 ;
SJMP MAIN
STREN: RET ;返回
;1毫秒延时程序
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;7毫秒延时程序
DS50MS: LCALL DL1MS ;(7毫秒)
LCALL DL1MS
LCALL DL1MS
DS20MS: LCALL DL1MS
LCALL DL1MS
LCALL DL1MS
RET
;10秒延时程序
DS10S: MOV R2,#08H ;(8*11*16*7=9956毫秒)
TI0: MOV R0,#0B0H
TI1: LCALL DL1MS
DJNZ R0,TI1
DJNZ R2,TI0
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -