当前位置:网站首页>四层和八层电梯控制系统Proteus仿真设计,51单片机,附仿真和Keil C代码
四层和八层电梯控制系统Proteus仿真设计,51单片机,附仿真和Keil C代码
2022-04-23 14:13:00 【蒋宇智】
资源获取,请见文末说明~
设计要求
- 电梯设置内外键,按下任一键,电梯控制系统响应;
- 电梯楼层和升降状态通过数码管、LED灯实时显示;
- 具有紧急停止和声光报警功能,保护乘客安危;
- 使用步进电机模拟电梯升降,顺时转动为升,逆时为降;
- 电梯无人时,默认停留在一楼;
系统概述
本系统以51单片机作为控制核心,实时读取电梯内外部操作按键,及时响应乘坐要求。数码管和LED指示灯,分别表示当前电梯所在楼层和升降状态;步进电机模拟电梯运行过程(电机顺时针转动为升,逆时针为降)。
同时,本系统具有电梯紧急停止和报警功能。电梯运行过程中,按下报警键,报警灯闪烁,蜂鸣器鸣叫,电梯停止运行。长按启动键后,解除报警,电梯恢复运行;
按下紧急停止按键,电梯急停,数码管显示当前急停楼层,上行灯和下行灯均熄灭,表明电梯处于不可用状态。
需要注意的是,启动键用于模拟电梯关门,在电梯内部按下要去的楼层后,再按下启动键,电梯才会开始运行。
整个系统构建如下所示:
仿真电路图
仿真分析
双击单片机,加载C程序文件夹里的elevator.hex,运行仿真,结果如下。电梯停靠在1楼,上行灯点亮,等待乘客乘坐;
假设4楼住户要到2楼,4楼住户在电梯外部按下“下”的按键后,电梯从1楼开始上升,上行灯点亮,步进电机顺时转动,数码管依次显示楼层;下图为电梯上升过程中,到达3楼位置;
到达4楼后,步进电机停止转动,数码管显示数字4,同时黄色下行灯点亮,表明电梯将开始下降;
4楼住户进入电梯,按下电梯内部按键2F后,再按下启动键(模拟电梯关门),电梯运行,步进电机逆时针转动;到达2楼后,如下所示;
报警与急停
在电梯运行的任何时刻,按下电梯内部报警按钮,红色LED报警灯点亮,蜂鸣器鸣叫,电梯停止在当前楼层,步进电机也停止转动;长按启动键,警报解除,电梯恢复运行;下图为电梯在2楼位置报警。
出现意外情况时,按下紧急停止按键后,电梯立即停止,数码管显示当前急停楼层,上行灯或下行灯都熄灭,表明电梯此时不可用,同时步进电机停转;此时只有重新运行系统才可解除急停;下图为电梯在3楼位置急停;
部分C代码
#include <REG52.H>
#include <INTRINS.H>
unsigned char ucMotorDrvPuls; //电机运转时初始值
unsigned char FORREV=1; //1表示上行,0表示下行
unsigned char STOPCUR=0;//1电梯停留在当前层,0不停留
unsigned char CURFLR=1; //当前所在楼层
unsigned char count=0; //累计到COUNT即表示运行过一层
#define UCTIMES 8 //设置电机转速
#define OUTPUT P2 //电机驱动信号口
#define COUNT 8 //电机每循环8次表示电梯经过一层楼
sbit UP1=P3^4;
sbit DOWN2=P3^3;
sbit UP2=P3^2;
sbit DOWN3=P3^1;
sbit UP3=P3^0;
sbit DOWN4=P1^7;
sbit FLOOR1=P1^0;
sbit FLOOR2=P1^1;
sbit FLOOR3=P1^2;
sbit FLOOR4=P1^3;
sbit START=P1^4;
sbit STOP=P1^5;
sbit ALARM=P1^6;
//报警位
sbit alarmBit=P0^4;
sbit upLight=P0^5;
sbit downLight=P0^6;
void time(unsigned int ucMs);//延时单位:ms
void outPress();//按下电梯外按钮
unsigned char inPress();//按下电梯内楼层按钮
unsigned char elevator();//到达某一层返回1,否则返回0
void storeUP(unsigned char);//存储当前所有上行请求
void storeDOWN(unsigned char);//存储当前所有下行请求
//延时函数
void time(unsigned int ucMs);
//初始化所有灯
void initLights(void);
//设置当前楼层
void setFloor(int floor);
//设置电梯向上运行灯
void setUpLight();
//设置电梯向下运行灯
void setDownLight();
//设置电梯停止运行灯
void setStopLight();
//设置电梯向上运行灯
void setAlarmLight();
//设置电梯报警灯和喇叭
void setAlarmLight();
//关闭电梯报警灯和喇叭
void offAlarmLight();
//报警开关
int alarmSwitch=1;
unsigned char UP_req[5]={
0,0,0,0,0}; //上行请求
unsigned char DOWN_req[5]={
0,0,0,0,0}; //下行请求
//电机定位
void position(void)
{
OUTPUT=0x01|(P2&0xf0);time(200);
OUTPUT=0x02|(P2&0xf0);time(200);
OUTPUT=0x04|(P2&0xf0);time(200);
OUTPUT=0x08|(P2&0xf0);time(200);
ucMotorDrvPuls=0x11;
OUTPUT=0x01|(P2&0xf0);
}
/****************************************/
/* 主函数 */
/****************************************/
void main(void)
{
time(100);
initLights();
position();//电机定位
ucMotorDrvPuls=0x11;
OUTPUT=0x00|(P2&0xf0);//电机停止
setFloor(CURFLR);
setUpLight();
time(100);
while(1)//主循环
{
outPress();//按下电梯外按钮
while(STOPCUR==1)//电梯在当前层,电梯不动,可以继续接受请求
{
outPress();
inPress();
}
if(inPress())//按下电梯内楼层按钮
{
while(START)//等待启动按键按下,电梯不动,可以继续接受请求
{
outPress();
inPress();
}
}
while(1)//电机运转循环
{
if(UP_req[1]==0&&UP_req[2]==0&&UP_req[3]==0&&
DOWN_req[2]==0&&DOWN_req[3]==0&&DOWN_req[4]==0)
{
break;//没有请求,跳出电机运转循环,电梯不动
}
if(FORREV)//上行
{
setUpLight();//上行灯亮
if(STOPCUR==1){
break;}//
if(elevator())//往上到达某一层
{
if(CURFLR==4) {
setDownLight();break;}//到达四楼
}
OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);
ucMotorDrvPuls=_crol_(ucMotorDrvPuls,1);
}
if(!FORREV)//下行
{
setDownLight();//下行灯亮
;
if(STOPCUR==1){
break;}
if(elevator())//往下到达某一层
{
if(CURFLR==1) {
setUpLight();break;}//到达一楼
}
OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);
ucMotorDrvPuls=_cror_(ucMotorDrvPuls,1);
}
outPress();//按下电梯外按钮
//if(inPress())//按下电梯内楼层按钮
//{
// while(START)//等待启动按键按下
//{
// outPress();
inPress();//电梯运行时,内部按钮按下,无需按启动按钮
// }
//}
time(380-UCTIMES*16);
}//end while-电机运转循环
OUTPUT=0x00|(P2&0xf0);//电机停止,有请求时按下启动按钮启动
}//end while-主循环
}
8层电梯控制系统设计
8层电梯仿真分析
按下电梯外部按键8F,模拟8层住户需要电梯,8F LED指示灯点亮,数码管从1到8依次显示,电梯上行箭头点亮;下图为电梯上行过程中。
电梯到达8楼后,上行箭头闪烁后熄灭,提示音哔两声,表示电梯到达8楼;
假设8楼住户要去5楼,按下电梯内部按键5F,5F LED指示灯点亮,数码管从8到5依次显示,模拟电梯下行,同时下行箭头点亮;下图为电梯下行过程中经过6楼;
电梯到达5楼后,5F LED指示灯熄灭,同样,下行箭头闪烁后熄灭,提示音哔两声,表示电梯到达5楼;
资源内容有
(1)四层电梯Proteus仿真文件;
(2)C程序;
(3)参考资料;
(4)系统框图;
(5)设计2:八层电梯控制;
资源截图
8层电梯设计资源
获取四层/八层电梯控制系统设计,Proteus仿真、C程序等设计资源,请微信搜索关注我的公众号:交院小智。
版权声明
本文为[蒋宇智]所创,转载请带上原文链接,感谢
https://blog.csdn.net/JiaoDaBoy/article/details/107476375
边栏推荐
猜你喜欢
随机推荐
js 递归(1)
SSH 通过跳板机连接远程主机
差分隐私(背景介绍)
ansible及常用模块的使用
浅谈skiplist在LevelDB的应用
grep无法重定向到文件的问题
C语言知识点精细详解——数据类型和变量【1】——进位计数制
Golang 对分片 append 是否会共享数据
线程间控制之CountDownLatch和CyclicBarrier使用介绍
如何5分钟上手使用OCR
返回数组排序后下标
gif转为静态图片处理
Quickly understand the three ways of thread implementation
json date时间日期格式化
LLVM - 生成for循环
LLVM - 生成 if-else 以及 PH
js 抛物线运动方法封装
Introduction to loan market quotation interest rate (LPR) and loan benchmark interest rate
分分钟掌握---三目运算符(三元运算符)
MySQL数据库讲解(七)