交通灯控制电路.docx

上传人:b****6 文档编号:7353770 上传时间:2023-05-11 格式:DOCX 页数:11 大小:187.48KB
下载 相关 举报
交通灯控制电路.docx_第1页
第1页 / 共11页
交通灯控制电路.docx_第2页
第2页 / 共11页
交通灯控制电路.docx_第3页
第3页 / 共11页
交通灯控制电路.docx_第4页
第4页 / 共11页
交通灯控制电路.docx_第5页
第5页 / 共11页
交通灯控制电路.docx_第6页
第6页 / 共11页
交通灯控制电路.docx_第7页
第7页 / 共11页
交通灯控制电路.docx_第8页
第8页 / 共11页
交通灯控制电路.docx_第9页
第9页 / 共11页
交通灯控制电路.docx_第10页
第10页 / 共11页
交通灯控制电路.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

交通灯控制电路.docx

《交通灯控制电路.docx》由会员分享,可在线阅读,更多相关《交通灯控制电路.docx(11页珍藏版)》请在冰点文库上搜索。

交通灯控制电路.docx

交通灯控制电路

大作业设计

实验目的:

综合应用数字电路的各种设计方法,完成一个较为复杂的电路设计;

实验内容:

交通灯控制器

设计任务与原理说明:

一、简要说明

在十字路口,每条道路各有一组红、黄、绿灯和倒计时显示器,用以指挥车辆和行人有序地通行。

其中,红灯(R)亮,表示该条道路禁止通行;黄灯(Y)亮,表示停车;绿灯(G)亮,表示可以通行。

倒计时显示器是用来显示允许通行和禁止通行地时间。

交通灯控制器就是用来自动控制十字路口的交通灯和计时器,指挥各种车辆和行人安全通行。

二、任务和要求

①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。

②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。

③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。

当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。

三、实现方案

(1)从题目中计数值与交通灯的亮灭的关系如下图所示

⑵交通灯控制器逻辑流程图

四﹑硬件电路设计

(1)分频器

分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。

该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。

(2)控制器设计

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。

此外,当检测到特殊情况(HOLD=‘1’)发生时,无条件点亮红灯的二极管。

本控制器可以有两种设计方法,一种是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。

这两种方法各有所长,必须根据所用器件的特性进行选择:

比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。

(3)计数器设计

这里需要的计数器的计数范围为0-90。

计到90后,下一个时钟沿回复到0,开始下一轮计数。

此外,当检测到特殊情况(HOLD=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。

(4)分位译码电路设计--1

因为控制器输出的到计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5,7分为0和7)。

与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。

控制器中,引入了寄存器。

为了让读者开拓眼界,分位电路就用组合逻辑电路实现。

(6)数码管驱动设计

串行连接,即每个数码管对应的引脚都接在一起(如每个数码管的a引脚都接到一起,然后再接到CPLD/FPGA上的一个引脚上),通过控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。

串行法的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需要(7+N)个引脚(如果需要小数点,则是(8+N)个引脚)。

其缺点是控制起来不如并行法容易。

(7)下图为交通灯控制器的顶层文件连接图

(八)下图为仿真波形图

五、程序设计

(1)分频器的设计

LIBRARYIEEE;

USEIEEE.Std_Logic_1164.ALL;

ENTITYFreDeviderIS

PORT

(Clkin:

INStd_Logic;

Clkout:

OUTStd_Logic);

END;

ARCHITECTUREDeviderOFFreDeviderIS

CONSTANTN:

Integer:

=499;

signalcounter:

Integerrange0toN;

signalClk:

Std_Logic;

BEGIN

PROCESS(Clkin)

begin

IFrising_edge(Clkin)THEN

IFCounter=Nthen

counter<=0;

Clk<=notclk;

else

counter<=counter+1;

endif;

endif;

endprocess;

clkout<=clk;

end;

(2)控制设计

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。

此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcountrollerIS

