资源描述:
《vhdl设计_三层电梯控制程序.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityliftisport(clk,reset,up1,up2,down2,down3,stop1,stop2,stop3,checkow:instd_logic;--buttonsuplight,downlight,stoplight:bufferstd_logic_vector(3downto1);udmode:bufferstd_logic;
2、--0-电梯处于上升模式,1-电梯处于下降木模式position:bufferintegerrange1to3;--电梯位置doorlight:outstd_logic;--电梯门开关灯loc:outstd_logic_vector(6downto0);--显示电梯位置ss:bufferintegerrange0to3;--电梯所处状态--0--上升--1-下降--2停止out_state:outstd_logic_vector(6downto0);--电梯所处状态--u--上升d--下降--s-停止overweight_light:outstd
3、_logic);--超重提醒灯endlift;architectureaaaofliftistypestate_typeis(stopon1,dooropen,doorclose,wait1,wait2,wait3,wait4,up,down,stop);signalstate:state_type:=stopon1;signalclearup,cleardown,buttclk,liftclk:std_logic;signalq,p:integerrange0to;componentxianshiport(position:inintegerr
4、ange0to9;segment_7:outstd_logic_vector(6downto0));endcomponent;componentupordownport(ss:inintegerrange0to2;segment_7:outstd_logic_vector(6downto0));endcomponent;beginprocess(clk)--电梯分频进程1sbeginifreset='1'thenq<=0;elsifclk'eventandclk='1'thenifq=thenliftclk<='1';q<=0;--ifq=2th
5、enliftclk<='1';q<=0;elseliftclk<='0';q<=q+1;endif;endif;endprocess;process(clk)----电梯按键分频进程==0.02sbeginifreset='1'thenp<=0;elsifclk'eventandclk='1'thenifp=thenbuttclk<='1';p<=0;--ifp=2thenbuttclk<='1';p<=0;elsebuttclk<='0';p<=p+1;endif;endif;endprocess;cont:process(reset,lift
6、clk)--电梯状态机variablepos:integerrange3downto0;beginifreset='1'thenstate<=stopon1;clearup<='0';cleardown<='0';elsifliftclk='1'andliftclk'eventthenifcheckow='1'thenstate<=wait1;elsecasestateiswhenstopon1=>doorlight<='1';position<=1;pos:=1;state<=wait1;udmode<='0';whenwait1=>ifche
7、ckow='1'thenstate<=wait1;overweight_light<='1';elsestate<=wait2;ss<=2;overweight_light<='0';endif;whenwait2=>ifcheckow='1'thenstate<=wait1;overweight_light<='1';elseclearup<='0';cleardown<='0';state<=wait3;ss<=2;overweight_light<='0';endif;whenwait3=>ifcheckow='1'thenstate<=w
8、ait1;overweight_light<='1';elsestate<=wait4;ss<=2;overweight_light<=