交通灯程序设计

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

交通灯程序设计

一、设计任务及要求:

设计任务:模拟十字路口交通信号灯的工作过程,利用开发板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。要求:

(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;

(2)交通灯红变绿是直接进行的,没有间隔时间;

(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。

图1 路口交通管理示意图

表1 交通信号灯的4种状态

二、程序清单:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY TrafficLight IS

PORT ( CLK: IN std_logic;

led7s: OUT std_logic_vector(3 downto 0);

led7s1: OUT std_logic_vector(3 downto 0);

R,Y,G,R1,Y1,G1: OUT std_logic);

END;

ARCHITECTURE one OF TrafficLight IS

TYPE dm IS (s0,s1,s2,s3);

SIGNAL current_state,next_state:dm;

SIGNAL FOUT: STD_LOGIC;

SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL th :STD_LOGIC_VECTOR(1 DOWNTO 0);

SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL time :STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN

P1: PROCESS(CLK) -------秒脉冲发生器 VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF CNT8 = "01111111" THEN

CNT8:="00000000"; FOUT<='1';

ELSE CNT8 := CNT8+1;

FOUT <= '0';

END IF;

END IF;

END PROCESS P1;

P2:PROCESS(FOUT) -------负责对秒脉冲进行计数

BEGIN

IF FOUT'EVENT AND FOUT='1' THEN

IF time<"1000011" THEN

time<=time+1;

ELSE time <="0000000";

END IF;

END IF;

END PROCESS P2;

P3: PROCESS (FOUT,current_state)

--- P3负责当前状态和下一状态的转换 BEGIN

IF FOUT'EVENT AND FOUT='1' THEN

current_state<=next_state;

END IF;

END PROCESS P3;

P4:PROCESS(current_state, time)

-- P4负责各状态下交通灯的显示及时间值的赋值BEGIN

CASE current_state IS

WHEN s0=>R<='0';Y<='0';G<='1'; R1<='1';Y1<='0';G1<='0'; tm<=39-time;

IF time=39 THEN

next_state<=s1;

ELSE next_state<=s0;

END IF;

WHEN s1=>R<='0';Y<='1';G<='0'; R1<='1';Y1<='0';G1<='0'; tm<=43-time;

IF time=43 THEN

next_state<=s2;

ELSE next_state<=s1;

END IF;

WHEN s2=>R<='1';Y<='0';G<='0'; R1<='0';Y1<='0';G1<='1'; tm<=63-time;

IF time=63 THEN

next_state<=s3;

ELSE next_state<=s2;

END IF;

WHEN s3=>R<='1';Y<='0';G<='0'; R1<='0';Y1<='1';G1<='0'; tm<=67-time;

IF time=67 THEN

next_state<=s0;

ELSE next_state<=s3;

END IF;

END CASE;

END PROCESS P4;

P5:PROCESS(tm) ---- 进行对交通灯的时间值的显示BEGIN

IF tm>=30 THEN th<="11";tl<=tm-30; ELSIF tm>=20 THEN th<="10";tl<=tm-20; ELSIF tm>=10 THEN th<="01";tl<=tm-10; ELSE th<="00";tl<=tm;

END IF;

END PROCESS P5;

P6: PROCESS (th,tl)

BEGIN

CASE th IS

WHEN "00"=>led7s<="0000";

WHEN "01"=>led7s<="0001";

WHEN "10"=>led7s<="0010";

WHEN "11"=>led7s<="0011";

WHEN others=>null;

END CASE;

CASE tl IS

WHEN "0000000"=>led7s1<="0000"; WHEN "0000001"=>led7s1<="0001"; WHEN "0000010"=>led7s1<="0010"; WHEN "0000011"=>led7s1<="0011"; WHEN "0000100"=>led7s1<="0100"; WHEN "0000101"=>led7s1<="0101"; WHEN "0000110"=>led7s1<="0110"; WHEN "0000111"=>led7s1<="0111"; WHEN "0001000"=>led7s1<="1000";

相关文档
最新文档