数字电子技术_课程设计报告_电梯控制

时间:2024.4.2

数字电子技术课程设计报告
   

        

         题目名称    电梯控制   

 院   系     电气工程学院 

专业班级   电子工艺与管理

学生姓名     徐小可      

   

 学   号     41           

指导教师     孙艳         

 完成时间2012年11月 30

                  目录

  

     摘要..................................................................................................................... 0

一,设计目的及意义................................................................................................. 1

目的 :.................................................................................................................. 1

意义:.................................................................................................................... 1

二,整体设计.............................................................................................................. 2

2.1 设计目标..................................................................................................... 2

2.2 设计要求....................................................................................................... 2

2.3 整体设计流程图........................................................................................ 3

三,电梯控制系统的实现......................................................................................... 3

3.1 实现功能..................................................................................................... 3

3.2 实现电路..................................................................................................... 4

3.2.1 楼层的输入电路............................................................................... 4

3.2.2 555定时电路................................................................................... 4

3.2.3楼层显示电路.................................................................................... 5

3.2.4四层电梯控制系统实现总电路...................................................... 6

3.3主要元器件介绍......................................................................................... 6

3.3.1 译码器................................................................................................ 6

3.3.2数码管................................................................................................. 7

3.3.3 D触发器............................................................................................ 8

四,实验总结.............................................................................................................. 9

4. 1 设计中主要出现的问题........................................................................... 9

4.2 尚待解决的问题........................................................................................ 9

4. 3 心得体会................................................................................................... 10


             摘要

随着我国经济的高速发展,微电子技术、计算机技术数电技术也得到了迅速发展。电梯是随着高层建筑的兴建而发展起来的一种垂直运输工具。多层厂房和多层仓库需要有货梯;高层住宅需要有住宅梯;百货大楼和宾馆需要有客梯,自动扶梯等。在现代社会,电梯已像汽车、轮船一样,成为人类不可缺少的交通运输工具。据统计,美国每天乘电梯的人次多于乘载其它交通工具的人数。当今世界,电梯的使用量已成为衡量现代化程度的标志之一.

设计利用D触发器74LS74作为控制电梯按钮(即触发电平),经过编码器74LS148及比较器74LS85、计数器74LS192来实现其电梯控制功能。电路使用555的定时功能来控制上一层楼或下一层楼所用的时间,利用数码管来显示所到楼层数,并用四个发光二极管来表示四层楼。以此来设计了一个四层电梯控制系统。

关键字:D触发器74LS74;编码器74LS148;比较器74LS85;计数器74LS192;555定时器;数码管;

一,设计目的及意义

     本设计是利用已学过的数电知识,设计的四层电梯控制系统。

目的 :

(1)重温自己已学过的数电知识;

(2)掌握数字集成电路的设计方法和原理;

(3)熟悉555方波振荡器的应用,D触发器、编码器、比较器、计数器的应用、译码、显示电路的整体配合;

(4)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;

(5)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。

意义

    通过本次的课程设计,使自己能够清楚了解课程设计的过程和意义。检验自己学过的知识。使自己清楚自己到底学得怎么样是不是还有待提高的地方。使自己掌握各种芯片的使用方法,提高自己利用图书资源和网络资源的能力。

二,整体设计

  2.1 设计目标

1、系统控制的电梯往返于1 ~4 层楼。

2、乘客要去的楼层可以手动输入并显示(所在楼层的二极管亮)。

3、电梯运行的楼层可自动显示。

4、当A>B 时,系统能输出使电梯正向运行的时序信号,使电梯上升。

5、当A<B 时,系统能输出使电梯反向运行的时序信号,使电梯下降。

6、当A=B 时,系统停机信号,使电梯停止运行。

7、各层电梯门外应有使电梯上升或下降到乘客所在楼层的“呼叫”开关。

2.2 设计要求

1.根据设计原理初步画出实验电路图。

2.根据实验电路图在计算机上用Multisim仿真,找出初步设计电路的不足加以改正和改进。

3.根据改进实现后的电路图连接电路,实现设计。

  2.3 整体设计流程图

三,电梯控制系统的实现

3.1 实现功能

用四个LED显示电梯行进过程,并用数码管显示电梯当前所在楼层的位置,每层电梯的入口处设有请求按钮,按下按钮,则相应楼层的LED亮。

  电梯达到请求的楼层,该层的指示灯灭,电梯门打开;电梯自动关门,继续运行。电梯运行中,运用比较器选择所到楼层的先后顺序。

3.2 实现电路

3.2.1 楼层的输入电路

利用四个D触发器实现楼层的输入功能,即实现所在楼层的指示灯显示。

                         图3-1

3.2.2 555定时电路

通过对电阻R1、R2、 电容C1的合适选择来对555进行不同时间的定时。本电路选择定时时间为5秒。

                          图3-2

3.2.3楼层显示电路

  本电路主要是利用十进制加减计数器74LS192,通过控制电路分配加1 或减1 信号给CPD 和CPU,实现对现行楼层号的加1 和减1,由数码管显示所到楼层。

                      图3-3

3.2.4四层电梯控制系统实现总电路

利用D触发器74LS74作为控制电梯按钮(即触发电平),经过编码器74LS148及比较器74LS85、计数器74LS192来实现其电梯控制功能。本电路使用555的定时功能来控制上一层楼或下一层楼所用的时间,利用数码管来显示所到楼层数,并用四个发光二极管来作为四层楼的指示灯。

                     图3-4

3.3主要元器件介绍

3.3.1 译码器

译码器是一个多输入,多输出的组合逻辑电路.它的作用是把给定的代码进行"翻译",成相应的状态,使输出通道中相应的一路有信号输出。译码器在数字系统中有广泛的用途,不仅用于代码的转换,终端的数字显示,还用于数据分配,存贮器寻址和组合控制信号等。不同的功能可选用不同种类的译码器。

CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器, 具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动LED显示器。

用CD4511实现LED与接口方法如下图:

                图3-5

3.3.2数码管

点此在新窗口浏览图片

图3-6

一个LED数码管可用来显示一位0~9十进制数和一个小数点.小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红,绿,黄,橙色)的颜色不同略有差别,通常约为2~2.5V,每个发光二极管的点亮电流在5~10mA.LED数码管要显示BCD码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。此设计的数码管采用共阴型数码管,主要用来显示楼层号。

3.3.3 D触发器

  此电路D触发器采用74LS74.74LS74内含两个独立的D上升沿双d触发器,每个触发器有数据输入(D)、置位输入()复位输入()、时钟输入(CP)和数据输出(Q)。的低电平使输出预置或清除,而与其它输入端的电平无关。当均无效(高电平式)时,符合建立时间要求的D数据在CP上升沿作用下传送到输出端。

