基于ATC51的交通灯控制系统
作品设计、发明的目的和基本思路
随着我国经济的高速发展,人们对各种交通车辆的需求量不断增大,城市的
交通拥护问题日益严重,FI前,大部分城市的十字路口的交通控制灯,通常的做法
是:事先经过车辆流量的调查,利用传统的方法设计好红绿灯的延吋,然而,实际
上的车流量是不断变化的,有的路口在不同的吋间段车流量的大小甚至有很大的
差异,所以说,统计的方法己不能适应迅速发展的交通现状。
H前,国内的交通灯一?般设在十字路门,在醒H位置用红、绿、黄三种颜色
的指示灯。加上一个倒计吋的显示计吋器来控制行车。对于一般情况下的安全行
车,车辆分流尚能发挥作用,但根据实际行车过程屮出现的情况,还存在以下缺
点:1.两车道的车辆轮流放行时间相同且固定,在十字路口,经常一?个车道为主
干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间
应该短些。2.没有考虑紧急车通过吋,两车道应采取的措施,臂如,消防车执行紧
急任务通过吋,两车道的车都应停止,让紧急车通过。
本系统是以ATC51单片机作为控制系统的核心,模拟定周期交通信号灯的工作状态。并采用PROTEUS进行仿真,仿真结果满足预期性能要求。设计内容和要求:
利用ATC51单片机设计一-卜字路口交通灯控制系统。
1:系统由单片机系统、数码管显示、交通灯演示系统组成。
2:具有人行道、左转、右转,以及基本的交通灯的功能。
3:具有数码管倒计时功能。
4:要求甲乙车道的车辆交替运行,每次通行为60秒。为绿灯的车道先显示40 秒的直行,再显示20秒的左行。
5:要求黄灯先亮四秒,才能变换车道,黄灯亮时要求闪亮。
硬件设计
控制流程分析:
(1)从十字路口交通灯示意图1分析可知:东西、南北方向信号灯控制是屮心对称的,即无论是主干
道还是支干道两侧系统对同方向的信号灯控制是同步的。
(2)从示意图分析可知,人行道乞个方向,系统对两侧的信号灯的控制也是同步的,且人行道的红绿
灯变化和行车道的红绿灯变化应该是一致的。
(3) 通过上面的分析,可以采用单片机的p0-p3口及r0到r7寄存器配合来实现控制发光二极管灯和数
码管。
系统的硬件设计
木系统选用通过P0到p3U用做输出显示控制口。P0口用作输出南北方向led数码管字符编码,P1口用
作输出东西方向led数码管字符编码。P2口用于输出东西、南北方面LED数码管的位选信号,以及各个人
行道发光二极管的控制信号的输出。P3口用于输出东西、南北方向信号灯控制信号。
LED数码管采用动态显示方式实现倒计时读秒,并且木系统的了led采用的是LED的
共阳极接法,共阳极接法如图2所示:
共阳极7段LED显示字型编码表(表一):
LED动态显示,在多位LED显示时,为了简化电路,降低成木,将段选位并联在一起,由一个八位的I/O口控制,而位选由另一个口控制,段选码、位选码每次送入后演示1ms,而人的视觉粋留时间为0.1s,所
以在人看来数码管一直亮着,从而在应用屮通过动态扫描的方法显示。
交通灯的正常显示
交通灯系统的丁?作状态:
上电后,南北方向数码管显示40,东西方向数码管显示60,南北方向的直行绿灯亮,车辆可以岚行可
以右行,人行红灯亮行人不能通过;东西方向红灯亮车辆不能通行,人行绿灯亮人可以通行。当南北数码
管显示为4时,直行绿灯熄火,黄灯闪烁4秒,然后南北数码管显示20,左转绿灯亮车辆可以左行,人行灯和东西方向灯同上一状态,当数码管减到四时南北黄灯闪烁4秒,然后红灯亮,数码管显示60,南北车辆禁止通行,人行绿灯亮;南北数码管显示60的同时东西数码管显示40,肓行绿灯亮,车辆可以肓行可以右行,人行红灯亮,当东西数码管显示为4时,直行绿灯熄灭,黄灯闪烁4秒,然后东西数码管显示20,左转绿灯亮车辆可以左行,人行灯和南北方向灯同上一状态,当数码管减到4时东西黄灯闪烁4秒,然后红灯亮,东西数码管显示60,南北显示40,随后依次循环……
交通灯原理图:
;屮… 12- XTAL2
|
| ||||||||||||||||||||||||||||||
SL |
| ? D20* ? |
|
<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 | P2, #()0H | ;给卩2 口赋初值,让数码管刚开始都不亮 | |
R2, #60 | 潍R2赋60,使东西的数码管显示初值为60 | ||
R3, #40 | ;给只3赋40,使南北的数码管显示初值为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 MOV | 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 | ;中断退出 | ||||
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这个指令比较好R5和1的值,要是R5大于1,则 | |
CLR | P2.7 | ||
SJMP | K3 | ||
JNC | K2 |
c=0,反Zc=i,这里判断c是否等于(),既判断是否小于1,小于1执行下行,大于
1则跳转K2
MOV | A, R2 | ;初值状态R2是60, | 判断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, |
志位R5加1,让车道绿灯亮,红灯灭,人行道红灯亮
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则跳到这里 | ||
;判断R2和4的值,等于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 MOV CJNE CLR SJMP | ; | 北 | |
南、A, R6 | |||
A, #1, | H2 | ||
A, R3 | |||
A, #4, | H6 | ||
P3.6 H3 H3 P3.6 | |||
H6: | JNC | ||
CPL SETB | |||
A, #0, | H3 | ||
R6 P3.5 A, R3 P2.4 | |||
H2: | JNC | ||
MOV CLR | |||
H7: | MOV | ||
CJNE CLR SJMP | A, #4, | H5 | |
P3.6 | |||
H5: | JNC | ||
CPL CJNE MOV | |||
A, #0, | H3 | ||
P3.4 R3, #20 | |||
,程序和东、西判断一致,这里就不写注释了
CLR | P2.4 |
H4:
MOV MOV | A, R3 R6, #0 ;显示东西数码管(动态显示)A, R2 ;将R2放到A屮 | |
H3: | RET | |
DISPLAY 1: | ||
MOVB, #10
DIVAB ;将2位的10进制数的十位和个位分开MOVDPTR, #TABLE ;取TABLE表的首地址给DPTR
MOVC A, @A+DPTR
;把表的第N个数据给A;把
MOV | Pl, | A | 数据送到数码管屮 |
SETB | P2.0 | ||
LCALL | DELAY | ||
CLR | P2.0 | ||
MOV | A | ,B | |
MOVC | A, | @A+DPTR | |
MOV | Pl, | A | |
SETB 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 | ||
<W.. |
......................................................."旳
Ut
XTALt | KIOKDC |
IQM1
IO?&2
XTAU KUM3
ra?AD<
msAoe
RST | rarMT |
| |
| t2IM |
|
WMH
?还M
niM
10 ; 13 | nowxo njfiTT 和"TO 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 | P3OTXD | ||
PU | F3VTXD | ||
PU | P2HTH) | ||
Pl.< | 门 3fiTT | ||
115 | |||
忙 | |||
fiWGR^HKn ttfeinjicx | |||