库升汽车网
您的当前位置:首页基于ATC51的交通灯控制系统

基于ATC51的交通灯控制系统

来源:库升汽车网




基于ATC51的交通灯控制系统

作品设计、发明的目的和基本思路

随着我国经济的高速发展,人们对各种交通车辆的需求量不断增大,城市的

交通拥护问题日益严重,FI前,大部分城市的十字路口的交通控制灯,通常的做法

是:事先经过车辆流量的调查,利用传统的方法设计好红绿灯的延吋,然而,实际

上的车流量是不断变化的,有的路口在不同的吋间段车流量的大小甚至有很大的

差异,所以说,统计的方法己不能适应迅速发展的交通现状。

H前,国内的交通灯一?般设在十字路门,在醒H位置用红、绿、黄三种颜色

的指示灯。加上一个倒计吋的显示计吋器来控制行车。对于一般情况下的安全行

车,车辆分流尚能发挥作用,但根据实际行车过程屮出现的情况,还存在以下缺

点:1.两车道的车辆轮流放行时间相同且固定,在十字路口,经常一?个车道为主

干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间

应该短些。2.没有考虑紧急车通过吋,两车道应采取的措施,臂如,消防车执行紧

急任务通过吋,两车道的车都应停止,让紧急车通过。

本系统是以ATC51单片机作为控制系统的核心,模拟定周期交通信号灯的工作状态。并采用PROTEUS进行仿真,仿真结果满足预期性能要求。设计内容和要求:

利用ATC51单片机设计一-卜字路口交通灯控制系统。

1系统由单片机系统、数码管显示、交通灯演示系统组成。

2具有人行道、左转、右转,以及基本的交通灯的功能。

3具有数码管倒计时功能。

4要求甲乙车道的车辆交替运行,每次通行为60秒。为绿灯的车道先显示40 秒的直行,再显示20秒的左行。

5要求黄灯先亮四秒,才能变换车道,黄灯亮时要求闪亮。

硬件设计

控制流程分析:

(1)从十字路口交通灯示意图1分析可知:东西、南北方向信号灯控制是屮心对称的,即无论是主干

道还是支干道两侧系统对同方向的信号灯控制是同步的。

(2)从示意图分析可知,人行道乞个方向,系统对两侧的信号灯的控制也是同步的,且人行道的红绿

灯变化和行车道的红绿灯变化应该是一致的。

(3) 通过上面的分析,可以采用单片机的p0-p3口及r0r7寄存器配合来实现控制发光二极管灯和数

码管。

系统的硬件设计

木系统选用通过P0p3U用做输出显示控制口。P0口用作输出南北方向led数码管字符编码,P1口用

作输出东西方向led数码管字符编码。P2口用于输出东西、南北方面LED数码管的位选信号,以及各个人

行道发光二极管的控制信号的输出。P3口用于输出东西、南北方向信号灯控制信号。

LED数码管采用动态显示方式实现倒计时读秒,并且木系统的了led采用的是LED



共阳极接法,共阳极接法如图2所示:
共阳极7LED显示字型编码表(表一):
LED动态显示,在多位LED显示时,为了简化电路,降低成木,将段选位并联在一起,由一个八位的I/O口控制,而位选由另一个口控制,段选码、位选码每次送入后演示1ms,而人的视觉粋留时间为0.1s,

以在人看来数码管一直亮着,从而在应用屮通过动态扫描的方法显示。

交通灯的正常显示

交通灯系统的丁?作状态:

上电后,南北方向数码管显示40,东西方向数码管显示60,南北方向的直行绿灯亮,车辆可以岚行可

以右行,人行红灯亮行人不能通过;东西方向红灯亮车辆不能通行,人行绿灯亮人可以通行。当南北数码

管显示为4时,直行绿灯熄火,黄灯闪烁4秒,然后南北数码管显示20,左转绿灯亮车辆可以左行,人行灯和东西方向灯同上一状态,当数码管减到四时南北黄灯闪烁4秒,然后红灯亮,数码管显示60,南北车辆禁止通行,人行绿灯亮;南北数码管显示60的同时东西数码管显示40,肓行绿灯亮,车辆可以肓行可以右行,人行红灯亮,当东西数码管显示为4时,直行绿灯熄灭,黄灯闪烁4秒,然后东西数码管显示20,左转绿灯亮车辆可以左行,人行灯和南北方向灯同上一状态,当数码管减到4时东西黄灯闪烁4秒,然后红灯亮,东西数码管显示60,南北显示40,随后依次循环……