74ls74功能表:

           图3-7 74ls74引脚图

四,实验总结

4. 1 设计中主要出现的问题

问题1:对各个集成芯片的了解与使用;

问题2:对理论与实践的结合。

4.2 尚待解决的问题

问题1:555 定时器的定时精度不够高,需要用更高精度的定时芯片。

4. 3 心得体会

经过这一次的课程设计,我对数字电子这门课程及相关知识有了更深入的理解和体会,同时也很好的把握理论知识并将其应用于实践当中。

在此次的电梯控制器设计过程中,我更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。虽然这只是一次简单的课程设计,但通过这次课程设计我们了解了课程设计的一般步骤,和设计中应注意的问题。设计本身并不是有很重要的意义,而是同学们对待问题时的态度和处理事情的能力。至于设计的成绩无须看的太过于重要,而是设计的过程,设计的思想和设计电路中的每一个环节,电路中各个部分的功能是如何实现的。各个芯片能够完成什么样的功能,使用芯片时应该注意那些要点。同一个电路可以用那些芯片实现,各个芯片实现同一个功能的区别。另外,我们设计要从市场需求出发,既要有强大的功能,又要在价格方面比同等档次的便宜。虽然我们现在作的不可能到市场上去销售,但我们要为以后作设计培养出好的习惯。

这一次的课程设计,让自己清楚的知道了学以致用的真正含意。我们学生必须要有实践的能力,而这一次的课程设计,使我看到了自己在这个方面有很大的不足,必须加以提高。


第二篇:EDA电梯控制器课程设计报告


目 录

1、绪论... 1

2、三层电梯设计原理... 2

2.1 系统设计功能... 2

2.2系统设计方案... 2

2.2.1系统设计接口图... 2

2.2.2系统设计各接口说明... 2

2.2.3主要程序代码说明... 2

2.2.4电梯控制器的组成... 2

2.3系统设计源程序及程序具体分析... 2

2.4程序仿真图及分析... 2

3、创新与改进 — 8层电梯的设计... 2

3.1 八层电梯设计思想 – 状态图... 2

3.2 八层电梯设计源程序... 2

3.3程序仿真图及分析... 2

3.4硬件检测... 2

3.4.1  实验电路板选择... 2

3.4.2 实验箱管脚设置... 2

3.4.3硬件测试分析... 2

4.小结... 2

4.1设计技巧分析... 2

4.2创新与改进... 2

4.3课程总结... 2

5.参考文献... 2

6.谢辞... 2


1、绪论

随着EDA技术发展和应用领域的扩大与深入,EDA技术在电子信息、通讯、自动控制及计算机应用等领域的重要性突出。随着技术市场与人才市场对EDA的需求不断提高,产品的市场需求和技术市场的要求也必然会反映到教学领域和科研领域中来。因此学好EDA技术对我们有很大的益处。

EDA功能强大,一台计算机、一套EDA软件和一片或几片大规模可编程芯片(CPLD/FPGA或ispPAC),就能完成电子系统的设计。EDA技术涉及面广,内容丰富,但在教学和技术推广层面上,应用较为广泛的是基于可编程器件的EDA技术,它主要包括如下四大要素:1大规模可编程器件,它是利用EDA技术进行电子系统设计的载体;2硬件描述语言,它是利用EDA技术进行电子系统设计的主要手段;3软件开发工具,它是利用EDA技术进行电子系统的智能化的自动化设计工具;4实验开发系统,它是利用EDA技术进行电子系统设计的下载工具及硬件验证工具。

电梯行业也随着科技的发展,不断地出现在人们生活的各个场所,因此,对电梯控制器的设计是一个很实用的例子,对我们掌握EDA技术的应用也有很大的帮助。

2、三层电梯设计原理

2.1 系统设计功能

1.每层电梯入口处设有请求开关,电梯内设有顾客到达层次的停站请求开关。

2.设有电梯入口处位置指示装置及电梯运行模式(上升或者下降)指示装置。

3.电梯每秒升(降)层楼。电梯到达有停站请求的楼层,经过1秒电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭),电梯继续进行,直至最后一个请求信号后停留在当前层。

4.能记忆电梯内所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。

5.电梯运行规则——当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由上而下逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高楼层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反。

6.电梯初始状态为一层开门状态。

2.2系统设计方案

2.2.1系统设计接口图

根据系统设计要求,并考虑到系统的可验证性,整个系统的输入输出接口设计如图2.2.1:

 


图2.2.1  电梯输入输出接口图

2.2.2系统设计各接口说明

系统设计有如下输入:时钟(buttonclk,liftclk),系统复位键(reset),楼层上升请求(f1upbutton,f2upbutton),楼层下降请求(f2dnbutton,f3dnbutton),外部请求指示灯(fuplight,fdnlight),楼层停止请求(stop1button,stop2button,stop3button),内部请求指示灯(stoplight);同时输出如下:当前楼层位子(position),楼层上升、下降指示灯(udsig),开门状态灯(doorlight)。

2.2.3主要程序代码说明

1.设计此系统是通过状态机实现的,首先定义以下状态:

TYPE LIFT_STATE IS

(STOPON1,DOOROPEN,DOORCLOSE,DOORWAIT1,DOORWAIT2,DOORWAIT3,DOORWAIT4,UP,DOWN,STOP);

2.利用用户所输入请求,在以上状态之间进行转换,同时也定义了以下寄存器信号以备调用:

SIGNAL MYLIFT: LIFT_STATE;

SIGNAL CLEARUP: STD_LOGIC;--清除上升请求指示灯

SIGNAL CLEARDN: STD_LOGIC;-- 清除上下降请求指示灯

SIGNAL POS: STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL POSITION:  INTEGER RANGE 1 TO 3;

3.在用户输入控制时,通过多个进程进行协调工作:

CTRLIFT: PROCESS(RESET,LIFTCLK)--控制电梯状态进程

用来为用户楼层选择

主要用了以下语句:

(1)CASE语句

CASE语句属于顺序语句,因此必须放在进程语句中使用,CASE语句的一般表达式是:

CASE <表达式> IS

WHEN <选择值或标志符>=〉<顺序语句>;...<顺序语句>;

WHEN <选择值或标志符>=〉<顺序语句>;...<顺序语句>;

...

END CASE;

