交通灯控制电路设计
主、支干道上红、黄、绿信号灯的状态主要取决于状态控制器的输出状态。它们之间的关系见真值表,对于信号灯的状态,1表示灯亮,0表示灯灭。
表8-1
信号灯状态真值表
状态控制器输出
主干道信号灯
支干道信号灯
q2
q1
r
y
g
r
y
g
0
0
0
0
1
1
0
0
0
1
0
1
0
1
0
0
1
0
1
0
0
0
0
1
1
1
1
0
0
0
1
0
选择发光二极管模拟交通灯,由于门电路带灌电流的能力强,要求门电路输出低电平时,点亮相应的发光二极管。
根据设计任务的要求,当黄灯亮时,红灯按1hz的频率闪烁。从信号灯信号状态真值表中可以看出,黄灯亮时,q1必为高电平;而红灯亮信号无关。可利用q1信号去控制一个三态门电路74ls245(或模拟开关),当q1为高水平时(q1非为低电平,控制三态门的en非),将秒脉冲信号引到驱动红灯的与非门的输入端,使红灯在黄灯亮期间闪烁;反之将其隔离,红灯信号不受黄灯信号的影响。
红绿灯是有相位的。一个十字路口的两个方向的直行和左转都完成后所用的时间和过程称之为相位。
相位是根据各个路口的车流量经过计算后来定的。所以每个路口的相位不一样.
开始先是测算流量,测算一个时间段内各个方向的各种交通流量(行人、非机动车、机动车)的流量以及最高峰流量。然后根据交通流量的规律来计算它们运行所需要的时间,然后才确定每个路口红灯和绿灯的时间,进而确定相位。
转向灯是机动车的一个零部件,跟红绿灯是没有关系的。转向灯的作用只是为了表示自己车辆即将运行的方向,以便周围的车采取相应的措施。比如你要左转的时候,要提前30米左右打转向,然后别的车看见会注意刹车或慢行,对你转弯有好处,当你转过弯的方向回正的时候,转向灯会自己恢复到原位。
参考我的回答。 http://zhidao.baidu.com/question/37405994.html
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。系统除基本的交通灯功能外,还具有倒计时功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用KEILC编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。经过整机调试,实现了对十字路口交通灯的模拟。中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。
#defineucharunsigned char
#defineuintunsigned int
#include<reg52.h>
sbit Time_Show_LED2=P2^5//Time_Show_LED2控制位
sbit Time_Show_LED1=P2^4//Time_Show_LED1控制位
sbitEW_LED2=P2^3//EW_LED2控制位
sbitEW_LED1=P2^2//EW_LED1控制位
sbitSN_LED2=P2^1//SN_LED2控制位
sbitSN_LED1=P2^0//SN_LED1控制位
sbit SN_Yellow=P1^6//SN黄灯
sbit EW_Yellow=P1^2//EW黄灯
sbit EW_Red=P1^3//EW红灯
sbit SN_Red=P1^7//SN红灯
sbit EW_ManGreen=P3^0//EW人行道绿灯
sbit SN_ManGreen=P3^1//SN人行道绿灯
sbit Special_LED=P2^6//交通正常指示灯
sbit Busy_LED=P2^7//交通繁忙指示灯
sbit Nomor_Button=P3^5//交通正常按键
sbit Busy_Btton=P3^6//交通繁忙按键
sbit Special_Btton=P3^7//交通特殊按键
sbit Add_Button=P3^3//时间加
sbit Reduces_Button=P3^4//时间减
bit Flag_SN_Yellow //SN黄灯标志位
bit Flag_EW_Yellow//EW黄灯标志位
charTime_EW//东西方向倒计时单元
charTime_SN//南北方向倒计时单元
uchar EW=60,SN=40,EWL=19,SNL=19 //程序初始化赋值,正常模式
uchar EW1=60,SN1=40,EWL1=19,SNL1=19//用于存放修改值的变量
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}//1~~~~9段选码
uchar code S[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84}//交通信号灯控制代码
voidDelay(uchar a)
{
uchari
i=a
while(i--){}
}
voidDisplay(void)
{
char h,l
h=Time_EW/10
l=Time_EW%10
P0=table[l]
EW_LED2=1
Delay(2)
EW_LED2=0
P0=table[h]
EW_LED1=1
Delay(2)
EW_LED1=0
h=Time_SN/10
l=Time_SN%10
P0=table[l]
SN_LED2=1
Delay(2)
SN_LED2=0
P0=table[h]
SN_LED1=1
Delay(2)
SN_LED1=0
h= EW1/10
l= EW1%10
P0=table[l]
Time_Show_LED1=1
Delay(2)
Time_Show_LED1=0
P0=table[h]
Time_Show_LED2=1
Delay(2)
Time_Show_LED2=0
}
voidEXINT0(void)interrupt 0 using 1
{
EX0=0 //关中断
if(Add_Button==0) //时间加
{
EW1+=5
SN1+=5
if(EW1>=100)
{
EW1=99
SN1=79
}
}
if(Reduces_Button==0) //时间减
{
EW1-=5
SN1-=5
if(EW1<=40)
{
EW1=40
SN1=20
}
}
if(Nomor_Button==0)//测试按键是否按下,按下为正常状态
{
EW1=60
SN1=40
EWL1=19
SNL1=19
Busy_LED=0//关繁忙信号灯
Special_LED =0//关特殊信号灯
}
if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态
{
EW1=45
SN1=30
EWL1=14
SNL1=14
Special_LED=0//关特殊信号灯
Busy_LED=1//开繁忙信号灯
}
if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
{
EW1=75
SN1=55
EWL1=19
SNL1=19
Busy_LED=0//关繁忙信号灯
Special_LED =1//开特殊信号灯
}
EX0=1//开中断
}
void timer0(void)interrupt 1 using 1
{
static uchar count
TH0=(65536-50000)/256
TL0=(65536-50000)%256
count++
if(count==10)
{
if(Flag_SN_Yellow==1) //测试南北黄灯标志位
{SN_Yellow=~SN_Yellow}
if(Flag_EW_Yellow==1) //测试东西黄灯标志位
{EW_Yellow=~EW_Yellow}
}
if(count==20)
{
Time_EW--
Time_SN--
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_Yellow=~SN_Yellow}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_Yellow=~EW_Yellow}
count=0
}
}
voidmain(void)
{
Busy_LED=0
Special_LED=0
IT0=1//INT0负跳变触发
TMOD=0x01//定时器工作于方式1
TH0=(65536-50000)/256//定时器赋初值
TL0=(65536-50000)%256
EA=1 //CPU开中断总允许
ET0=1//开定时中断
EX0=1//开外部INTO中断
TR0=1//启动定时
while(1)
{
EW_ManGreen=0//EW人行道禁止
SN_ManGreen=1//SN人行道通行
Flag_EW_Yellow=0 //EW关黄灯显示信号
Time_EW=EW
Time_SN=SN
while(Time_SN>=5)
{P1=S[0] //SN通行,EW红灯
Display()}
P1=0x00
while(Time_SN>=0)
{Flag_SN_Yellow=1 //SN开黄灯信号位
EW_Red=1 //SN黄灯亮,等待左拐信号,EW红灯
Display()
}
Flag_SN_Yellow=0 //SN关黄灯显示信号
Time_SN=SNL
while(Time_SN>=5)
{P1=S[2]//SN左拐绿灯亮,EW红灯
Display()}
P1=0x00
while(Time_SN>=0)
{Flag_SN_Yellow=1//SN开黄灯信号位
EW_Red=1 //SN黄灯亮,等待停止信号,EW红灯
Display()}
EW=EW1
SN=SN1
EWL=EWL1
SNL=SNL1
EW_ManGreen=~EW_ManGreen//EW人行道通行
SN_ManGreen=~SN_ManGreen//SN人行道禁止
Flag_SN_Yellow=0 //SN关黄灯显示信号
Time_EW=SN
Time_SN=EW
while(Time_EW>=5)
{P1=S[4] //EW通行,SN红灯
Display()}
P1=0x00
while(Time_EW>=0)
{Flag_EW_Yellow=1//EW开黄灯信号位
SN_Red=1//EW黄灯亮,等待左拐信号,SN红灯
Display()}
Flag_EW_Yellow=0 //EW关黄灯显示信号
Time_EW=EWL
while(Time_EW>=5)
{P1=S[6]//EW左拐绿灯亮,SN红灯
Display()}
P1=0x00
while(Time_EW>=0)
{Flag_EW_Yellow=1 //EN开黄灯信号位
SN_Red=1//EW黄灯亮,等待停止信号,SN红灯
Display()}
EW=EW1
SN=SN1
EWL=EWL1
SNL=SNL1
}
}
(一)设计题目和方案确定
1.设计题目:交通灯信号控制器的设计
2.设计要求:1.设交通灯信号控制器用于主干道与支干道公路的交叉路口,要求是优先保证主干道的畅通。因此,平时处于"主干道绿灯,支道红灯"状态,只有在支道有车辆要穿行主干道时,才将交通灯切向"主干道红灯,支道绿灯",一旦支道无车辆通过路口,交通灯又回到"主干道绿灯,支道红灯"状态。
2.主干道和支干道自动循环。主干道和支道每次通行的时间为30s,而在两个状态交换过程出现的"主黄,支红"和"主红,支黄"状态,持续时间都为4s。
3. 手动设置主干道和支道每次通行的时间分别为为30s、40s、50s;
3 设计思路:
(1)传感器状态为主干路传感器支干路传感器,当支路无车时,即传感器开关状态为00 01状态时,总保持主干道绿灯支干道红灯状态;
(2)当主路总无车而支路总有车时,即传感器开关为01状态时 ,总保持主红支绿;
(3)当主干路支干路都有车时,即传感器为11状态时,主路支路轮流切换通行。
当主路绿灯30s切黄灯4s后,主路变红灯,支路变绿灯;当支路绿灯30s切黄灯4s后,主路变绿灯,支路变红灯。此两种状态为“主黄,支红”,“主红,支黄”两种状态。
(二)设计项目输入编译和仿真
1 设计交通控制器的VHDL文本程序:
library ieee
use ieee.std_logic_1164.all
use ieee.std_logic_arith.all
use ieee.std_logic_unsigned.all
entity jtdkz is
port(clk,sens_m,sens_f:in std_logic
m,l,n:in std_logic
rm,ym,gm,rf,yf,gf:out std_logic)
end jtdkz
architecture arc of jtdkz is
type state_type is (a,b,c,d)
signal state:state_type
signal k:std_logic_vector(2 downto 0)
begin
k<=m&l&n
cnt:process(clk,state)
variable g,s:integer range 0 to 49
variable nclr,en:bit
begin
if k<="001" then g:=29
elsif k<="010" then g:=39
elsif k<="100" then g:=49
else g:=0
end if
if(clk'event and clk='1') then
if nclr='0' then s:=0
elsif en='0' then s:=s
else s:=s+1
end if
case state is
when a=>rm<='0'ym<='0'gm<='1'
rf<='1'yf<='0'gf<='0'
if(sens_f and sens_m)='1' then
if s=g then
state<=bnclr:='0'en:='0'
else
state<=anclr:='1'en:='1'
end if
elsif(sens_f and (not sens_m))='1' then
state<=bnclr:='0'en:='0'
else
state<=anclr:='1'en:='1'
end if
when b=>rm<='0'ym<='1'gm<='0'
rf<='1'yf<='0'gf<='0'
if s=3 then
state<=cnclr:='0'en:='0'
else
state<=bnclr:='1'en:='1'
end if
when c=>rm<='1'ym<='0'gm<='0'
rf<='0'yf<='0'gf<='1'
if(sens_f and sens_m)='1' then
if s=g then
state<=dnclr:='0'en:='0'
else
state<=cnclr:='1'en:='1'
end if
elsif sens_f='0' then
state<=dnclr:='0'en:='0'
else
state<=cnclr:='1'en:='1'
end if
when d=>rm<='1'ym<='0'gm<='0'
rf<='0'yf<='1'gf<='0'
if s=3 then
state<=anclr:='0'en:='1'
else
state<=dnclr:='1'en:='1'
end if
end case
end if
end process cnt
end arc
2 程序说明:
rm ym gm分别表示主干道红黄绿灯,rf yf gf分别表示支道红黄绿灯;
sens_m sens_f分别表示主干道支干道传感器。有车时为1,无车时为0。
m l n表示手动控制开关,当001时表示30s控制时间,当010时表示40s控制时间,
当100时表示50s控制时间。
3 将模块进行编译,具体如下:
(1)器件的选择:选择FLEX10K10LC84-3器件。
(2)锁定引脚。
(3)编译。
4.新建一个gdf文件,形成顶层文件,如图所示:
4功能仿真:创建仿真通道文件;
编辑仿真通道文件;
设计项目的仿真。
新建一个scf文件,生成仿真图,如图所示:
(三) 器件编程下载与硬件验证
1. 器件编译:
将ByteBlaster电缆的一端与计算机的并行口相连
选择菜单命令MAX+PLUSⅡ/Programmer,打开编译窗口。如下图所示∶
选择菜单命令Options/Hardware Setup,在Hardware Type栏选择ByteBlaster(MV);在
栏选择使用并行口(LPT1)选择OK按钮,回到器件编译窗口。如下图所示∶Parallel Port中
一 设计题目
题目:交通灯控制电路的设计
二 设计目的
训练学生综合地运用所学的 《数字逻辑》的基本知识,使用电脑EWB仿真技术,独立完整地设计一定功能的电子电路,以及仿真和调试等的综合能力。本次电脑仿真所用的软件版本为EWB Version 5.0c
三 设计内容
现有一个十字路口,为了其通行的顺利,我们针对这设计了一个交通灯系统。
四 设计要求
1、设计一个十字路口的交通灯控制电路,要求东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都设为45秒。时间可设置修改。
2、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;
3、黄灯亮时,要求每秒闪亮一次。
4、东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用倒计时的方法)。
五 总体功能框图
图5 总体功能框图
交通灯控制系统的原理框图如图5所示。它主要由倒计时计数电路、信号灯转换器和秒脉冲信号发生器组成。秒脉冲信号发生器是该系统中倒计时计数电路和黄灯闪烁控制电路的标准时钟信号源,倒计时计数器输出两组驱动信号T5和T0,经信号灯转换器控制信号灯工作,倒计时计数电路是系统的主要部分,由它控制信号灯转换器的工作。
六 单元电路图
6.1信号灯转换器
选用JK触发器,设状态编码为:S0=00 S1=01 S2=11 S3=10,其输出为Q1 Q0,则其状态表为:
表6-1 状态编码与信号灯关系表
现态 次态 输出
Q1n Q0n Q1n+1 Q0n+1 Ga Ya Ra Gb Yb Rb
0 0 0 1 1 0 0 0 0 1
0 1 1 1 0 1 0 0 0 1
1 1 1 0 0 0 1 1 0 0
1 0 0 0 0 0 1 0 1 0
图6.1 信号灯转换器
6.2倒计时计数器
十字路口要有数字显示,作为倒计时提示,以便人们更直观地把握时间。具体为:当某方向绿灯亮时,置显示器为某值,然后以每秒减1,计数方式工作,直至减到数为“5”和“0”,十字路口绿、黄、红灯变换,一次工作循环结束,而进入下一步某方向的工作循环。在倒计时过程中计数器还向译码器提供模5的定时信号T5和模0的定时信号T0。
作G=0时的卡诺图:
BC 00 01 11 10
X 1 1 1
1 1 0 0
A 0
1
(1) 倒计时显示采用七段数码管作为显示,由计数器驱动并显示计数器输出值。
(2) 计数器选用集成电路74190进行设计。74190是十进制同步可逆计数器,它具有异步并行置数功能、保持功能。74190没有专用的清零输入端,但可以借助QA、QB、QC、QD的输出数据间接实现清零功能。
表6-2 74190的状态表
CTEN D/U CLK LOAD A B C D QA QB QC QD
0 X X 0 X X X X A
B C
D
0 1 POS 1 X X X X Count Down
0 0 POS 1 X X X X Count Up
1 X X X X X X X Qa0 Qb0 Qc0 Qd0
现选用两个74190芯片级联成一个从可任意设定时间00~99倒计至00的计数器,其中作为个位数的74190芯片的CLK接秒脉冲发生器(频率为1),再把个位数74190芯片输出端的QA、QD用一个与门连起来,再接在十位数74190芯片的CLK端。当个位数减到0时,再减1就会变成9, 0(0000)和9(1001)之间的QA、QD同时由0变为1,把QA、QD与起来接在十位数的CLK端,此时会给十位数74190芯片一个脉冲数字减1,相当于借位。具体连接方法如图一:
图6.2 译码器
信号LD由两个芯片的8个输出端用或门连起来,决定倒计时是置数,还是计数。工作开始时,LD为0,计数器预置数,置完数后,LD变为1,计数器开始倒计时。当倒计时减到数00时,LD又变为0,计数器又预置数,之后又倒计时,如此循环下去。
图6.3 通行时间控制开关
(3) 预置数(即车的通行时间)功能:如图6.3所示,8个开关分别接十位数74190芯片的D、C、B、A端和个位数74190芯片的D、C、B、A端。预置数的范围为6~98。假如把通行时间设为45秒,就像图2的接法,A接0,B接1,C接0,D接0,E接0,F接1,G接0,H接1。(接电源相当于接1,悬空相当于接0)
图6.4 倒计时计数器
(4) 向译码器提供模5的定时信号T5和模0的定时信号T0:T0表示倒计时减到数“00”(也即绿灯的预置时间,因为到00时,计数器重新置数),T0=1,此时T0给译码器一个脉冲,使信号灯发生转换,一个方向的绿灯亮,另一个方向的红灯亮。接法为:把两个74190计数器的8个输出端用一个集成的八输入一输出或门连起来。
T5表示倒计时减到数“05”时。T5=1,此时T5给译码器一个脉冲,使信号灯发生转换,绿灯的变为黄灯,红灯的不变。接法为:当减到数为“05”(0000 0101)时,把十位计数器的输出端QA、QB、QC、QD连同个位计数器的输出端QB、QD用一个或非门连起来,再把这个或非门与个位计数器的输出端QA、QC用一个与非门连接起来。具体连接方法如图6.4所示。
要求黄灯每秒闪一次,用一个频率为1的脉冲一端与控制黄灯的输出信号的JK触发器连接起来,另一端再接到黄灯。
七 总电路图
图7 交通灯总电路图
八 调试(实现的结果)
1. 根据题目的要求,整个交通灯控制系统需要有4个时间显示器,12个交通灯。但由于4个时间显示器是由同一个倒计时计数器控制,所以我在设计图电路的过程中,为了简化电路使画图看起来更加清晰,就只接了1个时间显示器。
2. 点击启动按钮,便可以进行交通灯控制系统的仿真,电路默认把通车时间设为45秒,打开开关后,东西方向绿灯亮,“东来西往”的行人车辆都可自由通行;南北方向车道的红灯亮,南来北往的车辆禁止通行。时间显示器从预置的45秒,以每秒减1,减到数5时,东西方向车道的绿灯转换为黄灯,而且黄灯每秒闪一次,其余灯都不变。减到数1时,1秒后显示器又转换成预置的45秒,东西方向车道的黄灯转换为红灯;南北方向车道的红灯转换为绿灯。如此循环下去。
3. 修改通车时间为其它的值再进行仿真(时间范围为6~98秒),效果和上面差不多,东西方向车道的绿灯亮,时间倒计数5,车灯进行一次转换,到0秒时又进行转换,而且时间重置为预置的数值,如此循环。
九 心得体会
开始拿到题目的时候,不知道怎么去做,因为自己对这门课的一般设计都不是很会.对很多的芯片的功能都不是很清楚.还有ewb仿真软件,以前才来没有接触过,只是现在需要的时候才开始用它,它的功能,按键都不清楚.
通过这次课程设计,加强了我动手、思考和解决问题的能力.现在设计已经做好了,自己感觉还是比较好的,虽然花了很多的时间,但学到了很多东西.做课程设计的时候,自己把整个书本都看了几遍,增强了自己对知识的理解,很多以前不是很懂的问题现在都已经一一解决了.在课程设计的过程中,我想了很多种方案,对同一个问题(像计数器的接法)都想了很多种不同的接法,运用不同的芯片进行了比较,最后还是采取了上面的方法进行连接.从开始做课程设计那天起,脑中天天都想着同样的问题,怎么去接线,怎么去把电路弄得更加简单,怎么别人更容易看懂.但似乎时间过得真的很快,我用了好几天才把它完全弄完,完成后,心里有一种说不出的高兴.
这次课程设计之后,使我明白了,做任何事情都要认真仔细,不然的话,你会花更多的时间才会做好.课程设计有利于提高我们的动手能力,能把我们所学的书本知识运用到实际生活中去.同时也丰富了我们的业余生活,提高我们对知识的理解能力.
参考文献
〔1〕 胡道元.计算机局域网.北京:清华大学出版社,2002年
〔2〕 江国强.现代数字逻辑电路习题指导.北京:电子工业出版社,2002年
〔3〕 李宜达.数字逻辑电路设计与实现.北京:科学出版社,2004年
〔4〕
蒋立平. 数字逻辑电路与系统设计. 北京:电子工
希望对你能有所帮助。