1002-基于51单片机的2层电梯(2层)原理图、流程图、物料清单、仿真图、源代码
功能介绍:
1、电梯有上下行功能,有一个电机通过正反转控制,分别用2个指示灯指示上下行
2、有开门和关门功能,有一个电机通过正反转控制,分别用2个指示灯指示开门和关门
3、 1,2层外部按钮,带相应指示灯
4、电梯内部开门、关门按钮,带相应指示灯
5、超重报警
6、呼叫信号保持
7、楼层显示,上下行显示
有哪些资料:
1、仿真工程文件
2、源代码工程文件
3、原理图工程文件
4、流程图
5、功能介绍
6、元件清单
请添加图片描述
#include "reg51.h"
#include "ADC0832.h"
#define uchar unsigned char
#define uint unsigned int
//===================================================================
//按键定义
sbit smg1=P3^0;//数码管
sbit smg2=P3^1;
sbit out1=P1^4;//上下电机
sbit out2=P1^5;
sbit out3=P1^6;//开门电机
sbit out4=P1^7;
sbit led1=P3^6;//呼叫指示
sbit led2=P2^5;//上
sbit led3=P2^6;//下
sbit led4=P2^7;//超重
sbit led5=P3^4;//门状态
sbit k1=P3^3;//1楼外部
sbit k2=P3^2;//2楼外部
sbit k3=P3^5;//呼叫回应
sbit s1=P3^7;//呼叫
sbit s2=P2^1;//开门
sbit s3=P2^2;//关门
sbit s4=P2^3;//2楼
sbit s5=P2^4;//1楼
sbit beep=P2^0;//蜂鸣器
//===================================================================
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar stop=0;//停止
uchar time=0;
uchar fang=0;//方向
uchar an1=0,an2=0,lou=1;//楼层按下
uchar weight=0,sec=0;//重量
uchar buzzr=0;//蜂鸣器控制
//===================================================================
void main()
{
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
P0=smgduan[lou];
//呼叫-------------------------------------------
if(!s1)
{
buzzr=10;
led1=0;
}
//回应呼叫
if(!k3)
{
led1=1;
}
//超重
while(weight>50)
{
buzzr=20;
led4=0;
}
led4=1;
//电梯控制---------------------------------------
if(stop==0)//停止模式
{
if((an1==1)||(an2==1))//切换模式
stop=1;
if(!k1)//1楼外部
{
an1=1;
if(lou==1)//电梯在1楼
{
time=60;//开门
open1: buzzr=20;
out3=0;
while(time>0);
out3=1;
led5=0;
time=60;//开门等待
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s3)//内部关门
{
break;
}
}
time=60; //关门
out4=0;
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s2)//内部开门
{
time=60-time;
out4=1;
goto open1;//重新开门
}
}
led5=1;
out4=1;
stop=1;
}
while(!k1);
}
if(!k2)//2楼外部
{
an2=1;
if(lou==2)//电梯在2楼
{
time=60;//开门
open2: buzzr=20;
out3=0;
while(time>0);
out3=1;
led5=0;
time=60;//开门等待
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s3)//内部关门
{
break;
}
}
time=60; //关门
out4=0;
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s2)//内部开门
{
time=60-time;
out4=1;
goto open2;//重新开门
}
}
led5=1;
out4=1;
stop=1;
}
while(!k2);
}
//内部按钮操作
if(!s2)//开门
{
time=60;//开门
open3: buzzr=20;
out3=0;
while(time>0);
out3=1;
led5=0;
time=60;//开门等待
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s3)//内部关门
{
break;
}
}
time=60; //关门
out4=0;
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s2)//内部开门
{
time=60-time;
out4=1;
goto open3;//重新开门
}
}
led5=1;
out4=1;
}
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
}
else//运行模式----------------------------------------------
{
if((an1==1)&&(lou==1))
{
an1=0;
stop=0;
led2=1;led3=1;
}
if((an2==1)&&(lou==2))
{
an2=0;
stop=0;
led2=1;led3=1;
}
if((an1==1)&&(lou==2))//下降
{
led2=1;led3=0;
time=100;//下降时间
out2=0;
while(time>0)
{
//呼叫
if(!s1)
{
buzzr=10;
led1=0;
}
//回应呼叫
if(!k3)
{
led1=1;
}
}
out2=1;lou=1;
P0=smgduan[lou];
time=60;//开门
open4: buzzr=20;
out3=0;
while(time>0);
out3=1;
led5=0;
time=60;//开门等待
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s3)//内部关门
{
break;
}
}
time=60; //关门
out4=0;
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s2)//内部开门
{
time=60-time;
out4=1;
goto open4;//重新开门
}
}
led5=1;
out4=1;
stop=0;
led2=1;led3=1;
an1=0;lou=1;//到达
}
if((an2==1)&&(lou==1))//上升
{
led2=0;led3=1;
time=100;//下降时间
out1=0;
while(time>0)
{
//呼叫
if(!s1)
{
buzzr=10;
led1=0;
}
//回应呼叫
if(!k3)
{
led1=1;
}
}
out1=1;lou=2;
P0=smgduan[lou];
time=60;//开门
open5: buzzr=20;
out3=0;
while(time>0);
out3=1;
led5=0;
time=60;//开门等待
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s3)//内部关门
{
break;
}
}
time=60; //关门
out4=0;
while(time>0)
{
//超重
while(weight>50)
{
buzzr=20;
led4=0;
out4=1;
}
led4=1;
if(!s5) //内部楼层设置
an1=1;
if(!s4)
an2=1;
if(!s2)//内部开门
{
time=60-time;
out4=1;
goto open5;//重新开门
}
}
led5=1;
out4=1;
stop=0;
led2=1;led3=1;
an2=0;lou=2;//到达
}
}
}
}
//===================================================================