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

📄 jiaotongdeng.txt

📁 这是用VHDL语言编译的交通灯程序
💻 TXT
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jtd IS
       PORT(CLK,CLK0,RST:IN STD_LOGIC;
                   Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
                   Q:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
                   SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END jtd;
ARCHITECTURE BEHAV OF jtd IS
TYPE STATES IS (ST0,ST1,ST2,ST3,ST4);
SIGNAL C_S,N_S:STATES:=ST0;
SIGNAL BCD1N:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL BCD10N:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL OPT:STD_LOGIC:='0';
SIGNAL LED:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK,RST)
BEGIN
IF(RST='1')THEN
   C_S<=ST0;
ELSIF(CLK'EVENT AND CLK='1')THEN
      C_S<=N_S;
END IF;
END PROCESS;
PROCESS(C_S,RST,BCD1N,BCD10N)
BEGIN
CASE C_S IS
WHEN ST0=>Q<="100100";           ----初始状态,两个红灯亮(3S)
     IF(RST='1')THEN 
         N_S<=ST0;
     ELSIF(BCD10N="0000" AND BCD1N="0010")THEN
         N_S<=ST1;
     
     ELSE N_S<=ST0;
          END IF;
WHEN ST1=>Q<="001100";           ----状态1,南北红灯亮,东西绿灯亮(27s)
     IF(OPT='0')THEN
     IF(BCD10N="0010" AND BCD1N="0111")THEN
        N_S<=ST2;
     ELSE N_S<=ST1;
     END IF;
     END IF;
WHEN ST2=>Q<="010100";           ----状态2,南北红灯亮,东西黄灯亮(3S)
     IF(OPT='0')THEN
     IF(BCD10N="0010" AND BCD1N="1001")THEN
        N_S<=ST3;
     ELSE N_S<=ST2;
     END IF;
     END IF;
WHEN ST3=>Q<="100001";           ------状态3,南北绿灯亮,东西红灯亮(57S)
     IF(OPT='1')THEN
     IF(BCD10N="0101" AND BCD1N="0111")THEN
        N_S<=ST4;
     ELSE N_S<=ST3;
     END IF;
     END IF;
WHEN ST4=>Q<="100010";           ------状态4,南北黄灯亮,东西亮红灯
     IF(OPT='1')THEN
     IF(BCD10N="0101" AND BCD1N="1001")THEN
        N_S<=ST1;
     ELSE N_S<=ST4;
     END IF;
     END IF;
WHEN OTHERS=>N_S<=ST0;
END CASE;
END PROCESS;
PROCESS(CLK,RST)               ----个位变化          
BEGIN
IF(RST='1')THEN                
   BCD1N<="0000";
ELSIF(CLK'EVENT AND CLK='1')THEN
      IF(BCD1N="1001")THEN
         BCD1N<="0000";
      ELSE BCD1N<=BCD1N+1;
      END IF;
END IF;
END PROCESS;
PROCESS(CLK,OPT,RST)
BEGIN
IF(RST='1')THEN              ----十位变化
   BCD10N<="0000";
ELSIF(CLK'EVENT AND CLK = '1')THEN
      IF(BCD1N = "1001") THEN
         IF(OPT='0' AND BCD10N="0010")THEN
            BCD10N<="0000";
            OPT<=NOT OPT;
         ELSIF(OPT='1' AND BCD10N="0101")THEN
            BCD10N<="0000";
            OPT<=NOT OPT;
      ELSE BCD10N<=BCD10N+1; 
         END IF; 
      END IF;
END IF;
END PROCESS;
PROCESS(CLK0,LED) 
BEGIN
IF(CLK0 ='1')THEN
   SEL<="001";
   LED<=BCD1N;
ELSE SEL<="000";
     LED<=BCD10N;
END IF;
CASE LED IS
WHEN "0000"=>Y<="0111111";
WHEN "0001"=>Y<="0000110";
WHEN "0010"=>Y<="1011011";
WHEN "0011"=>Y<="1001111";
WHEN "0100"=>Y<="1100110";
WHEN "0101"=>Y<="1101101";
WHEN "0110"=>Y<="1111101";
WHEN "0111"=>Y<="0000111";
WHEN "1000"=>Y<="1111111";
WHEN "1001"=>Y<="1101111";
WHEN "1010"=>Y<="1110111";
WHEN "1011"=>Y<="1111100";
WHEN "1100"=>Y<="0111001";
WHEN "1101"=>Y<="1011110";
WHEN "1110"=>Y<="1111001";
WHEN "1111"=>Y<="1110001";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END BEHAV;

⌨️ 快捷键说明

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