当执行到CASE语句时,首先计算<表达式>的值,然后根据WHEN条件句中与之相同的<选择值或标志符>,执行对应的<顺序语句>,最后结束CASE语句。条件句中的=“>”不是操作符,它的含义相当于THEN(或“于是”)。

使用CASE语句应该注意以下几点:

WHEN条件句中的选择值或标志符所代表的值必须在表达式的取值范围内。

除非所以条件句中的选择值能完全覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须如教材例那样用OTHERS关键词表示以上已列的所有条件句中的未能列出的其他可能的取值。OTHERS只能出现一次,且只能作为最后一种条件取值。使用OTHERS的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。关键词NULL表示不做任何操作。

CASE语句中的选择值只能出现一次,不允许有相同选择值的条件语句出现。

CASE语句执行中必须选中,且只能选中所列条件语句中的一条。

(2)IF语句

IF语句是VHDL设计中最重要和最常用的语句,IF语句作为一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行制定的顺序语句。IF语句的语句结构有以下几种:

IF 条件句THEN

顺序语句

END IF;

IF 条件语句THEN

顺序语句

ELSE

顺序语句

END IF;

IF 条件语句 THEN

IF  条件句 THEN

...

END IF

END IF

IF 条件句 THEN

顺序句

ELSIF 条件句THEN

顺序语句

...

ELSE

顺序语句

 END IF;

IF语句中至少应有一个条件句,“条件句”可以是BOOLEAN类型的标志符,如IF A1 THEN ...,或者是一个判别表达式,如IF A<B+1 THEN ...,判别表达式输出的值,即判断结果的数据类型是BOOLEAN。IF语句根据条件语句产生的判断结果是TRUE或是FALSE,有条件的选择执行其后的顺序语句。

以上具体应用如源代码所示.

2.2.4电梯控制器的组成

电梯的控制状态包括运行状态、停止状态及等待状态,其中运行状态又包含向上状态和向下状态。每层楼设有用户请求按钮,用户可以通过本层的请求,对电梯进行控制,使电梯到当前楼层;而在电梯内部,还设有电梯停靠按钮,当用户需要下电梯时,可按下停止按钮,在计数及显示上,当电梯运行停止后,计数4s后,门自动关闭,而显示器也可显示当前电梯所在楼层数。

 


图2.2.2 电梯内部控制结构图

2.3系统设计源程序及程序具体分析

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY THREEFLIFT IS

  PORT(BUTTONCLK:IN STD_LOGIC;--按键时钟

       LIFTCLK:IN STD_LOGIC;--电梯时钟

       RESET:IN STD_LOGIC;--

       F1UPBUTTON: IN STD_LOGIC;--

       F2UPBUTTON: IN STD_LOGIC;--

       F2DNBUTTON: IN STD_LOGIC;--

       F3DNBUTTON: IN STD_LOGIC;--

       FUPLIGHT: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1);--外部上升请求指示灯

       FDNLIGHT: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1);--外部下降请求指示灯

       STOP1BUTTON,STOP2BUTTON,STOP3BUTTON: IN STD_LOGIC;--内部请求按键

       STOPLIGHT: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 1);--内部请求指示灯

       POST : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--电梯楼层数

       DOORLIGHT: OUT STD_LOGIC;--开关

       UDSIG: BUFFER STD_LOGIC);--升降

 END THREEFLIFT;

ARCHITECTURE ART OF THREEFLIFT IS

TYPE LIFT_STATE IS

(STOPON1,DOOROPEN,DOORCLOSE,DOORWAIT1,DOORWAIT2,DOORWAIT3,DOORWAIT4,UP,DOWN,STOP);

SIGNAL MYLIFT: LIFT_STATE;

SIGNAL CLEARUP: STD_LOGIC;--清除上升请求指示灯

SIGNAL CLEARDN: STD_LOGIC;-- 清除上下降请求指示灯

SIGNAL POS: STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL POSITION:  INTEGER RANGE 1 TO 3;

  BEGIN

    CTRLIFT: PROCESS(RESET,LIFTCLK)--控制电梯状态进程

       BEGIN

         IF  RESET='1'THEN--异步信号如果为1时电梯状态

         MYLIFT<=STOPON1;

         CLEARUP<='0';

         CLEARDN<='0';

         ELSE—否则,异步信号如果惟0时正常工作状态

         IF LIFTCLK'EVENT AND LIFTCLK='1'THEN

         CASE MYLIFT IS

WHEN STOPON1=>DOORLIGHT<='0';POSITION<=1;POS<="0001";UDSIG<='0';--电梯位置为1

              MYLIFT<=DOORWAIT1;--状态转移到开门等待第1秒状态

             -- CLEARUP<='1';

             --CLEARDN<='1';                                                          --电梯处在一层状态时

         WHEN DOORWAIT1=>MYLIFT<=DOORWAIT2; --电梯处在等待第1秒状态时

              CLEARUP<='0';CLEARDN<='0';

         WHEN DOORWAIT2=>MYLIFT<=DOORWAIT3;  --电梯处在等待第2秒状态时

         WHEN DOORWAIT3=>MYLIFT<=DOORWAIT4;  --电梯处在等待第3秒状态时

         WHEN DOORWAIT4=>DOORLIGHT<='0';  --电梯处在等待第4秒状态时

         IF UDSIG='0' THEN         --UDSIG=0表示上升模式;

            IF POSITION=3 THEN        --如果电梯在第三层;

 IF STOPLIGHT="000"AND FUPLIGHT="000" AND FDNLIGHT="000" THEN--没有任何请求信号;

               UDSIG<='1';      --UDSIG=1表示下降模式;

               MYLIFT<=DOORCLOSE;--电梯转为关门状态;

               ELSIF STOPLIGHT(POSITION)='1'OR FDNLIGHT(POSITION)='1'THEN

               UDSIG<='1';MYLIFT<=DOOROPEN;

               ELSE UDSIG<='1';

               MYLIFT<=DOWN;--电梯转为下降状态;

               END IF;

            ELSIF POSITION=2 THEN   --如果电梯在第二层;

IF STOPLIGHT="000"AND FUPLIGHT="000" AND FDNLIGHT="000" THEN  --没有任何请求信号;

               UDSIG<='0';

               MYLIFT<=DOORCLOSE;

ELSIF STOPLIGHT(POSITION)='1'OR FUPLIGHT(POSITION)='1'

THEN

UDSIG<='0';MYLIFT<=DOOROPEN;

ELSIF STOPLIGHT(3)='1'OR FDNLIGHT(3)='1'THEN--有3层停站或3层下降请求

               UDSIG<='0';--处于上升状态

MYLIFT<=UP;

