毕业设计 基于51单片机的电梯控制系统的设计


🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的电梯控制系统的设计

1 硬件电路的设计

1.1 主控制模块

本系统采用STC89C52为主控芯片。这是一种能耗低同时内部存储量大的芯片,它的引脚可以与我们这次系统中其他产品进行完美融合,同时它也具有可自主编程的能力,使得它在众多的研究和课题中都得到了广泛的应用。

1.1.1 STC89C52单片机的介绍

STC89C52有两种封装形式。在本设计中采用直插式的DIP40的封装,这种封装的好处就是当遇到高温的时候可以防止芯片被高温所损害,STC89C52一共具有40只引脚,其中有32只引脚可以用来控制[14]。 

1.1.2 单片机引脚的说明

VCC(40引脚):作用是电源电压

VSS(20引脚):作用是接地

P0口:为8位准双向接口,它的每一个接口都具有双向输入和输出功能,它可以一共启动四个负载。

 P1口:为8位准双向接口,它的每一个接口都具有双向输入和输出功能,它可以一共启动四个负载。

P2口:为8位准双向接口,当它为接口的时候,可以通过它连接外部的设备。

P3口:为8位准双向接口,同时它还可以将用于第二个功能中体现。XTAL1:这是振荡器的反向接入口,也是内部时钟输入的端口。 

XTAL2:输出端。

各引脚图如1.1所示:

图1.1单片机引脚图

1.2 单片机的最小系统

主芯片、复位电路、还有晶振产生的电路这三者共同组成了单片机当中的最小系统。该系统中的晶振,与电容相连接,连接的方式是并联,产生的脉冲信号输入到单片机中。复位电路的作用是给系统产生清楚零的信号。RP1为排阻,作为P0端的上拉电阻,接此原因是P0端口是由OC门组成[15]。如图1.2所示。

图1.2单片机最小系统

1.2.1 单片机的复位电路

单片机最小系统,复位操作电路上有两种操作,一种是手动复位,一种是自动复位 [16]。开机以后电源会进行复位,同时也会进行自动复位操作。手动复位作用就是在单片机正常的运行过程当中,按下开关即可使单片机的运行进行停止。如图1.3所示。

图1.3复位电路

1.2.2 单片机的时钟电路

时钟电路在单片机当中是一个十分重要的存在,因为时钟电路在工作当中会产生振荡,它的振荡频率将会影响到单片机的工作状态和工作频率。如图1.4所示。

图1.4时钟电路

1.3 电源电路

本系统是一个模拟系统,所以我们用不到220V的电压。本系统只采用了一个5V的直流电压进行供电。在进行调解以后,该系统的其他元器件都可以进行正常的工作。如图1.5所示:

图1.5电源电路

1.4 电梯呼叫按键电路

     这个复杂的电路包括了从一层到八层的按键,这种设计安全,一边接地,一边接单片机,这种设计才可以实现随意按键从而达到需求。按键电路如图1.6所示。

图1.6按键电路

1.5 楼层显示和楼层指示电路

一共设计了八层,楼层的显示由数码管进行表现,每个楼层按键按下指示灯为8个发光二极管来表示电梯运行状态如图1.7所示。

图1.7显示电路

1.6 电梯上下指示电路

    电梯的上行和下行由图中的小箭头来进行指示。向上则向上的箭头亮,向下则向下的箭头亮。指示电路如图1.8所示。

图1.8指示电路

1.7 防夹模块电路

该模块的收发信号的装置,采用的是红外线进行收发。当发生意外的时候,蜂鸣器会发出发出警报。 如图1.9所示。

图1.9 防夹模块

1.8 电机驱动电路

STC89C52可以应付于各种各样的工作状态而不产生损坏,但不能直接驱动电机,这需要通过输出电路来扩张输出电流,从而满足控制部件的电流和电压[17]。                  

达林顿晶体管就是属于符合上述标准的产品。当输入一个高电压的时候,它可以输出一个低电压,反之则依然。如图1.10所示:

图1.10驱动芯片接线图

1.9 报警模块电路

本设计采用三极管驱动蜂鸣器。当电路中输入的为高电压时,三极管是处于截止状态,此时没有办法驱动蜂鸣器进行报警。当电路输入的为低电压时,三极管接通可以驱动蜂鸣器发出报警的声音,从而达到工作状态。如图1.11所示。

图1.11报警模块电路

2 系统的安装与调试

2.1 安装步骤

(1)检查元件的好坏

首先我们将买到的元器件拿在桌面上进行一一检查的目的就是看这些元器件是否可以正常的工作有没有损坏。如果发现有损坏,那么就要及时更换。

(2)放置、焊接各元件

首先按照原理图将各个元器件进行安装和摆放,接下来对这些元器件进行焊接,先焊接较低的元器件在焊接较高的元器件,最后焊接那些比较容易坏的元器件,焊接芯片时要控制时间,以免电焊的温度将芯片所损坏。焊接好的成品如图2.1所示。

图2.1元器件的焊接

2.2 硬件调试

硬件调试顾名思义就是我们所焊接的成品,对他们进行测试。我所采用的方式就是用所需要的仪器进行测试。

分为两部分,一部分是静态测试,一部分是动态测试。当成品没有工作的时候,我们通过肉眼首先来观察一下是否有短路的情况产生。其次我们用万用表来对各个零部件进行检测,观察是否有短路的情况产生。动态测试就是在成品正常工作的状态下,我们观察是否有短路的情况产生,是否有异常的状况发生,是否有停止工作的状态。检测的方法有多种多样,我们可以到网上进行查询整理。当发现有故障时,哪一个部分有故障,我们就将这个部分的元器件取出进行修理,更换和调试。如图2.2所示。

