1002-基于51单片机的2层电梯(2层)原理图、流程图、物料清单、仿真图、源代码

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;//到达
			 }
		 }
	}
}
//===================================================================
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值