ELSIF STOPLIGHT(POSITION)='1'OR FDNLIGHT(POSITION)='1'

THEN UDSIG<='1';MYLIFT<=DOOROPEN;

               ELSE UDSIG<='1';MYLIFT<=DOWN;

               END IF;

            ELSIF POSITION=1 THEN--处于1层

               IF STOPLIGHT="000"AND FUPLIGHT="000" AND FDNLIGHT="000" THEN

               UDSIG<='0';--任何请求,电梯处于1层,肯定上升,using置0

               MYLIFT<=DOORCLOSE;状态置回关门状态等待升降请求

               ELSIF STOPLIGHT(POSITION)='1'OR FUPLIGHT(POSITION)='1' THEN

               UDSIG<='0';MYLIFT<=DOOROPEN;

               ELSE UDSIG<='0';MYLIFT<=UP;--否则无论怎么样电梯都得上升

               END IF;

            ELSIF POSITION=2 THEN      --如果电梯在第二层

               IF STOPLIGHT="000"AND FUPLIGHT="000" AND FDNLIGHT="000" THEN

               UDSIG<='1';        --没有任何请求信号,电梯仍处于下降模式

               MYLIFT<=DOORCLOSE;         --状态置回关门状态等待升降请求

               ELSIF

STOPLIGHT(POSITION)='1' OR FDNLIGHT(POSITION)='1'

THEN –-如果内部有1层停站请求或者有1层上升请求

               UDSIG<='1';

MYLIFT<=DOOROPEN;

               ELSIF STOPLIGHT(1)='1'OR FUPLIGHT(1)='1'THEN

                     UDSIG<='1';MYLIFT<=DOWN;   --状态转移到下降状态

               ELSIF STOPLIGHT(POSITION)='1' OR FUPLIGHT(POSITION)='1' THEN

                     UDSIG<='0';MYLIFT<=DOOROPEN;

               ELSE UDSIG<='0';MYLIFT<=UP;   --其他情况电梯都得上升

               END IF;

            ELSIF POSITION=3 THEN   --如果电梯停在第三层

               IF STOPLIGHT="000"AND FUPLIGHT="000" AND FDNLIGHT="000" THEN

--没有任何请求信号,由于电梯处于最高层,所以肯定要下降

               UDSIG<='1';

               MYLIFT<=DOORCLOSE;     

               ELSIF STOPLIGHT(POSITION)='1'OR FDNLIGHT(POSITION)='1'THEN

               UDSIG<='1';MYLIFT<=DOOROPEN;

               ELSE UDSIG<='1';

               MYLIFT<=DOWN;

               END IF;

            END IF;

           END IF;

WHEN UP=>          --电梯处于上升状态时

POSITION<=POSITION+1;  --信号POSITION加1表示上升1层

 POS<=POS+1; --电梯处在上升状态时,变量POS加1表示上升一层

           IF POSITION=2 AND (STOPLIGHT(2)='1' OR FUPLIGHT(2)='1')

--如果即将到达的层不是最高层并且内部有该层停站请求或者该层外部有上升请求

           THEN MYLIFT<=STOP;   --下一状态电梯停止

ELSIF POSITION<3 AND (STOPLIGHT(3)='1' OR FUPLIGHT(3)='1')

           THEN MYLIFT<=DOORCLOSE;

ELSIF POSITION<3 AND (STOPLIGHT(POSITION)='1'OR FDNLIGHT(POSITION)='1')

           THEN MYLIFT<=STOP;

ELSIF POSITION=3 AND (STOPLIGHT(POSITION)='1' OR FDNLIGHT(POSITION)='1')

           THEN MYLIFT<=STOP;

           ELSE MYLIFT<=DOORCLOSE;

           END IF;

WHEN DOWN=>POSITION<=POSITION-1; POS<=POS-1;--电梯处在下降的状态时

           IF POSITION>1 AND (STOPLIGHT(POSITION)='1' OR FDNLIGHT(POSITION)='1')

           THEN MYLIFT<=STOP;

 ELSIF POSITION>1 AND (STOPLIGHT(1)='1' OR FUPLIGHT(1)='1') THEN

--没有任何请求信号,由于电梯处于最高层,所以肯定要下降

           MYLIFT<=DOORCLOSE;

 ELSIF POSITION>1 AND (STOPLIGHT(POSITION)='1' OR FUPLIGHT(POSITION)='1')

--如果即将到达的层不是1层且内部有该层停站请求或者该层外部有下降请求

           THEN MYLIFT<=STOP;           --下一状态为停止状态

ELSIF POSITION=1 AND (STOPLIGHT(POSITION)='1' OR FUPLIGHT(POSITION)='1')

--如果即将到达的层是1层且内部有该层停站请求或者该层外部有上升请求

           THEN MYLIFT<=STOP;     --下一状态为停止状态

           ELSE MYLIFT<=DOORCLOSE;

           END IF;

WHEN STOP=>        --电梯处在停止状态时

MYLIFT<=DOOROPEN; --状态转移到开门状态

WHEN DOOROPEN=>   --电梯处于开门状态时

DOORLIGHT<='1';

           IF UDSIG='0'THEN     --如果电梯处于上升模式

   IF POSITION<3 AND (STOPLIGHT(POSITION)='1' OR FUPLIGHT(POSITION)='1')THEN

--如果电梯位于2层或2层以上,且内部停站等于1或外部请求下降信号等于1,此时只用--清除上升

--请求指示灯

          CLEARUP<='1';

           ELSE CLEARUP<='1';CLEARDN<='1';--其他情况需同时清除上升和下降指示灯

              END IF;

          ELSIF UDSIG='1'THEN   --如果电梯处于下降模式

 IF POSITION>1 AND (STOPLIGHT(POSITION)='1' OR FDNLIGHT(POSITION)='1')THEN

--如果电梯位于2层或2层以上,且内部停站等于1或外部请求下降信号等于1,此时只用--清除下降

--请求指示灯

              CLEARDN<='1';

         ELSE CLEARDN<='1';CLEARUP<='1'; --其他情况需同时清除上升和下降指示灯

           END IF;

          END IF;

          MYLIFT<=DOORWAIT1;

WHEN DOORCLOSE=>DOORLIGHT<='0';    --10电梯处在关门状态时

             MYLIFT<=DOORWAIT4;

           WHEN OTHERS=>MYLIFT<=STOPON1;

          END CASE;

         END IF;

       END IF;

    END PROCESS CTRLIFT;

POST<=POS;