交通灯原理图:

;屮…
-13- >XTAU

12- XTAL2

SL


P2BW8

P2.W

P22W10

REN

P23ft11
P2OM2

P25A13

P26WH

P2.7A1S

P1D P3XXD

P1.1 P1VTXD P32AN7D

P12

P1J P331NT7

P1.< P3.4/TD

P1S P3SH

P15 P3?WR

P1.? P31/RD


? D20* ?


Q


-


<TE>0^

LEO-GRE0I

...................................

PROGR^W-iAn JJEX

? 5TEXT>

LED-RH)

^rrrrrrri :严島

;?p<Tr TE6

D17

软件设计:

根据设计要求有汇编语言编写的交通灯源程序如下:



ORG

0000H

;主函数地址

LJMP

MAIN

;中断定时器0地址

ORG

OOOBH

LJMP

INTERPUT

;表的首地址

ORG

0030H

LJMP

TABLE

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H MAIN:

MOV
MOV
MOV
MOV
MOV

MOV
MOV
MOV

MOV
SETB
SETB
SETB

P2, #()0H

;给卩2 口赋初值,让数码管刚开始都不亮

R2, #60

R260,使东西的数码管显示初值为60

R3, #40

;给只340,使南北的数码管显示初值为40

P3, #0

;使人形道的灯初始都不亮

R5, #0

R5,R6赋初值0

R6, #0

TMOD, #01H

;定时器0工作方式1

THO, #79

;给定时器赋初值

TLO,

#0AEH

EA

;允许总屮断

ETO

;开启定时器0屮断

TRO

;开启定时器计时

L2:

LCALL DISPLAY 1 LCALL DISPLAY2 LCALL CHOOSE 1 LCALL CHOOSE2

;显示东西数码管
;显示南北数码管
;调用东西判断函数
;调用南北判断函数
;一直循环

SJMP

L2

INTERPUT:

MOV

MOV

MOV

INC
CJNE

MOV
DEC
DEC

TH0, #22H

;定时器中断里重现给定时器0赋初值

TLO, #0D8H

A,

R4

R4

;定时器中断一次50MS,中断一次R4+I

A,

#20,L3 ;判断是不是加到20 ,即定时器定时1S

R4,

#0

;R4加到20,则清0

R3

;要是定时1S到了,则把R2,R3的值都减1

R2

L3:

RETI
CHOOSE 1:

;中断退出
;东西判断函数

MOV

A,

R5

;热是一个标志

CJNE

A,

#1, K1 ;判断R5是不是等于1,不等于1跳到K1 ;要是标志位等于1

MOV

A, R2

CJNE

A, #4,

K5

;而且R2等于4,则开启黄灯,关闭车道绿灯

SETB

P3.2

CLR

P3.3




K1:

SJMP

K3

K3 ;要是R2小于4则闪烁绿灯

K5:

JNC

CPL

P3.2

K3 ;判断R2是不是等于0,

MOV

A, R2

CJNE

A, #0,

INC

R5

;等于0则让标志位+1

CLR

P3.2

;清黄灯,开车道的左行绿灯,置人行道红灯

SETB

P3.0

#20

MOV

R2,

SETB

P2.6

CJNE这个指令比较好R51的值,要是R5大于1,

CLR

P2.7

SJMP

K3

JNC

K2

c=0,Zc=i,这里判断c是否等于(),既判断是否小于1,小于1执行下行,大于

1则跳转K2

MOV

A, R2

;初值状态R260,

判断R2是不是60, 60的话开车道的

CJNE

A, #60, K7

红灯,开人行道的绿灯

K7:

SETB

P3.1

;退出

判断R2是不是等于0,等于0则把标

SETB

P2.7

CLR

P2.6

SJMP

K3

CJNE

A, #(), K3

;要是R2不等于60,

志位R51,让车道绿灯亮,红灯灭,人行道红灯亮

K2:

INC

R5

#40

;再给数码管赋初值

CLR

P3.1

SETB

P3.3

MOV

R2,

CLR

P2.7

R2

;退出

SETB

P2.6

SJMP

K3

MOV

A,

;标志位R5大于I则跳到这里

;判断R24的值,等于4则开启黄灯,关闭车道的绿

CJNE

A, #4, K6

灯,要是不等于是,则跳到K6

K6:

CLR

P3.0

;判断R2是不是小于4,小于4则闪烁黄灯,大于4则直接退岀

SETB

