没有合适的资源?快使用搜索试试~ 我知道了~
首页VHDL设计:50层电梯控制程序及FPGA实现
VHDL设计:50层电梯控制程序及FPGA实现
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 85 浏览量
更新于2024-07-03
收藏 699KB DOC 举报
本文档详细介绍了如何使用VHDL语言设计一个50层电梯控制系统,该系统旨在模拟真实的电梯运行逻辑,以FPGA为基础硬件平台。设计者是梁生辉,学号2009021449,专注于专业电路与系统课程。 电梯程序设计的核心功能包括: 1. LED显示:通过数码管实时显示电梯当前所在的楼层,便于乘客了解电梯动态。 2. 按钮控制:每个楼层的入口配备上升和下降请求按钮,按钮被按下时,对应的LED灯亮起,反映乘客的指令。 3. 电梯响应:电梯遵循方向优先原则,当在上升模式时,只响应高于当前位置的上楼请求,若有更高层的下楼请求,则会先到达下楼请求楼层再转为下降模式。 4. 门开关控制:电梯到达指定楼层后,门打开,停留15秒后自动关闭。门状态通过"doorlight"信号指示,'1'代表开启,'0'代表关闭。 整个设计采用了模块化结构,分为两个主要模块: - 电梯控制器主体模块:负责所有控制逻辑,包括处理外部请求信号、内部请求信号,以及状态转换,如上升、下降、停止等。它还驱动LED显示器,如楼层显示、请求信号指示灯以及电梯门开关。 - 显示模块:专责电梯状态和操作信息的可视化,确保乘客能够清晰地看到电梯的运行状态。 在程序初始化阶段,电梯被设置在第一层,门打开,运行方向标志udsig设为'0'(表示上升),并相应地设置LED显示和门状态。在运行过程中,时间控制机制确保电梯在到达目的地后保持15秒的停留时间,然后自动关闭门。 通过VHDL编程语言,设计者实现了这些复杂的控制逻辑和状态管理,确保电梯按照预设的算法和规则高效、准确地运行。这是一项结合硬件与软件设计的实际应用项目,展示了对VHDL编程的深入理解和实际操作能力。
资源详情
资源推荐
variable pos: integer range 50 downto 1;
begin
if reset='1'then
state<=stopon1;
clearup<='0';
cleardn<='0';
elsif rising_edge (clk) then
case state is
when stopon1=>doorlight<='1';position<=1;pos:=1;state<=wait1;udsig<='0';--
posdisplay1<="0000";posdisplay0<="0001"; --初始状态
when wait1=>state<=wait2; --停 15 秒
when wait2=>clearup<='0';cleardn<='0';state<=wait3;
when wait3=>state<=wait4;
when wait4=>state<=wait5;
when wait5=>state<=wait6;
when wait6=>state<=wait7;
when wait7=>state<=wait8;
when wait8=>state<=wait9;
when wait9=>state<=wait10;
when wait10=>state<=wait11;
when wait11=>state<=wait12;
when wait12=>state<=wait13;
when wait13=>state<=wait14;
when wait14=>state<=wait15;
when wait15=>state<=doorclose;
when doorclose=>doorlight<='0';
if udsig='0' then --上升情况
if position=50 then ----电梯在 50 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='1';state<=doorclose;
else
udsig<='1';state<=down;
end if;
elsif position=49 then --电梯在 49 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight(50)='1' or downlight(50)='1' then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
10
elsif position=48 then --电梯在 48 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"0FFFFFFFFFFFF" or downlight>X"0FFFFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=47 then --电梯在 47 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"07FFFFFFFFFFF" or downlight>X"07FFFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=46 then --电梯在 46 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"03FFFFFFFFFFF" or downlight>X"03FFFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=45 then --电梯在 45 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"01FFFFFFFFFFF" or downlight>X"01FFFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=44 then --电梯在 44 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"00FFFFFFFFFFF" or downlight>X"00FFFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=43 then --电梯在 43 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"007FFFFFFFFFF" or downlight>X"007FFFFFFFFFF" then
11
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=42 then --电梯在 42 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"003FFFFFFFFFF" or downlight>X"003FFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=41 then --电梯在 41 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"001FFFFFFFFFF" or downlight>X"001FFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=40 then --电梯在 40 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"000FFFFFFFFFF" or downlight>X"000FFFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=39 then --电梯在 39 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"0007FFFFFFFFF" or downlight>X"0007FFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
elsif position=38 then --电梯在 38 楼
if stoplight="0" and uplight="0" and downlight="0" then
udsig<='0';state<=doorclose;
elsif stoplight>X"0003FFFFFFFFF" or downlight>X"0003FFFFFFFFF" then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
end if;
12
剩余55页未读,继续阅读
omyligaga
- 粉丝: 61
- 资源: 2万+
下载权益
电子书特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功