80c51单片机交通灯程序

2024年11月22日 19:10
有4个网友回答
网友(1):

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

网友(2):

基于51单片机的交通灯仿真51单片机交通灯仿真



懂事电子设计 Vgz

网友(3):

看起来不简单......

网友(4):

http://www.fxdzw.com/dzsj/jtdkz_sj.htm