CTRLIGHT: PROCESS(RESET,BUTTONCLK)         --控制按键信号灯的进程

     BEGIN

        IF RESET='1'THEN                        --异步复位信号为1时

        STOPLIGHT<="000";FUPLIGHT<="000";FDNLIGHT<="000";

        ELSE

          IF BUTTONCLK'EVENT AND BUTTONCLK='1'THEN

          IF CLEARUP='1'THEN           --当清除上升请求指示灯信号为1时

          STOPLIGHT(POSITION)<='0';FUPLIGHT(POSITION)<='0';

             --该层电梯内部停站信号灯和外部上升请求指示灯灭

          ELSE

             IF F1UPBUTTON='1' THEN FUPLIGHT(1)<='1';

             ELSIF F2UPBUTTON='1'THEN FUPLIGHT(2)<='1';

             END IF;                        --如果按键,那么指示灯亮

          END IF;

          IF CLEARDN='1' THEN     --当清除下降请求指示灯信号为1时

          STOPLIGHT(POSITION)<='0';FDNLIGHT(POSITION)<='0';

          ELSE

             IF F2DNBUTTON='1'THEN FDNLIGHT(2)<='1';

             ELSIF F3DNBUTTON='1'THEN FDNLIGHT(3)<='1';

             END IF;                   --如果按键,那么指示灯亮

          END IF;

         IF STOP1BUTTON='1'THEN STOPLIGHT(1)<='1';

         ELSIF STOP2BUTTON='1'THEN STOPLIGHT(2)<='1';

         ELSIF STOP3BUTTON='1'THEN STOPLIGHT(3)<='1';

          END IF;                     --如果按键,那么指示灯亮

         END IF;

        END IF;

     END PROCESS CTRLIGHT;

  END ART;

2.4程序仿真图及分析

①在第二层电梯外部有上升请求,也就是f2upbuttton信号的一个脉冲,可以看到电梯从一层上升到二层,position信号由1变到2,doorlight信号‘1’表示开门,‘0’表示关门。当乘客进入电梯以后,在电梯内部要求上升到第三层,也就是stop3button产生一个脉冲,电梯上升到第3层,开门4秒以后关门,停留在第三层,position最后的值为3。在仿真图中看不到buttonclk,只显示为一条黑色的线,是因为采用了频率较大的时钟。

再看fuplight信号灯,当二层有上升请求的时候,它的值由0变到2。(注意fuplight和fdnlight是3位的二进制向量,这里的2代表“010”,表示二层有请求;“100”也就是4,表示三层有请求)。当电梯停留到第二层以后,表明该请求被响应,所以它的值变为0,由于没有下降请求信号,所以fdnlight信号灯的值一盲都为O。

波形图如图3.2.1。

                         图3.2.1

②有下降请求的情况,它是图4的继续,当电梯停留在第三层的时候,在电梯外第二层有下降请求,这时候fdnlight信号灯由0变为2,说明第二层有下降请求。电梯下降到第二层,响应了下降请求,所以fdnlight信号灯清0。这时候,在电梯内部没有停留在哪层的请求,所以电梯就停留在第二层,position信号的值保持在2。如图3.2.2所示。

                         图3.2.2

③同时有上升和下降请求信号时,电梯的运行情况如图6所示。图6仿真的情况是,原先电梯停留在第一层,这时候电梯外第三层有下降请求,电梯上升到第三层,乘客进入电梯以后要求下降到一层,与此同时,在电梯外第二层有上升请求,电梯首先要响应下降请求然后再响应这个上升请求,所以电梯得先下降到一层,然后再上升到第二层来,这是符合常理的。从仿真的波形看,电梯的位置变化和想象是一致的。电梯的运行情况完全正确。最后乘客在电梯内部要求上升到三层,所以电梯最后的停留位置为三层。如图3.2.3

图3.2.3            

④原先电梯停留在第一层,电梯外第三层有下降请求,电梯上升到三层,乘客进入电梯以后要求下降到一层,此时,二层有下降请求,接着又有上升请求,电梯首先在二层停留。然后下降到一层。随后要响应二层上升请求,上升到二层,乘客进入电梯以后要求上升到三层,所以电梯最后的停留位置在三层。如图3.2.4。

                         图3.2.4。

3、创新与改进 — 8层电梯的设计

3.1 八层电梯设计思想 – 状态图

 


整个程序的核心思想就是围绕这个状态图开展的,具体的程序分析参照前面三层的设计

3.2 八层电梯设计源程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY YCeight IS

  PORT(buttonclk: IN STD_LOGIC;

      liftclk: IN STD_LOGIC;

      reset: IN STD_LOGIC;

      input: in std_logic;

      uuin:in STD_LOGIC_VECTOR(3 DOWNTO 0);

      ddin:in STD_LOGIC_VECTOR(3 DOWNTO 0);

      ssin: in STD_LOGIC_VECTOR(3 DOWNTO 0);

      fuplight: BUFFER STD_LOGIC_VECTOR(8 DOWNTO 1);

      fdnlight: BUFFER STD_LOGIC_VECTOR(8 DOWNTO 1);

      stoplight: BUFFER STD_LOGIC_VECTOR(8 DOWNTO 1);

      position: BUFFER integer RANGE 1 TO 8;

      doorlight: OUT STD_LOGIC;

      udsig: BUFFER STD_LOGIC);

END YCeight;

ARCHITECTURE a OF YCeight IS

TYPE lift_state IS

(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwait4,up,down,stop);

SIGNAL mylift: lift_state;

SIGNAL clearup: STD_LOGIC;

SIGNAL cleardn: STD_LOGIC;

SIGNAL f1upbutton:  STD_LOGIC;

SIGNAL f2upbutton:  STD_LOGIC;

SIGNAL f2dnbutton:  STD_LOGIC;

SIGNAL f3dnbutton:  STD_LOGIC;

SIGNAL f3upbutton:  STD_LOGIC;

SIGNAL f4dnbutton:  STD_LOGIC;

SIGNAL f4upbutton:  STD_LOGIC;

SIGNAL f5dnbutton:  STD_LOGIC;

SIGNAL f5upbutton:  STD_LOGIC;

SIGNAL f6dnbutton:  STD_LOGIC;

SIGNAL f6upbutton:  STD_LOGIC;

SIGNAL f7dnbutton:  STD_LOGIC;

SIGNAL f7upbutton:  STD_LOGIC;

SIGNAL f8dnbutton:  STD_LOGIC;

SIGNAL stop1button,stop2button,stop3button,stop4button:  STD_LOGIC;

SIGNAL stop5button,stop6button,stop7button,stop8button:  STD_LOGIC;

BEGIN

