ORG 1000H
L:JNB P3.0,LP3
JNB P3.1,LP2 ;判断p3.1,p3.0口
;如果P3.0为1的话,正常运行交通灯
;如果P3.1为1的话,正常运行交通灯
;如果P3.1为0的话,依次点亮灯
;如果P3.0为0的话,停止交通灯,只有黄灯闪烁
;正常运行交通灯
LP1:
MOV P1,#61H
CLR P3.2
CLR P3.3
CLR P3.4
SETB P3.5 ;1,3 路口红灯亮,2,4 路口绿灯亮
LCALL DELAY1
MOV B,#04H ;设置循环次数为4次
M:MOV P1,#51H
CLR P3.5
SETB P3.4 ;1,3路口红灯亮,2,4路口黄灯亮
LCALL DELAY2
MOV P1,#41H
CLR P3.4 ;1,3路口红灯亮,2,4路口黄灯灭
LCALL DELAY2
DJNZ B,M
MOV P1,#0CH
SETB P3.2
SETB P3.3 ;1,3路口绿灯亮,2,4路口红灯亮
LCALL DELAY1
MOV B,#04H
N:MOV P1,#8AH
CLR P3.2 ;1,3路口黄灯亮,2,4路口红灯亮
LCALL DELAY2
MOV P1,#08H ;1,3路口黄灯灭,2,4路口红灯亮
LCALL DELAY2
DJNZ B,N
AJMP L
;黄灯闪
LP3: CLR P1.7
CLR P3.2
CLR P3.3
CLR P3.5
MOV P1,#92H
SETB P3.4 ;黄灯亮,其他的灯灭
LCALL DELAY2
MOV P1,#00H
CLR P3.4 ;所有的黄灯灭
LCALL DELAY2
AJMP L
;循环亮
LP2: CLR P3.2
CLR P3.3
CLR P3.4
CLR P3.5
MOV A,#01H ;赋初值
MOV R0,#08 ;循环变量,循环7次,控制7个灯
LOOP: MOV P1,A ;点亮第一个灯
LCALL DELAY2 ;延迟
RL A ;A的值加1,循环左移
DJNZ R0,LOOP ;RO的值减1不等于1则执行LOOP标号
SETB P3.2 ;P3.2灯亮
LCALL DELAY2 ;延迟
CLR P3.2 ;P3.2灯灭
SETB P3.3 ;下一个灯P3.3亮
LCALL DELAY2 ;延迟
CLR P3.3 ;P3.3灯灭
SETB P3.4 ;下一个灯P3.3亮
LCALL DELAY2 ;延迟
CLR P3.4 ;P3.4灯灭
SETB P3.5 ;P3.5灯亮
LCALL DELAY2 ;延迟
AJMP L
;延迟1
DELAY1 :
MOV R3,#200
DEL1: MOV R4,#250
DEL2: MOV R5,#50
DEL3: NOP ;空操作
DJNZ R5,DEL3
DJNZ R4,DEL2
DJNZ R3,DEL1 ;延长5秒
RET
;延迟2
DELAY2 :
DEL4: MOV R3,#200
DEL5: MOV R4,#200
DEL6: NOP
DJNZ R4,DEL6
DJNZ R3,DEL5 ;延迟0.08秒
RET
END
温馨提示:内容为网友见解,仅供参考