交通灯信号控制器的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

交通灯信号控制器的设计

一,设计任务与要求

交通灯控制信号用于主干道公路的交叉口,要求是优先保证主干道的畅通,因此,平时处于“主干道绿灯,支干道红灯”的状态。

1.当处于“主干道绿灯,支干道红灯”状态时:

(1)、主干道有车要求通行,支干道也有车要求通行时,若主干道通行时

间大于等于30S则切换到“主黄,支红”,4S后自动换到“主红,支绿”。

(2)、主干道无车要求通行,支干道有车要求通行时,立即切换到“主黄,

支红”,4S后自动自动切换到“主红,支绿”。

其他情况保持“主绿,支红”。

2.当处于“主红,支绿”状态时:

(1)、支道有车要求通行时,保持“主红,支绿”状态,但最多保持30S 然后自动切换到“主红,支黄”状态,4S后自动切换到“主绿,支红”状态。

(2)、支道无车要求通过时,立即切换到“主红,支黄”状态,4S后自动

切换到“主绿,支红”状态。

3.利用八位七段管码显示模块其中的2位实现时间显示。

二,总体框图

初步设计图

三,选择器件

1,(1)3-8译码器74138芯片.

(2)3-8译码器74138的逻辑功能表:

(3)3-8译码器74138的内部原理图:

(4)3-8译码器74138的作用:

74138有三个附加的控制端。当G1为高电平,G2AN和G2BN为低电平时,输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。

本设计所用实验箱的8个数码管采用扫描显示方式,数码管位选电路在扫描信号的控制下轮流输出8路数据,此8路数据时分复用一个BCD7段显示译码器。数码管位选电路同时输出位选信号,经74LS138译码器译码后分别选中8个数码管。在位选选中一个数码管的的情况下送出段码,在该段码管中显示段码字符,然后接着选中其它数码管,送其他字符。

四,功能模块

1..原理概述:

(1)由于主干道,支干道的交通灯均在绿,黄,红三种状态之间有顺序的转换,组合共有四种。所以,利用状态机按照设定的条件实现"主绿,支红" 、"主黄,支红" 、"主红,支绿"、"主红,支黄"4种状态之间的切换。

(2)因为红黄绿灯之间转换有时间限制,所以要有计数器,可用七段数码管显示模块,由于时间是两位数,所以只需要八位七段管码显示模块其中的2位实现时间显示。

(3)由于实验室提供的基准频率为50MHZ,所以得用分频器得到所需要的频率。2.各模块设计程序及模块图

1.1计数器:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY counter IS

PORT (clk:IN STD_LOGIC;

reset:in std_logic;

countNum:BuFFeR INTEGER RANGE 0 TO 64);

END;

ARCHITECTURE behavior OF counter IS

BEGIN

process(reset,Clk)

BEGIN

IF Reset='1' THEN

countNum<=0;

ELSIF rising_edge(Clk) THEN

IF countNum=64 THEN

countNum<=0;

ELSE

countNum<=countNum+1;

END IF;

END IF;

END PROCESS;

END;

生成模块图:

1.2七段显示器程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY bcd_data IS

PORT

(bcd_data:in STD_LOGIC_VECTOR(3 downto 0); segout: out STD_LOGIC_VECTOR(6 downto 0)); END;

ARCHITECTURE behavior OF bcd_data IS BEGIN

process(bcd_data)

BEGIN

case bcd_data is

when "0000"=>segout<="0111111";

when "0001"=>segout<="0000110";

when "0010"=>segout<="1011011";

when "0011" =>segout<="1001111";

when "0100" =>segout<="1100110" ;

when "0101"=>segout<="1101101" ;

when "0110"=>segout<="1111101" ;

when "0111"=>segout<="0000111" ;

when "1000" =>segout<="1111111" ;

when "1001" =>segout<="1101111";

when others =>null;

END CASE;

END PROCESS;

END;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_unsigned.ALL;

ENTITY dtsm IS

PORT(clk:in STD_LOGIC;

NumA,NumB: in STD_LOGIC_VECTOR(3 downto 0); segout1:out STD_LOGIC_VECTOR(6 downto 0);

相关文档
最新文档