目录
一课题介绍
1.1概述
1.2课题要求
二设计原理与分析
2.1.1红黄绿灯之间状态变换
2.1.2计时设置
2.1.3紧急情况
2.2总体框图
2.3分块设计
三、原理图
四、程序代码
4.1m分频器
4.2数码管译码器
4.3交通灯控制器
4.4计时器
五、*结果及实验分析
六、总结
一、课题介绍
1.1概述
在十字路口,每条道路各有一组红、黄、绿灯和倒计时显示器,用以指挥车辆和
行人有序地通行。其中,红灯(r)亮,表示该条道路禁止通行;黄灯(y)亮,
表示停车;绿灯(g)亮,表示可以通行。倒计时显示器是用来显示允许通行和
禁止通行地时间。交通灯控制器就是用来自动控制十字路口的交通灯和计时器,
指挥各种车辆和行人安全通行。
1.2课题要求
设计一个十字交叉路口的交通灯控制器,具体要求如下:
(1)每条道路设一组信号灯,每组信号灯由红、黄、绿3盏灯组成,绿灯表
示允许通行,红灯表示禁止通行,黄灯表示该车道上已过停车线德车辆继续通
行,未过停车线的车辆停止通行。
(2)设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其
中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
(3)当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需
要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪
烁。当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
二、设计原理与分析
2.1交通灯用以指挥车辆和行人有序地通行,在功能上要实现红黄绿灯之间状态
变换、计时设置和紧急情况三大功能。
2.1.1红黄绿灯之间状态变换
对于十字路口两个方向上的交通灯,要保*一条道路通行另一条禁止,同时还要
考虑黄灯到红灯的变换,因此一共有四个状态,即南北红东西绿、南北红东西黄、
南北绿东西红、南北黄东西红。
2.1.2计时设置
根据要求,绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
2.1.3紧急情况
当各条路上任意一条上出现特殊情况时,各方向上均是红灯亮,倒计时停止,且
显示数字在闪烁。
2.2总体框图
2.2.1模块示意图
图1
2.3分块设计
要实现交通灯的控制需要5个功能模块,分别为4m分频器,数码管译码器,交
通灯控制器以及计时器。
2.3.14m分频器
由于引脚选用4m时钟,而计时单位为秒,需要对时钟信号进行4m分频处理,
编译后生成4m分频器如下图:
图24m分频器
2.3.2数码管译码器
输出时间为16进制数,要在数码管上显示需设计数码管译码器对其进行译码,
编译后生成数码管译码器如下图:
图3数码管译码器
2.3.3交通灯控制器
为完成四个状态之间的循环,需交通灯控制器通过时钟信号的变化来完成状态循
环的功能,编译后生成交通灯控制器如下图:
图4交通灯控制器
2.3.4计时器
计时器不仅要完成倒计时功能,还要随状态的变化而改变其倒计时时间,编译后
生成计时器如下图:
图5计时器
三、原理图、代码书写
1、交通灯控制的原理图
各个模块代码书写
4.1m分频器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;--运算符重载
entityt4mis
port(ena,clr,d_ctr,clk:instd_logic;
q:outstd_logic_vector(3downto0);
co:outstd_logic
);
endentityt4m;
architecturebhvoft4mis
signalq1:std_logic_vector(3downto0);
begin
q
process(clk,clr,ena,d_ctr)
begin
ifclr='0'thenq1'0');
elsifclk'eventandclk='1'then
ifena='1'then
ifd_ctr='1'then
ifq1="1111"then
q1'0');
else
q1
endif;
elsifq1="0000"then
q1'1');
else
q1
endif;
endif;
endif;
endprocess;
process(q1)
begin
ifq1="1111"then
co
else
co
endif;
endprocess;
endarchitecturebhv;
4.2数码管译码器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityexp4is
port(clk:instd_logic;
a,b:instd_logic_vector(7downto0);
ledag:outstd_logic_vector(6downto0);
sel:outstd_logic_vector(7downto0)
);
end;
architecturebhofexp4is
signaldel:std_logic_vector(1downto0);
signalkey:std_logic_vector(3downto0);
begin
process(clk)
variabledount:std_logic_vector(1downto0);
begin
ifclk'eventandclk='1'then
dount:=dount+1;
endif;
del
endprocess;
process(key)
begin
casekeyis
endbh;when"0000"=>ledagledagledagledagledagledagledagledagledagledagnull;endcase;endprocess;process(del)begincasedeliswhen"11"=>selselsel
4.3交通灯控制器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjtdis
port(clk,emg:instd_logic;--输入时钟,复位,状态
count1,count2:instd_logic_vector(7downto0);--计时器
mg,my,mr,cg,cy,cr:outstd_logic);--输出信号,控制各种灯
endjtd;
architecturebehavofjtdis
typejtdstateis(mrcg,mrcy,mgcr,mycr);
signalstate:jtdstate;
begin
process(state,clk,emg)--reset,,s
begin
--ifreset='1'then
state
--els
ifclk'eventandclk='1'then
ifemg='1'thenmy
ifemg='0'then
casestateis
whenmrcg=>ifcount1="00000110"
count2="00000001"then
state
else
state
endif;
whenmrcy=>ifcount1="00000001"
count2="00000001"then
state
else
state
endif;
whenmgcr=>ifcount2="00000110"
count1="00000001"then
state
else
state
endif;
whenmycr=>ifcount1="00000001"
count2="00000001"then
state
else
state
endif;
endcase;
endif;
endif;
endprocess;
endbehav;
4.4计时器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjishuis
port(clk,reset,emg:instd_logic;
tim1,tim2:outstd_logic_vector(7downto0));
andandandand
architecturebehavofjishuis
typergyis(mrcg,mrcy,mgcr,mycr);
signalstate:rgy;
begin
process(clk,reset,emg)--,reset
variablea1:std_logic:='0';
variablea2:std_logic:='0';
variablea3:std_logic:='0';
variablea4:std_logic:='0';
variableb:std_logic:='0';
variabletimmh:std_logic_vector(3downto0);
variabletimml:std_logic_vector(3downto0);
variabletimch:std_logic_vector(3downto0);
variabletimcl:std_logic_vector(3downto0);
variablemth,mtl,cth,ctl:std_logic_vector(3downto0);
begin
ifclk'eventandclk='1'then
ifreset='1'thenstate
endif;
ifreset='0'andemg='1'then
ifb='0'then
b:='1';mth:="0000";mtl:="0000";cth:="0000";ctl:="0000";
elseb:='0';mth:=timmh;mtl:=timml;cth:=timch;ctl:=timcl;
endif;
endif;
ifemg='0'thenmth:=timmh;mtl:=timml;cth:=timch;ctl:=timcl;
casestateis
whenmrcg=>--ifs='1'andb='1'then
state
--elsifs='0'andb='1'then
state
--else
ifa1='1'thenmth:="0010";mtl:="0101";cth:="0010";ctl:="0000";a1:='0';timmh:=mth;timml:=mtl;
timch:=cth;timcl:=ctl;--25秒,20秒
else
ifnot(cth="0000"andctl="0010")then
ifmtl="0000"then
mtl:="1001";mth:=mth-1;timmh:=mth;
timml:=mtl;timch:=cth;timcl:=ctl;
elsemtl:=mtl-1;timmh:=mth;timml:=mtl;
timch:=cth;timcl:=ctl;
endif;
--ifnot(cth="0000"andctl="0010")then
ifctl="0000"then
ctl:="1001";cth:=cth-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
elsectl:=ctl-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
endif;
else
mth:="0000";mtl:="0110";cth:="0000";ctl:="0001";state
endif;
endif;
--endif;
whenmrcy=>ifa2='1'then
cth:="0000";ctl:="0101";mth:="0000";mtl:="0101";a2:='0';timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;--5秒
else
ifnot(cth="0000"andctl="0010")then
ctl:=ctl-1;mtl:=mtl-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
else
cth:="0000";ctl:="0001";mth:="0000";mtl:="0001";a3:='1';state
endif;
endif;
whenmgcr=>--ifs='1'then
ifa3='1'then
mth:="0010";mtl:="0000";cth:="0010";ctl:="0101";a3:='0';timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;--20秒
else
ifnot(mth="0000"andmtl="0010")thenifmtl="0000"then
mtl:="1001";mth:=mth-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
elsemtl:=mtl-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
endif;
--ifnot(cth="0000"andctl="0010")then
ifctl="0000"then
ctl:="1001";cth:=cth-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
elsectl:=ctl-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
endif;else
cth:="0000";ctl:="0110";mth:="0000";mtl:="0001";state
--elsea:='0';state
whenmycr=>ifa4='1'then
mth:="0000";mtl:="0101";cth:="0000";ctl:="0101";a4:='0';timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;--4秒else
ifnot(cth="0000"andctl="0010")thenctl:=ctl-1;mtl:=mtl-1;timmh:=mth;timml:=mtl;timch:=cth;timcl:=ctl;
else
cth:="0000";ctl:="0001";mth:="0000";mtl:="0001";a1:='1';state
tim1
五、*及分析
14
图
1、原理图*波形
图
2、4m分频器*波形
图
3、数码管译码器*波形
15
图
4、交通灯控制*波形
图
5、计时器*波形
实验及分析
16
针对ep1c6q240c8
17
六、总结
在这次设计过程中,体现出自己设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的杨老师.,老师严谨细致、一丝不苟的作风是我学习中的榜样,老师循循善诱的教导给予我启迪;这次设计的每个实验细节,都离不开老师的细心指导。而您宽容的态度,帮助我们能够比较顺利的完成了这次课程设计。我们学好理论的同时也要努力提高动手组织实验的基本技能,培养分析解决电路问题的实际本领。其中我最大的感触就是在设计课题的过程当中,与老师多次进行交流并看着自己在老师的帮助下一步步克服难题、难点,以及改正每一个错误的成就感,都让我对本次的课程设计有了更深刻的理解和认识,也让我更加熟练的掌握了eda这门课程。
18
序号
《eda技术》课程设计报告
课题:交通灯控制器
院系自动化学院*自动化班级学号姓名指导教师李华、杨银贤起止日期2015.12.21-2015.12.25
2015年12月
第2篇:《交通(红绿灯)》教案设计
活动目标:1、让幼儿知道红灯停、绿灯行的交通规则。
2、让幼儿在游戏活动中体验交通规则的重要*,从而自觉地遵守交通规则。
活动准备:1、红绿灯牌子、画有十字路口(有斑马线)图片
2、字卡:交通安全、红灯停,绿灯行、
3、音乐《去郊游》
活动过程:一、随音乐进场,引起幼儿兴趣
小朋友们今天我们要出去郊游喽,大家开心吗?
哎呀,这里是哪里?小朋友在什么地方见过它?
二、在活动中体会交通规则的重要*
1、小朋友们,看看我们坐的队行像什么?十字路口的学问可多了,现在我们就在十字路口做个游戏。老师请出两个司机,三个骑车的以及两个行人。
参加游戏活动的孩子听到老师说完"开始"之后,立即向自己的对面出发。其他孩子仔细观察,看看会发生什么事情?
(1)小朋友们,刚才你们看到了什么?你们想说什么?
(2)如果生活中也是这样可不行啊!为什么会发生这种情况呢?
(3)(教师拿出信号灯标志)这是什么?谁能编句儿歌来说说信号灯的作用。(将标志贴在黑板上)
幼儿回答后出示字卡"红灯停,绿灯行"。
(4)如果没有红绿灯的地方怎么过马路
师小结:小朋友过马路时要注意自己的安全,要看红绿灯,红灯停、绿灯行,走的时候要走斑马线,如果没有红绿灯的地方,要两边看一看,没有车子才能走,要慢慢走,不能乱跑。爸爸妈妈在要牵着爸爸妈妈的手。
三、游戏:红灯停、绿灯行
玩法:请一个小朋友当交通灯,一只手拿红灯,一只手拿绿灯。其他小朋友当小司机,过马路时要看红绿灯,绿灯往前开,红灯停下来,如违反罚停玩游戏一次。
第3篇:单片机交通灯毕业设计
在日常生活中,交通灯是一项必不可少的公共设施,可以维护道路的畅通和交通的秩序。如若交通灯发生故障,那么后果可想而知。因此,交通灯的正常工作就显得尤为重要。由于交通灯对于公共安全的重要*,本文基于51单片机模拟双向交通灯的设计。下面是小编整理的单片机交通灯毕业设计,欢迎来参考!
一、交通灯的设计要求
双向交通灯红、黄、绿灯对应相同,红灯5s,黄灯1s,绿灯5s。当有急救车到达时,双向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10s,急救车通过后,交通灯恢复中断前状态。
二、at89c51单片机的中断系统介绍
计算机系统中止当前的正常工作,转入处理突发事件,等到突发事件处理完毕之后,再回到原来被中断的地方,继续原来的工作,这样的整个过程称为中断。能够实现这种功能的部件称为中断系统。产生中断请求的事件称为中断源。其中at89c51单片机具有5个中断源,在本次设计中我们采用的是外部事情中断请求源0,以及t1计数溢出事情中断请求这两个中断源。
三、at89c51单片机的定时/计数器介绍
在单片机中,通常计数器和定时器设计成一个部件??计数器,当计数脉冲的周期一定时,计数器就作为定时器,定时时间就是计数器计数次数和计数脉冲周期的乘积。在此我们采用的就是计数器的这个定时功能。
四、交通灯的硬件电路搭建
本次设计的硬件电路搭建如图1。两路交通灯的6个灯依次接在51单片机p1口的p1.0到p1.5,另外在单片机的p3.2口接一个按压式开关作为救护车到来时的中断源。
五、交通灯的软件编程设计
中断部分的程序设计。首先,应将51单片机中中断允许寄存器ie的ea位设为1,这代表允许中断源向cpu申请中断,即cpu开放中断。同时将ie的ex0位设为1,这代表允许外中断0向cpu申请中断。这样的话,当救护车来的时候,可以借此发出中断请求。接下来,应将定时器控制寄存器tcon的it0位设为1,这代表外部中断0的触发方式选择为边沿触发方式。由于笔者采用了按压式的开关作为中断的发出方式,这样会产生一个脉冲,因此应当选择边沿触发方式。定时部分的程序设计。首先,应将控制寄存器tcon的tr1位置1,启动定时器t1计数。接下来,应将方式寄存器tmod的值设为0x01,使得定时器t1工作在方式1,即16位定时/计数方式。然后,由于计时器的定时周期是1s,笔者使用定时/计数器t1精确定时50ms,则20次50ms中断时,定时时间就是1s。在定时器中断部分,笔者采用的是查询方式,即cpu不断查询tf1的状态,当tf1为1时,表示50ms定时已到,在主程序中判断是否20次50ms定时已到,如是,则时间恰好为1s。同时tf1位软件清0。根据公式,当定时时间为50ms时,计数初值应为15536,换算成十六进制是3cb0h,即计数器t1中tl1的初值为b0h;th0的初值为3ch。当救护车到来时,双向交通灯置红,即将双向交通灯的红灯所对应的p1口位置1,其他位清0即可。时间长短的设置方法同上。最后,由于双向交通灯红灯5s,黄灯1s,绿灯5s,共11个状态,我们利用switch语句为这11个状态分别设置相应p1口的值,再利用一个循环即可。
六、结语
在机动车数量激增的今天,车辆拥堵、交通崩溃的现象还是时有发生的。其原因多半是交通灯时长设置的不合理,抑或无法根据一天之内不同时间的车流状况,对交通灯的状态进行调整。因此,合理地设计交通系统,同时对于交通灯的适当调试无疑将会派上很大用场。