P3.2

SJMP

K3

JNC

K3

CPL

P3.2

;取反

MOV

A,

R3

CJNE

A, #0,

K3

;判断R2是不是等于0

MOV

R5, #0

;等于0则清标志位,因为我们只设置了 0.1.2这三个状态,至U2

了以后要清0,让他重新开始循环
MO V R 2 , # 6 0 ;给只2赋初值,开车道红灯,关车道左行绿灯,开人行道绿灯,



关人行道红灯

K3:

SETB

P3.1

CLR

P3.2

SETB

P2.7

CLR

P2.6

RET



CHOOSE2:

MOV
CJNE

MOV

CJNE
SETB

CLR

SJMP

南、A, R6

A, #1,

H2

A, R3

A, #4,

H6

P3.6
P3.4

H3

H3

P3.6

H6:

JNC

CPL
CJNE
INC
CLR

SETB
MOV
SETB
CLR
SJMP

A, #0,

H3

R6
P3.6

P3.5
R3, #60
P2.4
P2.5
H3
H4

A, R3
A, #40,H7 P3.7
P2.5

P2.4
H3
A, R3

H2:

JNC

MOV
CJNE
SETB
SETB

CLR
SJMP

H7:

MOV

CJNE
SETB

CLR

SJMP

A, #4,

H5

P3.6
P3.7
H3
H3
P3.6

H5:

JNC

CPL

CJNE
SETB
CLR
INC

MOV
SETB

A, #0,

H3

P3.4
P3.6
R6

R3, #20
P2.5




,程序和东、西判断一致,这里就不写注释了



CLR
SJMP

P2.4
H3

H4:

MOV
CJNE
SETB
CLR

MOV
MOV
SETB
CLR

A, R3
A, #0, H3
P3.7
P3.5

R6, #0
R3, #40
P2.5
P2.4

;显示东西数码管(动态显示)A, R2 ;R2放到A

H3:

RET

DISPLAY 1:
MOV

MOVB, #10

DIVAB ;2位的10进制数的十位和个位分开MOVDPTR, #TABLE ;TABLE表的首地址给DPTR

MOVC A, @A+DPTR

;把表的第N个数据给A;

MOV

Pl,

A

数据送到数码管屮
;显示数码管
涎时
;把数码管暗掉
;把个位给A
;把表的个位个数给A
;把数据送到数码管屮
;显示数据
;延时
;让数码管暗掉

SETB

P2.0

LCALL

DELAY

CLR

P2.0

MOV

A

,B

MOVC

A,

@A+DPTR

MOV

Pl,

A

SETB P2.I
LCALL DELAY
CLR P2.I

RET

DISPLAY2:

;显示南北数码管(显示函数和上面一样,这里注释就不写了)

MOV

A, R3

MOV

B, #10

DIV

AB

MOV

DPTR, # TABLE

MOVC

A, @A+DPTR

MOV

P0, A

SETB

P2.2

LCALL

DELAY

CLR

P2.2

MOV

A, B

MOVC

A, @A+DPTR

MOV

P0, A

SETB

P2.3

LCALL

DELAY






CLRP2.3
RET

DELAY:

MOV

RO,

END

;延时函数

LI:

MOV

#20

DJNZ

Rl,

#25

DJNZ

Rl,

$

RET

RO,

LI

电路的仿真:

XTAL1

FO?A>O

6

XTAQ

FO.VAI1

F02tA?2 raarxH

wr

WSAH

FOiTAM

RUM?

F3CT

nan nvfs

F22TAC R23A11

All

g

BT

ttSfAO

MD

HlfAU mg

jM.t

F1VDO

J M2

町划ITD

J MS

HW!

HE

PJinri

JM?

CffiH
mtn

<W..

......................................................."



Ut

XTALt

KIOKDC

IQM1
IO?&2
XTAU KUM3
ra?AD<
msAoe

RST

rarMT



t2IM

JK9999U3I


WMH

?M
niM

10
M
I

13
1 <
IB

nowxo

njfiTT

"TO
ns/n

nrmo

R0G2么。rrTtt?nHEX

XTM1 Egg

XTA12 W3M3
raMDi
R15*O5
K!?MD6

R$T ra?M7

P2DM

nws

nukxi

F2?0

F2MK

<reo..

R27M15

P1D
P1.1

P3OTXD

PU

F3VTXD

PU

P2HTH)

Pl.<

3fiTT

115

fiWGR^HKn ttfeinjicx

显示全文