交通灯控制器课程设计

写范文发表于:2016-10-04 16:12:00

目录

交通灯控制器课程设计

一课题介绍

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口的值,再利用一个循环即可。

六、结语

在机动车数量激增的今天,车辆拥堵、交通崩溃的现象还是时有发生的。其原因多半是交通灯时长设置的不合理,抑或无法根据一天之内不同时间的车流状况,对交通灯的状态进行调整。因此,合理地设计交通系统,同时对于交通灯的适当调试无疑将会派上很大用场。