这是某高校数字电路实验II课设,已实现2022年秋季学期所有功能

软硬件配置

系统:win10
软件:Vivado 2018.3
开发板芯片:xc7a35tftg256-2

设计要求

1、实现2层楼的简易电梯控制系统。
2、电梯有4个按键。
1楼外只有向上按键(KEY0),2楼外只有向下按键(KEY1),电梯内还有2个按键分别为1楼按键(KEY2)和2楼按键(KEY3)。所有楼层外和电梯内的按键产生的信号作为给电梯的运行请求信号。
3、电梯有4个指示灯(LED0、 LED1 、 LED2 、 LED3)。
LED0: 按下KEY0键,若电梯不在1楼,则LED0亮。
LED1: 按下KEY1键,若电梯不在2楼,则LED1亮。
LED2: 电梯在1楼,按KEY3键, 则LED3亮,电梯到2楼后LED3灭。
LED3: 电梯在2楼,按KEY2键, 则LED2亮,电梯到1楼后LED2灭。
4、有2个数码管,分别显示当前运行状态及楼层。
(1)1个数码管显示当前运行状态,电梯有三个运行状态:待机、上行、下行。
待机:电梯停在1楼或2楼且无请求信号时均为待机状态。
上行状态:电梯停在1楼,有KEY1或KEY3被按下时进入上行状态。
下行状态:电梯停在2楼,有KEY0或KEY2被按下时进入 下行状态。
(2)1个数码管显示所在楼层,显示1或2;每一层楼之间的运行时间间隔为3秒。
5、有2个拨码开关。
(1)复位开关。向下拨动后,电梯复位回到1楼。
(2)启动开关。向上拨动后,按键有效,电梯正常工作。
6、增加其它功能。
(1)电梯上行时,LED11至LED7五个指示灯从右到左每隔0.6秒点亮一个;
电梯下行时,LED7至LED11五个指示灯从左到右每隔0.6秒点亮一个。
(2)电梯运行到达新楼层时,蜂鸣器发出一声清晰“嘀”声。
(3)电梯开始上行或下行时,在最左边两个数码管上正计时显示运行时间0.0-2.9(秒),精度为0.1秒。到达新楼层时显示3.0(秒)。
(4)电梯上行时,楼层显示数码管前2秒显示1,后1秒显示2;
电梯下行时,楼层显示数码管前2秒显示2,后1秒显示1。

设计思路

容易得出的一个结论是:电梯一共有以下几种互相独立的状态——“在1楼”、“在上行过程中”、“在2楼”、“在下行过程中”。而4个楼层按键无非就是“上行”、“下行”两种。对于“下楼”而言,如果对前述4种状态依次考虑未免过于复杂。事实上,我们可以将4种状态化简为两种——“在1楼”和“不在1楼”。那么对于这两种状态,我们引出标志量floor1来表示:在1楼时标志量为1,否则为0。同理引出标志量floor2。
据此我们可以得到如下推论:当标志量floor1为0时,“下行”类按键按下时我们才应该控制电梯下行。同理,上行亦然。然而,这里有一个问题是:存在各有一个有效的“上行”、“下行”在较短的时间内按下的情况,它们将出现控制上的冲突。对此我们暂且延后考虑,前述内容对应代码如下:

//电梯不在2楼,电梯内按下2楼键,等待上行
if(!floor2&&!key[3])begin//控制上行
end
//电梯不在1楼,电梯内按下1楼键,等待下行
if(!floor1&&!key[2])begin//控制下行
end
//电梯不在2楼,2楼外按下下楼键,等待上行
if(!floor2&&!key[1])begin//控制上行
end
//电梯不在1楼,1楼外按下上楼键,等待下行
if(!floor1&&!key[0])begin//控制下行
end

