?? dianti.txt
字號:
--文件名:dianti.vhd。 --功能:6層樓的電梯控制系統。 --最后修改日期:2004.4.12。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all; e
ntity dianti is port ( clk : in std_logic; --時鐘信號(頻率為2Hz)
full,deng,quick,clr : in std_logic; --超載、關門中斷、提前關門清除報警信號
c_u1,c_u2,c_u3,c_u4,c_u5: in std_logic; --電梯外人的上升請求信號
c_d2,c_d3,c_d4,c_d5,c_d6 : in std_logic; --電梯外人的下降請求信號
d1,d2,d3,d4,d5,d6 : in std_logic; --電梯內人的請求信號
g1,g2,g3,g4,g5,g6 : in std_logic; --到達樓層信號
door : out std_logic_vector(1 downto 0); --電梯門控制信號
led : out std_logic_vector(6 downto 0); --電梯所在樓層顯示
led_c_u:out std_logic_vector(5 downto 0); --電梯外人上升請求信號顯示
led_c_d:out std_logic_vector(5 downto 0); --電梯外人下降請求信號顯示
led_d : out std_logic_vector(5 downto 0); --電梯內請求信號顯示
wahaha : out std_logic; --看門狗報警信號
ud,alarm : out std_logic; --電梯運動方向顯示,超載警告信號
up,down : out std_logic ); --電機控制信號和電梯運動
end dianti; architecture behav of dianti is signal d11,d22,d33,d44,d55,d66:std_logic; --電梯內人請求信號寄存信號
signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic; --電梯外人上升請求信號寄存信號
signal c_d22,c_d33,c_d44,c_d55,c_d66:std_logic; --電梯外人下降請求信號寄存信號
signal q:integer range 0 to 1; --分頻信號
signal q1:integer range 0 to 6; --關門延時計數器
signal q2:integer range 0 to 9; --看門狗計數器
signal dd,cc_u,cc_d,dd_cc:std_logic_vector(5 downto 0); --電梯內外請求信號寄存器
signal opendoor:std_logic; --開門使能信號
signal updown:std_logic; --電梯運動方向信號寄存器
signal en_up,en_dw:std_logic; --預備上升、預備下降預操作使能信號
begin com:process(clk) begin if clk'event and clk='1' then if clr='1' then q1<=0;q2<=0;wahaha<='0'; --清除故障報警
elsif full='1' then alarm<='1'; q1=3 then door<="10"; else door<="00"; end if; elsif q=1 then q<=0;alarm<='0'; if q2=3 then wahaha<='1'; --故障報警
else if opendoor='1' then door<="10";q1<=0;q2<=0;up<='0';down<='0'; --開門操作
elsif en_up='1' then --上升預操作
if deng='1' then door<="10";q1<=0;q2<=q2+1; --關門中斷
elsif quick='1' then q1<=3; --提前關門
elsif q1=6 then door<="00";updown<='1';up=3 then door<="01";q1<=q1+1; --電梯進入關門狀態
else q1<=q1+1;door<="00"; --電梯進入等待狀態
end if; elsif en_dw='1' then --下降預操作
if deng='1' then door<="10";q1<=0;q2<=q2+1; elsif quick='1' then q1<=3; elsif q1=6 then door<="00";updown<='0';down=3 then door<="01";q1<=q1+1; else q1<=q1+1;door<="00"; end if; end if; if g1='1' then led<="1001111"; --電梯到達1樓,數碼管顯示1
if d11='1' or c_u11='1' then d11<='0'; c_u11<='0';opendoor"000001" then en_up<='1'; opendoor<='0'; --有上升請求,則電梯進入預備上升狀態
elsif dd_cc="000000" then opendoor<='0'; --無請求時,電梯停在1樓待機
end if; elsif g2='1' then led<="0010010"; --電梯到達2樓,數碼管顯示2
if updown='1' then --電梯前一運動狀態位上升
if d22='1' or c_u22='1' then d22<='0'; c_u22<='0'; opendoor"000011" then en_up<='1'; opendoor<='0'; --有上升請求,則電梯進入預備上升狀態
elsif dd_cc<"000010" then en_dw<='1'; opendoor<='0'; --有下降請求,則電梯進入預備下降狀態
end if; --電梯前一運動狀態為下降
elsif d22='1' or c_d22='1' then d22<='0'; c_d22<='0';opendoor<='1'; --有當前層的請求,則電梯進入開門狀態
elsif dd_cc<"000010" then en_dw<='1'; opendoor"000011" then en_up<='1'; opendoor<='0'; --有上升請求,則電梯進入預備上升狀態end if; elsif g3='1' then led<="0000110"; --電梯到達3樓,數碼管顯示3
if updown='1' then if d33='1' or c_u33='1' then d33<='0'; c_u33<='0';opendoor"000111" then en_up<='1'; opendoor<='0'; elsif dd_cc<"000100" then en_dw<='1'; opendoor<='0'; end if; elsif d33='1' or c_d33='1' then d33<='0'; c_d33<='0'; opendoor<='1'; elsif dd_cc<"000100" then en_dw<='1'; opendoor"000111" then en_up<='1'; opendoor<='0'; end if; elsif g4='1' then led<="1001100"; --電梯到達4樓,數碼管顯示4
if updown='1' then if d44='1' or c_u44='1' then d44<='0'; c_u44<='0'; opendoor"001111" then en_up<='1'; opendoor<='0'; elsif dd_cc<"001000" then en_dw<='1'; opendoor<='0'; end if; elsif d44='1' or c_d44='1' then d44<='0'; c_d44<='0'; opendoor<='1'; elsif dd_cc<"001000" then en_dw<='1'; opendoor"001111" then en_up<='1'; opendoor<='0'; end if; elsif g5='1' then led<="0100100"; --電梯到達5樓,數碼管顯示5
if updown='1' then if d55='1' or c_u55='1' then d55<='0'; c_u55<='0';opendoor"011111" then en_up<='1'; opendoor<='0'; elsif dd_cc<"010000" then en_dw<='1'; opendoor<='0'; end if; elsif d55='1' or c_d55='1' then d55<='0'; c_d55<='0';opendoor<='1'; elsif dd_cc<"010000" then en_dw<='1'; opendoor"011111" then en_up<='1'; opendoor<='0'; end if; elsif g6='1' then led<="0100000"; --電梯到達6樓,數碼管顯示6
if d66='1' or c_d66='1' then d66<='0'; c_d66<='0';opendoor<='1'; elsif dd_cc<"100000" then en_dw<='1'; opendoor<='0'; end if; else en_up<='0';en_dw<='0'; --電梯進入上升或下降狀態
end if; end if; else q<=1;alarm<='0'; --清除超載報警
if d1='1' then d11<=d1; --對電梯內人請求信號進行檢測和寄存
elsif d2='1' then d22<=d2; elsif d3='1' then d33<=d3; elsif d4='1' then d44<=d4; elsif d5='1' then d55<=d5; elsif d6='1' then d66<=d6; end if; if c_u1='1' then c_u11<=c_u1; --對電梯外人上升請求信號進行檢測和寄存
elsif c_u2='1' then c_u22<=c_u2; elsif c_u3='1' then c_u33<=c_u3; elsif c_u4='1' then c_u44<=c_u4; elsif c_u5='1' then c_u55<=c_u5; end if; if c_d2='1' then c_d22<=c_d2; --對電梯外人下降請求信號進行檢測和寄存
elsif c_d3='1' then c_d33<=c_d3; elsif c_d4='1' then c_d44<=c_d4; elsif c_d5='1' then c_d55<=c_d5; elsif c_d6='1' then c_d66<=c_d6; end if; dd<=d66&d55&d44&d33&d22&d11; --電梯內人請求信號并置
cc_u<='0'&c_u55&c_u44&c_u33&c_u22&c_u11; --電梯外人上升請求信號并置
cc_d<=c_d66&c_d55&c_d44&c_d33&c_d22&'0'; --電梯外人下降請求信號并置
dd_cc<=dd or cc_u or cc_d; --電梯內、外人請求信號進行綜合
end if; ud<=updown; --電梯運動狀態顯示
led_d<=dd; --電梯內人請求信號顯示
led_c_u<=cc_u; --電梯外人上升請求信號顯示
led_c_d<=cc_d; --電梯外人下降請求信號顯示
end if; end process;
end behav;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -