![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| 电梯控制器VHDL程序 | |||||
作者:Free 文章来源:Free 点击数: 更新时间:2008-1-3 ![]() |
|||||
|
--功能:6层楼的电梯控制系统。 --最后修改日期:2004.4.12。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity 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<=0; --超载报警 if 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<='1'; --关门完毕,电梯进入上升状态 elsif q1>=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<='1'; elsif q1>=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<='1'; --有当前层的请求,则电梯进入开门状态 elsif dd_cc>"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<='1'; --有当前层的请求,则电梯进入开门状态 elsif dd_cc>"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<='0'; --有下降请求,则电梯进入预备下降状态 elsif dd_cc>"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<='1'; elsif dd_cc>"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<='0'; elsif dd_cc>"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<='1'; elsif dd_cc>"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<='0'; elsif dd_cc>"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<='1'; elsif dd_cc>"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<='0'; elsif dd_cc>"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; |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|