动作描述交通灯控制有很多程序的写法,这次介绍一种可能是最简单的编程方法交通灯程序:
1.现有东西方向和南北方向交通灯,东西方向或者南北方向上的两组灯的亮灯逻辑一致交通灯程序;
2.东西方向和南北方向交通灯亮灯逻辑如图所示交通灯程序,东西方向红灯10秒,同时南北方向先绿灯亮5秒,再绿灯闪烁3秒,再黄灯亮2秒;反之亦然;
3.整个交通灯由一个总控开关控制。
硬件设备1.一台装有博途及其仿真软件
软件1.西门子plc编程软件:TIA 博途V16
2.博途仿真软件:PLCSIM V16
I/O分配
程序编写及思路同样,为便于后期修改,我们把交通灯程序做成一个功能块,块接口如图:
开始写程序,首先判断是否被激活:
定义一个定时器,自循环一个周期的时间,这里是20秒:
然后利用时间的当前值,来判断每个灯的状态:
然后,程序写完了。是的,你没看错,就只有这么长。
在主程序里调用赋值实际I/O点即可:
总结交通灯案例较简单,可以用很多种方法来实现。在此案例中用定时器来判断各个交通灯状态,简单易懂易操作,可以供大家参考。
(来源:技成培训网 。作者:张志强,未经授权不得转载,违者必究!)
80c51单片机交通灯程序
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