ctrlift: PROCESS(reset,liftclk)

VARIABLE poss: INTEGER RANGE 8 DOWNTO 1;

  BEGIN

  IF reset='1' THEN

    mylift<=stopon1;

    clearup<='0';

    cleardn<='0';

  ELSE

    IF liftclk'EVENT AND liftclk='1' THEN

      CASE mylift IS

        WHEN stopon1 =>

          doorlight<='1';

          position<=1;poss:=1;

          mylift<=doorwait1;

        WHEN doorwait1 =>

          mylift<=doorwait2;

        WHEN doorwait2 =>

          clearup<='0';

          cleardn<='0';

          mylift<=doorwait3;

        WHEN doorwait3 =>

          mylift<=doorwait4;

        WHEN doorwait4 =>

          mylift<=doorclose;

        WHEN doorclose =>

          doorlight<='0';

          IF udsig='0' THEN --AA

            IF position=8 THEN --BB

              IF (stoplight="00000000" AND fuplight="00000000") AND fdnlight="00000000" THEN

                udsig<='1';

                mylift<=doorclose;

              ELSE udsig<='1'; mylift<=down;

              END IF;

            ELSIF position=7 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

            ELSIF position=6 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(7)='1' OR (stoplight(7)='0' AND (fdnlight(7)='1' or fuplight(7)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

           

            ELSIF position=5 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(6)='1' OR (stoplight(6)='0' AND (fdnlight(6)='1' or fuplight(6)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(7)='1' OR (stoplight(7)='0' AND (fdnlight(7)='1' or fuplight(7)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

           

            ELSIF position=4 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(5)='1' OR (stoplight(5)='0' AND (fdnlight(5)='1' or fuplight(5)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(6)='1' OR (stoplight(6)='0' AND (fdnlight(6)='1' or fuplight(6)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(7)='1' OR (stoplight(7)='0' AND (fdnlight(7)='1' or fuplight(7)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

            ELSIF position=3 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(4)='1' OR (stoplight(4)='0' AND (fdnlight(4)='1' or fuplight(4)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(5)='1' OR (stoplight(5)='0' AND (fdnlight(5)='1' or fuplight(5)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(6)='1' OR (stoplight(6)='0' AND (fdnlight(6)='1' or fuplight(6)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(7)='1' OR (stoplight(7)='0' AND (fdnlight(7)='1' or fuplight(7)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

       

            ELSIF position=2 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSIF stoplight(3)='1' OR (stoplight(3)='0' AND (fdnlight(3)='1' or fuplight(3)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(4)='1' OR (stoplight(4)='0' AND (fdnlight(4)='1' or fuplight(4)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(5)='1' OR (stoplight(5)='0' AND (fdnlight(5)='1' or fuplight(5)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(6)='1' OR (stoplight(6)='0' AND (fdnlight(6)='1' or fuplight(6)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(7)='1' OR (stoplight(7)='0' AND (fdnlight(7)='1' or fuplight(7)='1')) THEN

                udsig<='0';

                mylift<=up;

              ELSIF stoplight(8)='1' OR (stoplight(8)='0' AND fdnlight(8)='1') THEN

                udsig<='0';

                mylift<=up;

              ELSE udsig<='1'; mylift<=down;

              END IF;

            ELSIF position=1 THEN

              IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                udsig<='0';

                mylift<=doorclose;

              ELSE udsig<='0'; mylift<=up;

              END IF;

            END IF;

            ELSE ------------------------

              IF position=1 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='0';

                  mylift<=doorclose;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=2 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                THEN

                  udsig<='1';

                  mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=3 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(2)='1' OR (stoplight(2)='0' AND (fuplight(2)='1' or fdnlight(2)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                  THEN udsig<='1';mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=4 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(3)='1' OR (stoplight(3)='0' AND (fuplight(3)='1' or fdnlight(3)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(2)='1' OR (stoplight(2)='0' AND (fuplight(2)='1' or fdnlight(2)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                  THEN udsig<='1';mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=5 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(4)='1' OR (stoplight(4)='0' AND (fuplight(4)='1' or fdnlight(4)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(3)='1' OR (stoplight(3)='0' AND (fuplight(3)='1' or fdnlight(3)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(2)='1' OR (stoplight(2)='0' AND (fuplight(2)='1' or fdnlight(2)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                  THEN udsig<='1';mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=6 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(5)='1' OR (stoplight(5)='0' AND (fuplight(5)='1' or fdnlight(5)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(4)='1' OR (stoplight(4)='0' AND (fuplight(4)='1' or fdnlight(4)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(3)='1' OR (stoplight(3)='0' AND (fuplight(3)='1' or fdnlight(3)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(2)='1' OR (stoplight(2)='0' AND (fuplight(2)='1' or fdnlight(2)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                  THEN udsig<='1';mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=7 THEN

                IF  stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSIF stoplight(6)='1' OR (stoplight(6)='0' AND (fuplight(6)='1' or fdnlight(6)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(5)='1' OR (stoplight(5)='0' AND (fuplight(5)='1' or fdnlight(5)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(4)='1' OR (stoplight(4)='0' AND (fuplight(4)='1' or fdnlight(4)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(3)='1' OR (stoplight(3)='0' AND (fuplight(3)='1' or fdnlight(3)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(2)='1' OR (stoplight(2)='0' AND (fuplight(2)='1' or fdnlight(2)='1'))

                  THEN udsig<='1';mylift<=down;

                ELSIF stoplight(1)='1' OR (stoplight(1)='0' AND fuplight(1)='1')

                  THEN udsig<='1';mylift<=down;

                ELSE udsig<='0'; mylift<=up;

                END IF;

              ELSIF position=8 THEN

                IF stoplight="00000000" AND fuplight="00000000" AND fdnlight="00000000" THEN

                  udsig<='1';

                  mylift<=doorclose;

                ELSE udsig<='1'; mylift<=down;

                END IF;

              END IF;

            END IF;------------

          WHEN up =>

            position<=position+1;

            poss:=poss+1;

            IF poss=8 and (stoplight(poss)='1' OR fdnlight(poss)='1')

              THEN mylift<=stop;

            elsIF poss<8 AND (stoplight(poss)='1' or fuplight(poss)='1')

              THEN mylift<=stop;

            --elsif((fdnlight(poss)='1' and fuplight(poss+1 to 8)=0 and) fdnlight(poss+1 to 8)=0)

              --THEN mylift<=stop;

            ELSe mylift<=doorclose;

            END IF;

          WHEN down =>

            position<=position-1;

            poss:=poss-1;

            IF poss>1 AND (stoplight(poss)='1' OR fdnlight(poss)='1')

              THEN mylift<=stop;

            ELSIF poss=1 and (stoplight(poss)='1' OR fuplight(poss)='1')

              THEN mylift<=stop;

            ELSe mylift<=doorclose;

            END IF;

          WHEN stop =>

            mylift<=dooropen;

          WHEN dooropen=>

            doorlight<='1';

            IF udsig='0' THEN

              IF position<=7 AND (stoplight(position)='1' OR fuplight(position)='1') THEN

                clearup<='1';

              ELSE clearup<='1'; cleardn<='1';

              END IF;

            ELSIF udsig='1' THEN

              IF position>=2 AND (stoplight(position)='1' OR fdnlight(position)='1') THEN

                cleardn<='1';

              ELSE clearup<='1'; cleardn<='1';

              END IF;

            END IF;

            mylift<=doorwait1;

          END CASE;

        END IF;

      END IF;

    END PROCESS ctrlift;

PROCESS(reset,buttonclk)

    BEGIN

      IF reset='1' THEN

        f1upbutton<='0';f2upbutton<='0';

        f2dnbutton<='0'; f3dnbutton<='0';   f3upbutton<='0';

        f4dnbutton<='0';   f4upbutton<='0'; f5dnbutton<='0';   f5upbutton<='0';

        f6dnbutton<='0';   f6upbutton<='0'; f7dnbutton<='0';   f7upbutton<='0';

        f8dnbutton<='0';  stop1button<='0';stop2button<='0';

        stop3button<='0';stop4button<='0';  

        stop5button<='0';stop6button<='0'; 

        stop7button<='0';stop8button<='0'; 

      ELSE

        IF buttonclk'EVENT AND buttonclk='1' THEN

            if input='1' then

               case uuin is

                  when "0001"=> f1upbutton<='1';

                  when "0010"=> f2upbutton<='1';

                  when "0011"=> f3upbutton<='1';

                  when "0100"=> f4upbutton<='1';

                  when "0101"=> f5upbutton<='1';

                  when "0110"=> f6upbutton<='1';

                  when "0111"=> f7upbutton<='1';

                  when others => NULL;

               end case;

               case ddin is

                  when "0010"=> f2dnbutton<='1';

                  when "0011"=> f3dnbutton<='1';

                  when "0100"=> f4dnbutton<='1';

                  when "0101"=> f5dnbutton<='1';

                  when "0110"=> f6dnbutton<='1';

                  when "0111"=> f7dnbutton<='1';

                  when "1000"=> f8dnbutton<='1';

                  when others => NULL;

               end case;

               case ssin is

                  when "0001"=> stop1button<='1';

                  when "0010"=> stop2button<='1';

                  when "0011"=> stop3button<='1';

                  when "0100"=> stop4button<='1';

                  when "0101"=> stop5button<='1';

                  when "0110"=> stop6button<='1';

                  when "0111"=> stop7button<='1';

                  when "1000"=> stop8button<='1';

                  when others => NULL;

               end case;

            else

               f1upbutton<='0';f2upbutton<='0';

               f2dnbutton<='0'; f3dnbutton<='0';   f3upbutton<='0';

               f4dnbutton<='0';   f4upbutton<='0'; f5dnbutton<='0';   f5upbutton<='0';

               f6dnbutton<='0';   f6upbutton<='0'; f7dnbutton<='0';   f7upbutton<='0';

               f8dnbutton<='0';  stop1button<='0';stop2button<='0';

               stop3button<='0';stop4button<='0';  

               stop5button<='0';stop6button<='0'; 

               stop7button<='0';stop8button<='0'; 

            end if;

        end if;

      END IF;

  END PROCESS ;

    PROCESS(reset,buttonclk)

    BEGIN

      IF reset='1' THEN

        stoplight<="00000000"; fuplight<="00000000"; fdnlight<="00000000";

      ELSE

        IF buttonclk'EVENT AND buttonclk='1' THEN

          IF clearup='1' THEN

            stoplight(position)<='0'; fuplight(position)<='0';

          ELSE

            IF f1upbutton='1' THEN fuplight(1)<='1';

            ELSIF f2upbutton='1' THEN fuplight(2)<='1';

            ELSIF f3upbutton='1' THEN fuplight(3)<='1';

            ELSIF f4upbutton='1' THEN fuplight(4)<='1';

            ELSIF f5upbutton='1' THEN fuplight(5)<='1';

            ELSIF f6upbutton='1' THEN fuplight(6)<='1';

            ELSIF f7upbutton='1' THEN fuplight(7)<='1';

            END IF;

          END IF;

        IF cleardn='1' THEN

          stoplight(position)<='0'; fdnlight(position)<='0';

        ELSE

          IF f2dnbutton='1' THEN fdnlight(2)<='1';

          ELSIF f3dnbutton='1' THEN fdnlight(3)<='1';

                     ELSIF f4dnbutton='1' THEN fdnlight(4)<='1';

                     ELSIF f5dnbutton='1' THEN fdnlight(5)<='1';

                     ELSIF f6dnbutton='1' THEN fdnlight(6)<='1';

                     ELSIF f7dnbutton='1' THEN fdnlight(7)<='1';

                     ELSIF f8dnbutton='1' THEN fdnlight(8)<='1';

          END IF;

        END IF;

        IF stop1button='1' THEN stoplight(1)<='1';

        ELSIF stop2button='1' THEN stoplight(2)<='1';

        ELSIF stop3button='1' THEN stoplight(3)<='1';

        ELSIF stop4button='1' THEN stoplight(4)<='1';

        ELSIF stop5button='1' THEN stoplight(5)<='1';

        ELSIF stop6button='1' THEN stoplight(6)<='1';

        ELSIF stop7button='1' THEN stoplight(7)<='1';

        ELSIF stop8button='1' THEN stoplight(8)<='1';

        END IF;

      END IF;

    END IF;

  END PROCESS ;

  END a;

3.3程序仿真图及分析

图3.3

电梯上升至8楼,再下降至3楼,仿真图正确,符合实际情况。

3.4硬件检测

在各仿真正确前提下,设置系统管脚,将程序下载到实验箱上,通过硬件检测程序仿真结果是否正确。

3.4.1  实验电路板选择

图3.4.1 实验板仪器选择

3.4.2 实验箱管脚设置

选择模式1

具体管脚设置如下表:

3.4.3硬件测试分析

通过设置以上各项,在对程序重新编译,无误,将其导入试验板,即可通过试验板上各设置的按键对其控制,同时在各显示管及数码管上可观察系统的运行结果。

此结果能符合电梯设计的基本要求,能实现用户的各种上升、下降请求,显示上也能符合要求,能显示楼层层数,门开关状态,及开关门状态提示音。因此,此设计已符合设计的要求,并且在硬件测试正确。

4.小结

4.1设计技巧分析

在设计过程中,电梯控制器可以通过多种方法进行设计,而在这采用状态机来实现,思路比较清晰。可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。由于电梯又是每秒上升或下降一层。所以就可以通过一个统一的1秒为周期的时钟来触发状态机。根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止”状态。各个状态之间的转换条件可由上面的设计要求所决定。

4.2创新与改进

  在原有的三层设计基本成功基础上,尝试做8层电梯的。实际上思路基本是类似的 ,但是在改进程序各个细节方面仍需努力。

4.3课程总结

在这一周的设计过程中,除找资料外,大多时间都是在电脑上进行的,通过反复的编译,仿真,不断试验来实现所得结果。在设计上,运用了EDA自上而下的设计思想,逐步完善所设计功能,同时,用到VHDL语言中的状态机,多进程,CASE、IF….ELSE 等语句,才达到以上结果。在设计中也遇到许多困难,在自己及同学的共同努力下才完成此设计。因此这次课设给我带来的收获主要有:

 进一步熟悉maxplus II软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;

对vhdl语言的自顶向下设计方法有了进一步的认识,对其中的许多语句也有了新了解,掌握;

对自己独立思考和解决问题的能力也有了很大的锻炼,同时同学间的互帮互助精神也是在课程设计中很好体现的;

不足之处也有以下几点:

在设计中,发现错误,自己纠错能力还是很欠缺,未能很好的找出,还是在老师及同学帮助下才完成;另外,对于自己想改进的地方,都能很好的指出,当要真正的去把其他改进的功能加上去,自己还是有所欠缺。

5.参考文献

(1)潘松.黄继业《EDA技术实用教程》.2005. 科学出版社

(2)徐志军.徐光辉《CPLD/FPGA的开发与应用 》.2001.电子工业出版社

(3)朱正伟 《EDA技术及应用》    清华大学出版社

(4)http://www.edacn.net/html/t-113885.html

6.谢辞

首先:本次课设应该感谢学院的安排,让我们在学习课本知识的同时,能够有这样的机会实践。通过此次课程设计,把以前所学的知识连接起来,设计出实际的产品,更进一步的增强我们各方面能力。

其次:也应该感谢指导老师的细心指导,特别是在以前上课及实验上,他认真辅导我们,让每名同学都自己独立完成实验,否则自己不可能在一周内完成所需的设计。

第三:还应感谢同学们的帮助,无论是在解决课程设计问题上,还是传达老师的各项要求上,都能准确,准时地到位,使我们节约了许多时间,减少了许多不必要的麻烦,让课程设计能圆满地完成。

更多相关推荐:
数字电子技术课程设计报告

吉林建筑大学电气与电子信息工程学院数字电子技术课程设计报告设计题目:数字钟的电路设计专业班级:电气112班学生姓名:学号:指导教师:设计时间:20XX.06.17-20XX.06.28数字钟的电路设计报告一、设…

数字电子技术课程设计报告(数字钟)

目录一设计目的1二实现功能1三制作过程1四原理框图341数字钟构成342设计脉冲源443设计整形电路544设计分频器545实际计数器646译码驱动器电路的设计747校时电路848整点报时电路949绘制总体电路图...

数 字 电 路 课 程 设 计 报 告

数字电路课程设计报告课题名称:篮球竞赛30秒计时器姓名:学号:专业班级:通信工程1指导教师:设计日期:20##年1月5日摘要:随着信息时代的到来,电子技术在社会生活中发挥着越来越重要的作用,运用模电和数电知识设…

数字电路课程设计电子钟设计报告[1]

数字电路课程设计总结报告题目数字钟设计专业班级学生姓名学号指导教师20xx年12月15日目录一设计任务设计课题功能要求二设计框图及整机概述三各单元电路的设计方案及原理说明四调试过程及结果分析五设计安装及调试中的...

数字电子技术课程设计报告(样例)

大庆师范学院数字电子技术课程设计报告设计课题基于VHDL自动售货姓名杨浩北学院物电学院专业电子信息工程班级08级2班学号20xx01071425日期20xx年5月24日20xx年6月4日指导教师目录1设计的任务...

数字电路课程设计报告

JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY数字电路课程设计报告课题名称学院名称子测控2班08314208专业电班级姓名学号指导教师姓名合作者姓名20xx年12月数字电路课程设计报...

数字电路课程设计实验报告

交通灯控制电路的设计设计单位物电系XXX班设计人XXX指导老师XXX设计时间20xx年10月10日一设计内容与要求1设计内容1利用各种器件设计一个交通灯控制电路2利用电路板对所设计的电路进行检验3总结检验电路设...

西安邮电大学数字电路课程设计实验报告多路彩灯

西安邮电学院数字电路课程设计报告书多路彩灯控制器系部名称学生姓名专业名称班级实习时间一实验目的根据知识掌握情况和兴趣选择题目给出功能设计方案插接调试电路完成要求的任务达到巩固和应用电子技术基础和数字电路与逻辑设...

中国石油大学数电课程设计报告

20xx20xx学年第二学期数字电子技术课程设计报告专业班级自动化1班姓名张青学号120xx124开课系室电工电子学教学中心设计日期20xx年7月45日8日目录数字电子技术课程设计题目交通灯控制电路设计1一设计...

数字电路课程设计-多功能数字时钟设计报告(免费下载)

多功能数字时钟设计报告目录一设计任务和要求2二设计的方案的选择与论证21总体电路分析22仿真分析33仿真说明3三电路设计计算与分析41小时计时电路42分钟计时电路53秒钟计时电路74校时选择电路85整点译码电路...

数字电路课程设计—数字频率计设计报告

课题数字频率计摘要本文介绍了一种基于TTL系列芯片的简易数字频率计数字频率计应用所学的数字电路知识进行设计电路由放大整形电路时基电路逻辑控制电路计数锁存电路及译码显示电路组成能够较精准的测量幅值在02V5V的正...

10自动化数字电子技术课程设计报告格式、任务书

数字电子技术基础课程设计任务书专业自动化班级11自动化学号姓名指导教师耿素军二零一三年十一月二十九日目录居中宋体2号加粗空两行1页码2页码要求给出一级目录宋体加粗四号字15倍行距报告正文部分课程设计的内容如下一...

数字电子技术课程设计报告(24篇)