电梯内外按键,按下任一按键,系统将根据当前位置响应用户要求;
可显示电梯当前运行状态,包括楼层数的实时显示、电梯升降状态显示:
电梯无人时,默认停在一楼;
完整版 电路图和程序代码 下载地址
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--)
;
}
}