PORT(Clock:

INSTD_LOGIC;

Hold:

instd_logic;

CountNum:

inINTEGERRANGE0TO49;

NumA,NumB:

outINTEGERRANGE0TO25;

RedA,GreenA,YellowA:

outstd_logic;

RedB,GreenB,YellowB:

outstd_logic);

END;

ARCHITECTUREbehaviorOFCountrollerIS

BEGIN

process(Clock)

BEGIN

IFfalling_edge(Clock)THEN

IFHold='1'THEN

RedA<='1';

RedB<='1';

GreenA<='0';

GreenA<='0';

YellowA<='0';

YellowB<='0';

ELSIFCountNum<=19THEN

NumA<=20-CountNum;

RedA<='0';

GreenA<='1';

YellowA<='0';

ELSIFCountNum<=24THEN

NumA<=25-CountNum;

RedA<='0';

GreenA<='0';

YellowA<='1';

ELSE

NumA<=50-CountNum;

RedA<='1';

GreenA<='0';

YellowA<='0';

ENDIF;

IFCountNum<=24THEN

NumB<=25-CountNum;

RedB<='1';

GreenB<='0';

YellowB<='0';

ELSIFCountNum<=44THEN

NumB<45-CountNum;

RedB<='0';

GreenB<='1';

YellowB<='0';

ELSE

NumB<=50-CountNum;

RedB<='0';

GreenB<='0';

YellowB<='1';

ENDIF;

ENDIF;

ENDPROCESS;

END;

(3)计数器的设计

这里计数器的计数范围为0—45S。

计到45后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数,而系统复位号Reset则使计数器异步清0。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcounterIS

PORT(clock:

INSTD_LOGIC;

reset:

instd_logic;

Hold:

instd_logic;

countNum:

BuFFeRINTEGERRANGE0TO50);

END;

ARCHITECTUREbehaviorOFcounterIS

BEGIN

process(reset,Clock)

BEGIN

IFReset='1'THEN

countNum<=0;

ELSIFrising_edge(Clock)THEN

IFHold='1'then

countNum<=countNum;

ELSIFcountNum=50THEN

countNum<=0;

ELSE

countNum<=countNum+1;

ENDIF;

ENDIF;

ENDPROCESS;

END;

(4)分位译码电路设计--1

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFenweiIS

PORT

(Numin:

INintegerRANGE0TO25;

NumA,NumB:

OUTIntegerRANGE0to9);

END;

ARCHITECTUREbehaviorOFFenweiIS

BEGIN

process(Numin)

BEGIN

IFNumin>=20THEN

NumA<=2;

NumB<=Numin-20;

ELSIFNumin>=10THEN

NumA<=1;

NumB<=Numin-10;

ELSENumA<=0;

NumB<=Numin;

ENDIF;

ENDPROCESS;

END;

(6)数码管驱动设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYliangxieliangIS

PORT(A:

INSTD_LOGIC_VECTOR(3DOWNTO0);

LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

END;

ARCHITECTUREoneOFliangxieliangIS

BEGIN

PROCESS(A)

BEGIN

CASEA(3DOWNTO0)IS

WHEN"0000"=>LED7S<="1000000";

WHEN"0001"=>LED7S<="1111001";

WHEN"0010"=>LED7S<="0100100";

WHEN"0011"=>LED7S<="0110000";

WHEN"0100"=>LED7S<="0011001";

WHEN"0101"=>LED7S<="0010010";

WHEN"0110"=>LED7S<="0000010";

WHEN"0111"=>LED7S<="1111000";

WHEN"1000"=>LED7S<="0000000";

WHEN"1001"=>LED7S<="0010000";

WHEN"1010"=>LED7S<="0001000";

WHEN"1011"=>LED7S<="0000011";

WHEN"1100"=>LED7S<="1000110";

WHEN"1101"=>LED7S<="0100001";

WHEN"1110"=>LED7S<="0000110";

WHEN"1111"=>LED7S<="0001110";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2