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

📄 jiaotongdengkongzhi.txt

📁 《交通控制灯》
💻 TXT
字号:
library ieee;
use ieee.std_logic_1164.all;

entity trafficlight is
    port (
        clk:in std_logic;   -- clock
        sm,sb : in std_logic;      --主干道M,支干道B传感信号
        MR_N,MY_N,MG_N,BR_N,BY_N,BG_N: out std_logic --主支干道的红黄绿输出信号
        --- 为在LED上显示便于观察,此处用低电平有效
  );
 end  trafficlight;

architecture traffic of  trafficlight is
type light_states is (A,B,C,D);   -- 状态

signal state:light_states; -- 当前状态
signal MR,MY,MG,BR,BY,BG :std_logic;
begin 
process (clk)
variable i :integer range 0 to 45;  --延时计数

variable CLRN,EN:bit;         --计数器清零。使能信号
 begin 
  if (clk'event and clk='1')then  -- 同步
       if (clrn='0')then -- 计数器清零
           i:=0; --
       elsif en='0' then--使能,计数控制
           i:=i; 
      else
         i:=i+1;   --加计数
end if;

   
case state is          
       when A=>  
                MR<='0';MY<='0';MG<='1'; --主干道 m green     
                BR<='1';BY<='0';BG<='0';--支干道 b red  
            IF (SB AND SM)='1' THEN     --主干道,支干道均有车
                  if i=45 then      --m green to yellow needs 45 s
                       state<=B ;   CLRN:='0';EN:='0';

                                    -- to state :m yellow ,b red
                  else          -- still in state A
                       state<=A; CLRN:='1';EN:='1';
             end if;

           ELSIF (SB AND NOT SM)='1' THEN  
                   --sb=1,sm=0 主干道无车,支干道有车,准备转换

                     state<=B; CLRN:='0';EN:='0'; 
                        -- to state :m yellow ,b red
           ELSE    
                     state<=A; CLRN:='1';EN:='1';

            END IF;

           when B=>  
                MR<='0';MY<='1';MG<='0';--主干道 m yellow
                BR<='1';BY<='0';BG<='0';--支干道 b red
        
                  if i=5 then    -- wait 5 s
                       state<=C ;   CLRN:='0';EN:='0';
                       -- to m red,b green
                  else  -- hold
                       state<=B; CLRN:='1';EN:='1';
             end if;
        

   when C=>    ---支干道通行
                MR<='1';MY<='0';MG<='0'; --主干道 m red
                BR<='0';BY<='0';BG<='1';--支干道 b green

            IF (SB AND SM)='1' THEN   --主干道,支干道均有车
                  if i=25 then  -- b green to yellow needs 25 s
                       state<=D ;   CLRN:='0';EN:='0';
                  else 
                       state<=C; CLRN:='1';EN:='1';
                  end if;
        
              ELSIF SB='0' THEN  --- 支干道无车,不计时,直接跳转
                     state<=D; CLRN:='0';EN:='0';
           ELSE    
                     state<=C; CLRN:='1';EN:='1';

            END IF;


   when D=>    
                MR<='1';MY<='0';MG<='0';   --主干道 m red
                BR<='0';BY<='1';BG<='0';--支干道 b yellow
            
                  if i=5 then  --   b yellow to red needs 5 s
                       state<=A ;   CLRN:='0';EN:='0';

                  else  --hold
                       state<=D; CLRN:='1';EN:='1';
                  end if;

END CASE;

END IF;
END PROCESS;

MR_N<=NOT MR;MY_N<=NOT MY;MG_N<=NOT MG; --主干道 
BR_N<=NOT BR;BY_N<=NOT BY;BG_N<=NOT BG;--支干道

end architecture traffic;


⌨️ 快捷键说明

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