图2.2硬件调试图

2.3 仿真调试

仿真调试就是将我们所编写的程序导入到电脑软件当中,模拟电梯在正常运行的状态下,我们的程序是否也可以正常的运转。在模拟的过程当中,如果发现程序有问题,这时我们要检查元器件和我们所编写的程序是否有问题,并且找到问题及时修改。在软件模拟的过程当中,我们还可以进行犯错,如果是在实际操作中犯错是会产生安全隐患,所以模拟仿真也是一项十分重要的工作。仿真过程如图2.3所示。

图2.3仿真调试

在本次仿真设计中,将采用KEIL来对系统软件的运行来进行调试。我们会将各个系统都导入到软件当中进行调试。然后通过单片机进行模拟运行,一步一步的进行调试,看是否在实际操作中硬件也可以正常的运行。如果遇到了编写好的程序在仿真的时候不能够正确运行。随后开始检查自己编写的程序,找到程序问题,并且改正。

原理图

PCB图

如果你需要帮助、建议或解决问题,不要犹豫,可以随时向老师提问或寻求支持。专注于单片机的解决方案可以为你提供有关电子设计、嵌入式系统、编程和硬件方面的宝贵信息。无论你的问题涉及到哪个方面,都可以向老师咨询,以获得有针对性的建议和指导。祝愿你在单片机设计领域取得成功!

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
八、 实验内容和要求: 要求根据下面的功能说明描述实现模拟电梯控制软件 (一)电梯配置 1. 共有1个电梯 2. 共有maxfloor层楼层。maxfloor=9。 3. 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭 4. 电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭 5. 另有一启动按钮(GO)。当电梯停在某一楼层后,接受到GO信息就继续运行。如果得不到GO信息,等待一段时间也自动继续运行。 6. 电梯内设有方向指示灯表示当前电梯运行方向。 说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取按钮请求。因此电梯按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。 (二)电梯的运行控制 1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。 2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。 3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。 4. 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。 5. 乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。 6. 当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响应。 7. 电梯停要某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。 8. 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。 (三)电梯运行的控制策略 以下是几个候选策略: 1.先来先服务策略: 将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。 2. 顺便服务策略: 顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。 可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下: 1) 修改目标楼层的策略: a.如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。 b.如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。 2)确定新的目标楼层: 如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层: a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 如果电梯向下运行,依照以下顺序确定下一目标楼层: a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 3)最快响应策略: 响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。 可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,
以下是51单片机模拟电梯实验代码的示例: ```c #include <reg51.h> // 定义IO口 sbit UP = P1^0; // 上行按钮 sbit DOWN = P1^1; // 下行按钮 sbit ELEVATOR = P1^2; // 电梯运行状态指示灯 sbit STOP = P1^3; // 停止按钮 sbit OPEN = P1^4; // 开门按钮 sbit CLOSE = P1^5; // 关门按钮 sbit LEVEL1 = P1^6; // 一楼指示灯 sbit LEVEL2 = P1^7; // 二楼指示灯 // 定义控制变量 unsigned char elevator_level = 1; // 电梯所在的楼层 unsigned char elevator_state = 0; // 电梯的状态,0表示停止,1表示上行,2表示下行 // 定义函数 void delay(unsigned int time); // 延时函数 void elevator_up(); // 电梯上行函数 void elevator_down(); // 电梯下行函数 void elevator_stop(); // 电梯停止函数 void main() { // 初始化IO口状态 ELEVATOR = 0; LEVEL1 = 0; LEVEL2 = 0; while(1) { // 上行按钮按下 if(UP == 0 && elevator_state == 0 && elevator_level == 1) { elevator_state = 1; elevator_up(); } // 下行按钮按下 if(DOWN == 0 && elevator_state == 0 && elevator_level == 2) { elevator_state = 2; elevator_down(); } // 停止按钮按下 if(STOP == 0 && elevator_state != 0) { elevator_stop(); } // 开门按钮按下 if(OPEN == 0 && elevator_state == 0) { if(elevator_level == 1) { LEVEL1 = 1; } else if(elevator_level == 2) { LEVEL2 = 1; } delay(5000); if(elevator_level == 1) { LEVEL1 = 0; } else if(elevator_level == 2) { LEVEL2 = 0; } } // 关门按钮按下 if(CLOSE == 0 && elevator_state == 0) { if(elevator_level == 1) { LEVEL1 = 0; } else if(elevator_level == 2) { LEVEL2 = 0; } } } } void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) { for(j = 0; j < 120; j++); } } void elevator_up() { ELEVATOR = 1; delay(5000); elevator_level = 2; ELEVATOR = 0; elevator_state = 0; } void elevator_down() { ELEVATOR = 1; delay(5000); elevator_level = 1; ELEVATOR = 0; elevator_state = 0; } void elevator_stop() { ELEVATOR = 1; delay(5000); ELEVATOR = 0; elevator_state = 0; } ``` 上述代码实现了一个简单的模拟电梯系统,其中通过IO口模拟了电梯按钮、运行状态指示灯和楼层指示灯等功能。在程序中使用了一个状态变量来记录电梯的状态,从而能够判断电梯是上行、下行还是停止状态。同时,通过延时函数来模拟电梯运行的时间,从而达到模拟电梯运行的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值