现在先考虑实现3秒运行、0.1秒间隔计时、每0.6秒点亮一个流水灯、前2秒显示前一楼层后1秒显示新楼层等功能。很容易想到使用计数的方式实现,并采用它们的最大因数100ms作为时钟信号。使用变量cnt对时钟信号进行计数,当计数到30时即完整运行了3秒。为了保障计数准确,我们在检测到“上行”、“下行”命令有效时便对cnt进行初始化赋零,计数到30后也进行清零。
引出了cnt之后,我们可以开始考虑冲突问题了。首先可以想到,为了对上行和下行时间分别计算,我们将由一个变量cnt计算运行时间改为分别用cnt1计算上行时间和用cnt2计算下行时间。显然,如果电梯正在上行即cnt1值介于0和30之间,“下行”类按键按下后,cnt2应先初始化赋零然后等到cnt1计算到30后清零,此时才能开始计数。如何让cnt2挂机后再进行计算呢?我们再引入新的标志量EN1和EN2。当有“上行”类按键按下并且指令有效(即前面说的floor2为0)时,将EN1赋值为1,表示有上行指令需要运行,直到上行结束即cnt1计数到30才重新将EN1赋值为0。EN2同理。因此我们可以做出以下判断:(1)当只有EN1有效(为1)时,对上行时间进行计数即对cnt1进行累加;(2)当只有EN2有效时,对下行时间进行计数即对cnt2进行累加;(3)当EN1和EN2同时有效时,由于上行按键和下行按键按下有时间差,那么cnt1和cnt2不会相同,且后按下的按键对应的计数值此时应该为0,则值更大的是更早按下的,此时我们应对值大的那个进行计数。应该注意到的是,在进行计数的时候应同时将对应的楼层状态量进行赋零,防止未能及时检测到有效输入。至此,冲突问题解决。解决冲突问题后,我们可以也自然而然地可以对电梯的三种状态(即待机、上行和下行)进行判断,使用state变量表示,为0代表待机,1代表上行,2代表下行。上述实现代码如下:

//无需等待上行和下行
if(!EN1&&!EN2) beginstate=0;
end
//同时有上行和下行的需求
if(EN1&&EN2)begin//在上行if(cnt1>cnt2)begincnt1=cnt1+1;floor1=0;state=1;end//在下行else begincnt2=cnt2+1;floor2=0;state=2;end
end
//在上行
else if(EN1)begincnt1=cnt1+1;floor1=0;state=1;
end
//在下行
else if(EN2)begincnt2=cnt2+1;floor2=0;state=2;
end

考虑按键对应的LED灯。在根据标志量floor1和floor2判断按键按下功能有效后,我们就可以直接点亮对应的LED灯;在cnt1计数到30后,LED3和LED1同时设置为熄灭即可,不需要考虑原本亮着的是哪个;在cnt2计数到30后,LED2和LED0同时设置为熄灭。由此可以完善按键是否有效的检测代码以及清零部分代码如下:

//电梯不在2楼,电梯内按下2楼键,等待上行
if(!floor2&&!key[3])beginled[3]=1;EN1=1;  //标记有等待上行的按键按下cnt1=0;
end
//电梯不在1楼,电梯内按下1楼键,等待下行
if(!floor1&&!key[2])beginled[2]=1;EN2=1;  //标记有等待下行的按键按下cnt2=0;
end
//电梯不在2楼,2楼外按下下楼键,等待上行
if(!floor2&&!key[1])beginled[1]=1;EN1=1;  //标记有等待上行的按键按下cnt1=0;
end
//电梯不在1楼,1楼外按下上楼键,等待下行
if(!floor1&&!key[0])beginled[0]=1;EN2=1;  //标记有等待下行的按键按下cnt2=0;
end
//无需等待上行,将上行计数清零,将等待上行显示灯熄灭
if(!EN1) begincnt1=0;led[3]=0;led[1]=0;
end
//无需等待下行,将下行计数清零,将等待下行显示灯熄灭
if(!EN2) begincnt2=0;led[2]=0;led[0]=0;
end

考虑复位开关和启动开关。对于启动开关,我们只需要使用一个if语句将之前所有功能包含进去即可。而复位开关,虽然和启动开关同样是使用拨码开关,但由于要求复位时能经过3秒运行到1楼,在使用的时候有所区别。启动开关只需要判断当前启动开关对应变量的值,而复位开关若同样只根据当前对应变量的值进行判断,那么经过3秒运行到1楼的功能可能很难实现。正确做法应该是检测对应变量的瞬间变化即出现下降沿。笔者使用的方法是检测两个时钟信号之间对应变量的值是否一样,对应代码如下:

