文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
用单片机控制交通灯
传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。下面介绍一种用单片机控制交通灯的方法。
一、硬件 硬件电路如附图。AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。
二、软件 交通灯有红、黄、绿三种。红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。红灯亮60秒,绿灯亮55秒,黄灯亮5秒。每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。另外,为了简化电路,红、黄、绿灯采用低电平点亮。
源程序清单如下:
ORG 0000H
START:MOV DRTR,#TAB MOV SCON,#00H
MOV P1,#6CH ;点亮红、绿灯 MOV R0,#0 ;R0清零 LEFT: INC R0
CJNE R0,#55,LP0 ;R0<55,转LP0 MOV P1,#6AH ;R0=55,点亮红、黄灯 LJMP LP1
LP0: CJNE R0,#60,LP1 ;R0<60,转LP1 MOV P1,#0C6H ;R0=60,点亮绿、红灯 LJMP RIGHT
LP1: LCALL DBDB LCALL DISP
LJMP LEFT ;20H为1, 转LEFT RIGHT:DEC R0
CJNE R0,#5,LP2 ;R0>0,转LP2 MOV P1,#0A6H ;R0=5,点亮黄、红灯 LJMP LP3
LP2: CJNE R0,#0,LP3
MOV P1,#6CH ;R0=0,点亮红、绿灯 LJMP LEFT LP3: LCALL DBDB
1文档收集于互联网,如有不妥请联系删除.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
LCALL DISP LJMP RIGHT DBDB: MOV A,R0 MOV B,#10 DIV AB MOV R1,A MOV R2,B RET
DISP: MOV A,R2 MOVC A,@A+DPTR MOV SBUF,A JNB TI,$;查TI位 CLR TI MOV A,R1 MOVC A,@A+DPTR MOV SBUF,A
JNB T1,$ CLR TI
LCALL DEALY RET
DELAY:MOV R3,#09H K1: MOV R4,#100 K2: MOV R5,#250 K3: DJNZ R5,K3 DJNZ R4,K2 KJNZ R3,K1 RET
TAB: DB 3FH,06H,5BH DB 4FH,66H DB 6DH,7DH,07H DB 7FH,6FH
三.实验电路及连线
四.实验说明
1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转
2文档收集于互联网,如有不妥请联系删除.
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。
2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
五.实验程序框图
程序框图:
源代码:
START:
CIRCLE: LCALL 西红灯
转黄灯
STATUS0: 红灯
STATUS1: 红灯
灯
0000H START 0040H SP,#60H
STATUS0 ;初始状态(都是红灯) STATUS1 ;南北绿灯,东西红灯
STATUS2 ;南北绿灯闪转黄灯,东 STATUS3 ;南北红灯,东西绿灯 STATUS4 ;南北红灯,东西绿灯闪 CIRCLE
;南北红灯,东西 DPTR,#8300H A,#0FH @DPTR,A
R2,#10 ;延时1秒 DELAY ;南北绿灯,东西 DPTR,#08300H
A,#5AH ;南北绿灯,东西红 @DPTR,A
R2,#50 ;延时5秒 DELAY 3文档收集于互联网,如有不妥请联系删除.
ORG LJMP ORG MOV LCALL LCALL LCALL LCALL LJMP MOV MOV MOVX MOV LCALL RET
MOV MOV MOVX MOV LCALL RET
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
STATUS2: ;南北绿灯闪转黄灯,东西红灯
MOV DPTR,#8300H
MOV R3,#03H ;绿灯闪3次 FLASH: MOV A,#5FH
MOVX @DPTR,A MOV R2,#03H LCALL DELAY MOV A,#5AH 灯
STATUS3: 绿灯
STATUS4: 绿灯闪转黄灯
FLASH1: MOV @DPTR,A R2,#03H DELAY R3,FLASH
A,#0AH ;南北黄灯,东西红 @DPTR,A
R2,#10 ;延时1秒 DELAY ;南北红灯,东西 DPTR,#8300H A,#0A5H @DPTR,A
R2,#50 ;延时5秒 DELAY ;南北红灯,东西 DPTR,#8300H
R3,#03H ;绿灯闪3次 A,#0AFH
@DPTR,A R2,#03H DELAY A,#0A5H @DPTR,A R2,#03H DELAY
R3,FLASH1
A,#05H ;南北红灯,东西黄灯 @DPTR,A
R2,#10 ;延时1秒 DELAY
4文档收集于互联网,如有不妥请联系删除.
MOVX MOV LCALL DJNZ MOV MOVX MOV LCALL RET
MOV MOV MOVX MOV LCALL RET
MOV MOV MOVX MOV LCALL MOV MOVX MOV LCALL DJNZ MOV MOVX MOV LCALL 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
NOP
RET
DELAY: ;延时子程序 PUSH 2 PUSH 1 PUSH 0 DELAY1: MOV 1,#00H DELAY2: MOV 0,#0B2H DJNZ 0,$
DJNZ 1,DELAY2 ;延时 100 mS DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END
交通灯的程序及流程图
电路说明: 由六个LED(两组红、绿、黄)控制东西向和南北向车流,两位数码管显示本状态剩余时间(秒),具体灯亮的的方式如下:
流程图
程序如下:
ORG 0000H AJMP MAIN MAIN: MOV P2,#00H SETB P3.0 CLR P2.7
MOV P0,#0EEH ;LED显示红红 LCALL DEL CLR P3.0
MOV 7EH,#04H ;把41S 3S送入显示缓冲区 MOV 7DH,#01H MOV 7AH,#00H MOV 79H,#03H LCALL DISP MOV R6,#03H MOV R4,#29H AA1: MOV R5,#50H AA2: LCALL DISP
5文档收集于互联网,如有不妥请联系删除.
用单片机控制交通灯源程序代码及流程图



