文档详情

vhdl设计_三层电梯控制程序.doc

发布:2015-09-26约8.31千字共7页下载文档
文本预览下载声明
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity lift is port(clk,reset,up1,up2,down2,down3,stop1,stop2,stop3,checkow:in std_logic; --buttons uplight,downlight,stoplight:buffer std_logic_vector(3 downto 1); udmode:buffer std_logic; --0- 电梯处于上升模式,1-电梯处于下降木模式 position:buffer integer range 1 to 3; --电梯位置 doorlight: out std_logic; --电梯门开关灯 loc: out std_logic_vector(6 downto 0); --显示电梯位置 ss: buffer integer range 0 to 3; --电梯所处状态--0--上升--1-下降--2停止 out_state: out std_logic_vector(6 downto 0);--电梯所处状态--u--上升d--下降--s-停止 overweight_light :out std_logic);--超重提醒灯 end lift; architecture aaa of lift is type state_type is(stopon1,dooropen,doorclose,wait1,wait2,wait3,wait4,up,down,stop); signal state:state_type:=stopon1; signal clearup,cleardown,buttclk,liftclk:std_logic; signal q,p:integer range 0 to component xianshi port( position: in integer range 0 to 9; segment_7: out std_logic_vector(6 downto 0) ); end component; component upordown port( ss: in integer range 0 to 2 ; segment_7: out std_logic_vector(6 downto 0) ); end component; begin process(clk)--电梯分频进程1s begin if reset=1 then q=0; elsif clkevent and clk=1 then if qthen liftclk=1;q=0; --if q=2 then liftclk=1;q=0; else liftclk=0;q=q+1; end if; end if; end process; process(clk)----电梯按键分频进程==0.02s begin if reset=1 then p=0; elsif clkevent and clk=1 then if p=9999999 then buttclk=1;p=0; --if p=2 then buttclk=1;p=0; else buttclk=0;p=p+1; end if; end if; end process; cont:process(reset,liftclk)--电梯状态机 variable pos :integer range 3 downto 0; begin if reset=1 then state=stopon1; clearup=0; cleardown=0; elsif liftclk=1 and liftclkevent then if checkow=1 then state=wait1; else case state is when stopon1= doorlight=1; position=1
显示全部
相似文档