always@(posedge clk_100ms) beginrst<=reset;//复位if(rst^reset)begin  //100ms之间检测到复位键状态不一致,即异或非零if(!floor1)begin    //如果不在1楼 那么直接下楼 类似下楼键EN2=1;EN1=0;cnt1=0;cnt2=0;endend…… //别的东西
end

考虑流水灯。由于要求每0.6秒点亮一颗,即在我们的计数中,每6个时钟信号点亮一颗。设置计数到6、12、18、24、30各点亮一颗灯。同时,由于cnt1和cnt2不会同时为非零数,因此设置当两者之和小于6时使流水灯全部熄灭,这样可以使得二者不会冲突,具体实现代码如下:

//流水灯功能实现
if(cnt1+cnt2<6)led[11:7]=0;
if(cnt1==6)led[7]=1;
else if(cnt1==12)led[8]=1;
else if(cnt1==18)led[9]=1;
else if(cnt1==24)led[10]=1;
else if(cnt1==30)led[11]=1;
if(cnt2==6)led[11]=1;
else if(cnt2==12)led[10]=1;
else if(cnt2==18)led[9]=1;
else if(cnt2==24)led[8]=1;
else if(cnt2==30)led[7]=1;

考虑蜂鸣器。笔者设置让蜂鸣器在到达前的0.2s开始响,即设置了当计数超过28后蜂鸣器才会响。而要让蜂鸣器响起,需要对蜂鸣器输入人耳听力频率范围内的方波。笔者设置的是周期为4ms即频率为250Hz的方波信号,通过分频得到2ms的时钟信号,检测到上升沿后对蜂鸣器状态进行翻转。实现代码如下:

//“嘀”功能 响0.2s
always@(posedge clk_beep)beginif(cnt1>28||cnt2>28)begin   //周期为4ms,即250Hzbeep=~beep; //占空比为50%endelse beep=0;
end

考虑3秒计时器和楼层、状态显示。前两者都只需要通过对cnt1和cnt2的值进行判断,并使用数码管直接显示。后者只需要对前面定义的state进行判断即可。需要注意的是应该对计时器的小数点单独进行控制。同时,为了实现状态输出时分别显示一条横杆,在数字位判断中使用10及以外的数字表示3个状态。部分代码如下:
顶层文件中:

decoder_7seg dec(.cnt(cnt1+cnt2),    //计时显示,由于二者不同时计数即至少有一个为0,因此取加.floor(datashow),   //楼层显示.sta(state),      //状态显示.seg(seg),.dig(dig),.clkin(clkin)
);
……
//楼层显示
if(0<cnt1&&cnt1<20)datashow=1;
else if(cnt1>=20)datashow=2;
if(0<cnt2&&cnt2<20)datashow=2;
else if(cnt2>=20)datashow=1;

数码管模块文件中:

//状态机实现数码管切换
integer state=0,showdata;
always@(posedge clk)begin//楼层显示if(state==0)beginstate<=1;dig=6'b111110;showdata=floor;seg[0]=0;end//状态显示if(state==1)beginstate<=2;dig=6'b111101;showdata=10+sta;seg[0]=0;end//计时个位else if(state==2)beginstate<=3;dig=6'b011111;showdata=cnt/10;seg[0]=1;   //小数点位单独判断end//计时十分位else if(state==3)beginstate<=0;dig=6'b101111;showdata=cnt%10;seg[0]=0;end
end
//数字位判断
always@(showdata)case(showdata)4'b0000: seg[7:1] = 7'b1111110;4'b0001: seg[7:1] = 7'b0110000;4'b0010: seg[7:1] = 7'b1101101;4'b0011: seg[7:1] = 7'b1111001;4'b0100: seg[7:1] = 7'b0110011;4'b0101: seg[7:1] = 7'b1011011;4'b0110: seg[7:1] = 7'b0011111;4'b0111: seg[7:1] = 7'b1110000;4'b1000: seg[7:1] = 7'b1111111;4'b1001: seg[7:1] = 7'b1110011;4'b1010: seg[7:1] = 7'b0000001; //使用10及以外的数字表示3个状态4'b1011: seg[7:1] = 7'b1000000;4'b1100: seg[7:1] = 7'b0001000;default: seg[7:1] = 7'b0000000;endcase

