⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vhdl_2.txt

📁 交通灯控制 技术指标 (1)车辆直行时不允许车辆左拐行驶
💻 TXT
字号:
交通灯控制

 技术指标 

(1)车辆直行时不允许车辆左拐行驶,但右拐可以同时进行,必须设有专门的左拐时间。

(2)车辆直行以及车辆左拐交替通行,直行时间绿灯每次放行60秒,车辆左拐每次放行30秒。 

(3)绿灯亮表示可通行.红灯亮表示禁止通行。 

(4)直行车辆每次绿灯变红灯时.黄灯先亮5秒。 

(5)十字路口要有数字显示,作为等候时间提示。要求各通道的通行时间及黄灯亮的时间均以秒为单位作减计数。 

(6)设置行人过马路的红绿灯。

(7)增加紧急情况处理,允许急救车优先通过要求,当有急救车通过时,路口信号灯全部变红,倒计时停止计数,以便让急救车通过。急救车通过后,交通灯恢复原先状态。 


entity traffic_control is          ------------------------------状态机
   port(
           clk: in std_logic;
        -- reset: in std_logic;
               NS_green,NS_red,NS_yellow :out std_logic;
               NS_green_left,NS_red_left :out std_logic;
            NS_people_green,NS_people_red:out std_logic;
          
               WE_green,WE_red,WE_yellow :out std_logic;
               WE_green_left,WE_red_left :out std_logic;
            WE_people_green,WE_people_red:out std_logic;
                                    data :out std_logic_vector(1 downto 0)
        );
end traffic_control;

architecture behave of traffic_control is
    type states is(S00,S01,S10,S11,S2,S3);
    signal state :states;
   begin
              process(clk)
             variable counter :integer range 0 to 59;
                variable cr,cnt :std_logic;
         begin
           -- if reset='1' then
            -- state<=S00;
           if (clk'event and clk='1') then
                if cr='0' then 
                     counter:=0;
                 elsif cnt='0' then
                  counter:=counter;
                 else
                     counter:=counter+1;
                end if;

           case state is
                  when S00=>
                             data<="00";          

                           NS_green<='1';
                             NS_red<='0';
                          NS_yellow<='0';    
                      NS_green_left<='0';
                        NS_red_left<='1';
                    NS_people_green<='1';
                      NS_people_red<='0';        
                               WE_green<='0';
                                 WE_red<='1';
                             WE_yellow <='0';
                          WE_green_left<='0';
                           WE_red_left <='1';
                        WE_people_green<='0';
                          WE_people_red<='1';

                      if counter=59 then
                           data<="01"; 
                          state<=S01;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S00;
                            cr:='1';
                           cnt:='1';
                       end if;         

               when S01=>
                             data<="01";          

                           NS_green<='0';
                             NS_red<='0';
                          NS_yellow<='1';    
                      NS_green_left<='0';
                        NS_red_left<='1';
                    NS_people_green<='1';
                      NS_people_red<='0';        
                               WE_green<='0';
                                 WE_red<='1';
                             WE_yellow <='0';
                          WE_green_left<='0';
                           WE_red_left <='1';
                        WE_people_green<='0';
                          WE_people_red<='1';          
                      if counter=4 then
                           data<="00"; 
                          state<=S10;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S01;
                            cr:='1';
                           cnt:='1';
                       end if;
                   when S10=>
                               data<="00";
                            NS_green<='0';
                             NS_red<='1';
                          NS_yellow<='0';    
                      NS_green_left<='0';
                        NS_red_left<='1';
                    NS_people_green<='0';
                      NS_people_red<='1';        
                               WE_green<='1';
                                 WE_red<='0';
                             WE_yellow <='0';
                          WE_green_left<='0';
                           WE_red_left <='1';
                        WE_people_green<='1';
                          WE_people_red<='0';

                      if counter=59 then
                           data<="01"; 
                          state<=S11;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S10;
                            cr:='1';
                           cnt:='1';
                       end if;
           when S11=>

                              data<="01";
                            NS_green<='0';
                             NS_red<='1';
                          NS_yellow<='0';    
                      NS_green_left<='0';
                        NS_red_left<='1';
                    NS_people_green<='0';
                      NS_people_red<='1';        
                               WE_green<='0';
                                 WE_red<='0';
                             WE_yellow <='1';
                          WE_green_left<='0';
                           WE_red_left <='1';
                        WE_people_green<='1';
                          WE_people_red<='0';
                      if counter=4 then
                           data<="10"; 
                          state<=S2;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S11;
                            cr:='1';
                           cnt:='1';
                       end if;
                   when S2=>
                              data<="10";
                            NS_green<='0';
                             NS_red<='1';
                          NS_yellow<='0';    
                      NS_green_left<='0';
                        NS_red_left<='1';
                    NS_people_green<='0';
                      NS_people_red<='1';        
                               WE_green<='0';
                                 WE_red<='1';
                             WE_yellow <='0';
                          WE_green_left<='1';
                           WE_red_left <='0';
                        WE_people_green<='0';
                          WE_people_red<='1';
                      if counter=29 then
                           data<="11";
                          state<=S3;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S2;
                            cr:='1';
                           cnt:='1';
                       end if;

                 when S3=>

                           data<="11";
                            NS_green<='0';
                             NS_red<='1';
                          NS_yellow<='0';    
                      NS_green_left<='1';
                        NS_red_left<='0';
                    NS_people_green<='0';
                      NS_people_red<='1';        
                               WE_green<='0';
                                 WE_red<='1';
                             WE_yellow <='0';
                          WE_green_left<='0';
                           WE_red_left <='1';
                        WE_people_green<='0';
                          WE_people_red<='1';
                      if counter=29 then
                           data<="00";
                          state<=S00;
                             cr:='0';
                            cnt:='0';
                       else
                         state<=S3;
                            cr:='1';
                           cnt:='1';
                       end if;
               end case;
             end if;
      end process;
   end behave;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -