456 基于单片机模拟六层电梯控制系统的设计( 仿真 程序代码 )

电梯内外按键,按下任一按键,系统将根据当前位置响应用户要求;
可显示电梯当前运行状态,包括楼层数的实时显示、电梯升降状态显示:
电梯无人时,默认停在一楼;

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1tfFkkecEMf7rsYZK9lx5pw?pwd=3456

部分代码展示
#include<reg52.h>
#define MAXFLOOR 6
unsigned char code LED_CODES[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};
sbit F6D=P1^0;
sbit F1U=P1^1;
sbit F2D=P1^2;
sbit F2U=P1^3;
sbit F3D=P1^4;
sbit F3U=P1^5;
sbit F4D=P1^6;
sbit F4U=P1^7;
sbit F5D=P3^0;
sbit F5U=P3^1;
sbit F1=P2^0;
sbit F2=P2^1;
sbit F3=P2^2;
sbit F4=P2^3;
sbit F5=P2^4;
sbit F6=P2^5;

sbit ledu=P3^7;
sbit ledd=P3^6;
sbit ledx=P2^3;

sbit a1=P2^4;
sbit a2=P2^5;
sbit a3=P2^6;
sbit a4=P2^7;
bit dir=1,stop=0;
unsigned char nf=1;
unsigned char cf=1;
unsigned char df;
unsigned char tf;
unsigned char flag,count=0,i=0;
unsigned int timer1=0,timer2=0;

unsigned char call_floor[7]={0,0,0,0,0};
unsigned char const sequencea[8]={0x2F,0x6F,0x4F,0xcF,0x8F,0x9F,0x1F,0x3F};

void select_next();
void step(bit dir);
void delay(unsigned int z);

void main(void)
{P0=LED_CODES[1];
TH0=0x3C;
TL0=0xB0;
TMOD=0x01;
ET0=1;
EA=1;
EX0=1;
IT0=1;
	while(1)
	{ if(!flag&&!stop)
		{select_next();
		 step(dir);
		 }
		 else if(stop)
		 {timer2=0;
		 TR0=1;
		 while(timer2<100&&stop);
		 TR0=0;
		 timer2=0;
		 stop=0;}
	}
}

void select_next()
{char i;
if(nf==MAXFLOOR)
	{
	dir=0;
	}
	else if(nf==1)
	{
	dir=1;
	}
	if(dir==0)
	{
	if(call_floor[nf]==1)
	{call_floor[nf]=0;
	stop=1;
	return;
	}
	for(i=nf-1;i>=1;i--)
		if(call_floor[i])
		{cf=i;return;}
		dir=1;
	for(i=nf+1;i<=MAXFLOOR;i++)
		if(call_floor[i])
		{cf=i;return;}
	dir=0;
	cf=1;
}
	if(call_floor[nf]==1)
	{
	call_floor[nf]=0;
	stop=1;
	return;
	}
	for(i=nf+1;i<=MAXFLOOR;i++)
	if(call_floor[i])
		{cf=i;return;}
		if(i==7)
	   {dir=0;
	   }
}

void step(bit dir)
{
if(cf==nf)
	return;
else if(!flag)
{flag=1;
delay(50);
	if(dir==1)
	{ledu=0;
	 ledx=0;
	 ledd=1;
	 {i=i<8?i+1:0;
	 switch(i)
	 {
	 case0:	a1=0;a2=1;a3=0;a4=0;break;
	 case1:	a1=0;a2=1;a3=1;a4=0;break;
	 case2:	a1=0;a2=1;a3=1;a4=0;break;
	 case3:	a1=0;a2=0;a3=1;a4=1;break;
	 case4:	a1=0;a2=0;a3=0;a4=1;break;
	 case5:	a1=1;a2=0;a3=0;a4=1;break;
	 case6:	a1=1;a2=1;a3=0;a4=0;break;
	 case7:	a1=1;a2=1;a3=0;a4=0;}
	 }
	 }
	 else 
	 {ledd=0;
	 ledx=0;
	 ledu=1;
	 {i=i>0?i-1:7;
	 switch(i)
	 {
	 case 0:a1=1;a2=1;a3=0;a4=0; break;
	 case 1:a1=1;a2=0;a3=1;a4=0; break;
	 case 2:a1=1;a2=0;a3=0;a4=1; break;
	 case 3:a1=0;a2=0;a3=0;a4=1; break;
	 case 4:a1=0;a2=0;a3=1;a4=1; break;
	 case 5:a1=0;a2=0;a3=1;a4=0; break;
	 case 6:a1=0;a2=1;a3=1;a4=0; break;
	 case 7:a1=0;a2=1;a3=0;a4=0;}
	 }
	 }
	 timer1=0;
	 TR0=1;
	 }
	}
	void delay(unsigned int z)
	{
	unsigned int x,y;
	for(x=z;x>0;x--)
	{
	for(y=125;y>0;y--)
	;
	}
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值