至此,设计所有功能均能完成。附录中给出完整代码,需要注意的是,为了让流水灯功能实现更加贴近真实情况,笔者在约束文件中将流水灯到为LED12到16,使其上下流动而非左右流动。

附录:完整代码

顶层文件:

module top(input clkin,    //时钟input power,    //启动开关input reset,    //复位开关input [3:0] col,output reg beep,    //蜂鸣器output reg [11:0]led,output [7:0] seg,output [5:0] dig,output [3:0] row);wire clk_100ms,clk_btn,clk_beep;    //100ms时钟,按键扫描时钟,蜂鸣器频率时钟wire [3:0]key;integer floor1=1,floor2=0,cnt1=0,cnt2=0,EN1=0,EN2=0,datashow=0,rst=0,state=0;//floor1:1为在1楼 0为不在1楼 cnt1:上楼计数 EN1:1为(等待)上行中//state:0 待机 1 上行状态 2 下行状态assign row[3:0]=4'b1110;s_div clk(.clkin(clkin),.clkout(clk_100ms),.clkout2(clk_btn),.clkout3(clk_beep));decoder_7seg dec(.cnt(cnt1+cnt2),    //计时显示,由于二者不同时计数即至少有一个为0,因此取加.floor(datashow),   //楼层显示.sta(state),      //状态显示.seg(seg),.dig(dig),.clkin(clkin));// assign key=col;ajxd a(.btn_in(col),.btn_clk(clk_btn),.btn_out(key));//“嘀”功能 响0.2salways@(posedge clk_beep)beginif(cnt1>28||cnt2>28)begin   //周期为4ms,即250Hzbeep=~beep; //占空比为50%endelse beep=0;end//以0.1s周期的速度进行计数always@(posedge clk_100ms) beginrst<=reset;//复位if(rst^reset)begin  //100ms之间检测到复位键状态不一致,即异或非零if(!floor1)begin    //如果不在1楼 那么直接下楼 类似下楼键EN2=1;EN1=0;cnt1=0;cnt2=0;endend//未开启if(!power) begincnt1=0;cnt2=0;EN1=0;EN2=0;datashow=0;end//开启else begin//电梯不在2楼,电梯内按下2楼键,等待上行if(!floor2&&!key[3])beginled[3]=1;EN1=1;  //标记有等待上行的按键按下cnt1=0;end//电梯不在1楼,电梯内按下1楼键,等待下行if(!floor1&&!key[2])beginled[2]=1;EN2=1;  //标记有等待下行的按键按下cnt2=0;end//电梯不在2楼,2楼外按下下楼键,等待上行if(!floor2&&!key[1])beginled[1]=1;EN1=1;  //标记有等待上行的按键按下cnt1=0;end//电梯不在1楼,1楼外按下上楼键,等待下行if(!floor1&&!key[0])beginled[0]=1;EN2=1;  //标记有等待下行的按键按下cnt2=0;endend//无需等待上行和下行if(!EN1&&!EN2) beginstate=0;end//无需等待上行,将上行计数清零,将等待上行显示灯熄灭if(!EN1) begincnt1=0;led[3]=0;led[1]=0;end//无需等待下行,将下行计数清零,将等待下行显示灯熄灭if(!EN2) begincnt2=0;led[2]=0;led[0]=0;end//同时有上行和下行的需求if(EN1&&EN2)begin//在上行if(cnt1>cnt2)begincnt1=cnt1+1;floor1=0;state=1;end//在下行else begincnt2=cnt2+1;floor2=0;state=2;endend//在上行else if(EN1)begincnt1=cnt1+1;floor1=0;state=1;end//在下行else if(EN2)begincnt2=cnt2+1;floor2=0;state=2;end//楼层显示if(0<cnt1&&cnt1<20)datashow=1;else if(cnt1>=20)datashow=2;if(0<cnt2&&cnt2<20)datashow=2;else if(cnt2>=20)datashow=1;//流水灯功能实现if(cnt1+cnt2<6)led[11:7]=0;if(cnt1==6)led[7]=1;else if(cnt1==12)led[8]=1;else if(cnt1==18)led[9]=1;else if(cnt1==24)led[10]=1;else if(cnt1==30)led[11]=1;if(cnt2==6)led[11]=1;else if(cnt2==12)led[10]=1;else if(cnt2==18)led[9]=1;else if(cnt2==24)led[8]=1;else if(cnt2==30)led[7]=1;//到2楼了if(cnt1==30)beginEN1=0;floor2=1;cnt1=0;end//到1楼了if(cnt2==30)beginEN2=0;floor1=1;cnt2=0;endend
endmodule

分频模块程序:

module s_div (clkin,clkout,clkout2,clkout3);input   clkin;output    reg  clkout=0,clkout2=0,clkout3=0;//用reg后面always中需要改变数值。integer    qout=0,qout2=0,qout3=0;//用行为描述实现always@(posedge clkin)begin    if(qout==2499999) //100msbeginqout<=0;clkout<=~clkout;endelse    qout<=qout+1;if(qout2==499999) //20msbeginqout2<=0;clkout2<=~clkout2;endelse    qout2<=qout2+1;if(qout3==49999) //2msbeginqout3<=0;clkout3<=~clkout3;endelse    qout3<=qout3+1;end
endmodule

按键消抖模块程序:

module ajxd(input [3:0]btn_in,input btn_clk,output [3:0]btn_out);  reg  [3:0] btn0=0;//定义了btn0寄存器reg  [3:0] btn1=0;//定义了btn1寄存器reg  [3:0] btn2=0;//定义了btn2寄存器always@(posedge btn_clk)beginbtn0<=btn_in;btn1<=btn0;btn2<=btn1;endassign btn_out=(btn2&btn1&btn0)|(~btn2&btn1&btn0);
endmodule

数码管显示模块程序:

module decoder_7seg (    input [4:0] cnt,    //计时input [1:0] floor,  //楼层input [1:0] sta,  //状态output reg [7:0] seg,output reg [5:0] dig,input clkin);//分频用以不同数码管显示reg clk=0;integer    qout=0;always@(posedge clkin)begin    if(qout==24999) //1msbeginqout<=0;clk<=~clk;endelse qout<=qout+1;end//状态机实现数码管切换integer state=0,showdata;always@(posedge clk)begin//楼层显示if(state==0)beginstate<=1;dig=6'b111110;showdata=floor;seg[0]=0;end//状态显示if(state==1)beginstate<=2;dig=6'b111101;showdata=10+sta;seg[0]=0;end//计时个位else if(state==2)beginstate<=3;dig=6'b011111;showdata=cnt/10;seg[0]=1;   //小数点位单独判断end//计时十分位else if(state==3)beginstate<=0;dig=6'b101111;showdata=cnt%10;seg[0]=0;endend//数字位判断always@(showdata)case(showdata)4'b0000: seg[7:1] = 7'b1111110;4'b0001: seg[7:1] = 7'b0110000;4'b0010: seg[7:1] = 7'b1101101;4'b0011: seg[7:1] = 7'b1111001;4'b0100: seg[7:1] = 7'b0110011;4'b0101: seg[7:1] = 7'b1011011;4'b0110: seg[7:1] = 7'b0011111;4'b0111: seg[7:1] = 7'b1110000;4'b1000: seg[7:1] = 7'b1111111;4'b1001: seg[7:1] = 7'b1110011;4'b1010: seg[7:1] = 7'b0000001; //使用10及以外的数字表示3个状态4'b1011: seg[7:1] = 7'b1000000;4'b1100: seg[7:1] = 7'b0001000;default: seg[7:1] = 7'b0000000;endcase
endmodule

约束文件:

set_property PACKAGE_PIN D4 [get_ports clkin]
set_property IOSTANDARD LVCMOS33 [get_ports clkin]set_property PACKAGE_PIN T9 [get_ports power]
set_property IOSTANDARD LVCMOS33 [get_ports power]set_property PACKAGE_PIN F3 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]set_property PACKAGE_PIN L2 [get_ports beep]
set_property IOSTANDARD LVCMOS33 [get_ports beep]set_property PACKAGE_PIN R12 [get_ports {col[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {col[0]}]
set_property PACKAGE_PIN T12 [get_ports {col[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {col[1]}]
set_property PACKAGE_PIN R11 [get_ports {col[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {col[2]}]
set_property PACKAGE_PIN T10 [get_ports {col[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {col[3]}]set_property PACKAGE_PIN K3 [get_ports {row[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {row[0]}]
set_property PACKAGE_PIN M6 [get_ports {row[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {row[1]}]
set_property PACKAGE_PIN P10 [get_ports {row[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {row[2]}]
set_property PACKAGE_PIN R10 [get_ports {row[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {row[3]}]set_property PACKAGE_PIN N11 [get_ports {dig[5]}]
set_property PACKAGE_PIN N14 [get_ports {dig[4]}]
set_property PACKAGE_PIN N13 [get_ports {dig[3]}]
set_property PACKAGE_PIN M12 [get_ports {dig[2]}]
set_property PACKAGE_PIN H13 [get_ports {dig[1]}]
set_property PACKAGE_PIN G12 [get_ports {dig[0]}]
set_property PACKAGE_PIN P11 [get_ports {seg[7]}]
set_property PACKAGE_PIN N12 [get_ports {seg[6]}]
set_property PACKAGE_PIN L14 [get_ports {seg[5]}]
set_property PACKAGE_PIN K13 [get_ports {seg[4]}]
set_property PACKAGE_PIN K12 [get_ports {seg[3]}]
set_property PACKAGE_PIN P13 [get_ports {seg[2]}]
set_property PACKAGE_PIN M14 [get_ports {seg[1]}]
set_property PACKAGE_PIN L13 [get_ports {seg[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {dig[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seg[0]}]set_property PACKAGE_PIN P9 [get_ports {led[0]}]
set_property PACKAGE_PIN R8 [get_ports {led[1]}]
set_property PACKAGE_PIN R7 [get_ports {led[2]}]
set_property PACKAGE_PIN T5 [get_ports {led[3]}]
set_property PACKAGE_PIN N6 [get_ports {led[4]}]
set_property PACKAGE_PIN T4 [get_ports {led[5]}]
set_property PACKAGE_PIN T3 [get_ports {led[6]}]
set_property PACKAGE_PIN P5 [get_ports {led[7]}]
set_property PACKAGE_PIN P1 [get_ports {led[8]}]
set_property PACKAGE_PIN N1 [get_ports {led[9]}]
set_property PACKAGE_PIN M1 [get_ports {led[10]}]
set_property PACKAGE_PIN L4 [get_ports {led[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[11]}]

FPGA实现简易电梯控制系统设计相关推荐

  1. 简易电梯控制系统设计(两层楼)(

    (电子科技大学  数字系统实验二 结课验收项目  fpga板 veriolg语言)) 第一次写,实属小白,写的不好请见谅.就对这个设计提供自己的一点思路看法 题目要求: 板子了一般都是学校发的板子,我 ...

  2. 【基于S7-200 PLC的电梯控制系统设计】

    基于S7-200 PLC的电梯控制系统设计 [摘要]电梯作为现代高层建筑的垂直交通工具,与人们的生活紧密联系,随着人们对电梯运行的安全性.高效性.舒适性.方便性等要求的不断提高,让电梯得到快速发展.本 ...

  3. c语言怎么实现电梯控制系统设计,基于单片机的电梯控制系统设计.doc

    PAGE 本科生毕业论文(设计) 题 目: 基于单片机的电梯控制系统设计 姓 名: 学 院: 工学院 专 业: 自动化 班 级: 学 号: 指导教师: 职称: 副教授 2012 目 录 TOC \o ...

  4. 计算机原理电梯控制系统设计,《智能电梯控制系统的实现》-毕业论文(设计).doc...

    PAGE 精品 题目:基于FPGA的智能电梯控制系统的实现 年 12 月 07 日 摘要 智能电梯控制系统的设计思想 智能电梯的编写的过程也不是一帆风顺的.而且我试过好多种方法去实现电梯的状态的转移. ...

  5. 基于单片机的四层电梯控制系统设计

    目录 4层电梯单片机控制设计 4 设计任务 4 整体方案设计 5 系统硬件电路设计 6 3.1 单片机最小系统电路 6 图3-1 单片机最小系统电路图 6 3.2 开关控制电路 7 图3-2 开关控制 ...

  6. java交通信号灯毕业论文范文_信号灯设计论文,关于基于FPGA的交通信号灯控制系统设计相关参考文献资料-免费论文范文...

    导读:本文关于信号灯设计论文范文,可以做为相关参考文献. 文/ 胡桂戎 陕西警官职业学院 陕西 西安 710021 [摘 要]本文采用FPGA 设计,结合了道路传感器,设计了交通信号灯全感应自适应的控 ...

  7. 模拟电梯控制软件设计c语言,模拟电梯控制系统设计.docx

    PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT IV 摘 要 我们所说的单片机就是单片微型计算机(Single-Chip Microcomputer )又可以称作微控制 ...

  8. 单片机c语言电梯程序设计,基于51单片机的模拟电梯控制系统设计.doc

    摘要:本文介绍了一种电梯模拟控制系统,包括怎样利用对STC89C52进行编程从而对电梯实现自由控制的方式.该系统采用了STC89C52芯片进行控制,用单片机进行编程,能实现的功能非常多而且方便设计,并 ...

  9. linux自动电梯设计,基于ARM与Linux的电梯控制系统设计与实现

    摘要: 如今,我国电梯市场销售占据世界电梯销售的重要份额,随着我国城市建设的快速发展,建筑的高度以及数量获得显著突破,对于电梯的依赖更加明显与强烈.电梯产业蓬勃发展的同时,人们对于电梯的安全,稳定,速 ...

最新文章

  1. 有了这个 IDEA的兄弟,你还用 Navicat 吗?全家桶不香吗?
  2. BF法-字符模式匹配
  3. NanoPi NEO Air使用六:使用摄像头
  4. storage.googleapis.com 访问与下载慢
  5. 牛客网_PAT乙级_1019. 数字黑洞 (20)
  6. Python中使用random随机函数与Matplotlib库绘制随机漫步图
  7. 合并两个有序数组-c语言
  8. H3C路由器配置——动态路由OSPF协议
  9. 计算机专业如何晋级正高级,已有软考高级证书如何获得正高级职称?
  10. HNU君陌:写一点文艺的东西
  11. APK瘦身记,如何实现高达53%的压缩效果
  12. 魔百盒 修改时间服务器,魔百盒网关服务器下发超时
  13. 国产数据库40年演变,这3个坎一直跨不过去
  14. 今天感受了一下ipad
  15. 机器学习(三) 线性回归
  16. HIS与护理系统集成经验之我谈
  17. 不把Redis知识点吃透还想面试大厂拿高薪?这份Redis超牛笔记送给你!
  18. 没有基础,能学PHP开发吗?
  19. 入门指南:菜鸟如何学习数据分析?
  20. 联想拯救者14实现快捷键调屏幕亮度

热门文章

  1. 批量采集多个淘宝商品的洋淘买家秀图片并统一保存
  2. 判断某个对象属性值都不为空/至少有一个属性值不为空
  3. 微信小程序开发中遇到的问题(前台用表格形式显示数据)
  4. 拼多多 2020校园招聘 二维表第k大数(二分)
  5. python实现批量翻译
  6. 开发中遇到的bug-Property or method “xxxx“ is not defined on the instance but referenced during render.
  7. 一个开源的论坛系统AstalPathTalk
  8. Java小农养成记第二十天
  9. (Ryan的Koa系列博客)6.依赖库:on-finished(本文尚未完成)
  10. 【回归预测-LSSVM预测】基于PSO和PSR结合LSSVM实现数据回归预测附matlab代码