如何用51实现4层“电梯模拟”?
时间:10-02
整理:3721RD
点击:
单片机新手求助~~~~
想用按键键入想去的楼层,LED灯指示想去的楼层
数码管指示当前所在楼层
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
想的简单,但做起来感觉好难好复杂,呃~~~~~~~~~我太弱了,自己写了个程序如下,望有人指点,反正不对,谢谢大家!
main()
{
IE=0X82;
TMOD=1;
TH0=0XDC;
TL0=0X01;
TR0=1;
a1=1; a1=1; a4=1; a5=1; a6=1; a8=1; a9=1; a12=1;
while(1)
{
switch(floor) //检测楼层
{
case 1: if(!(a9&a12)) //1层,如果1层电梯室按钮或者电梯内1层按钮按下 ,开门,清一层和电梯内1层按钮
{
open();
a9=1;a12=1;
}
while(a1&a4&a5&a6&a8&a9&a12); //如果没有按钮按下,停止,有则继续
if(!(a9&a12)) //如果还是一楼按,跳出swtich,因为楼层还在1楼,还在case1 所以,开门,清一层和电梯一层,
{
floor=1;break;
}
delay_1s(); //如果按下的不是一层的,楼梯上升,楼层变2 跳出。
floor=2;
break;
case 2: if(!(a5&a6&a8)) //如果 电梯内外有2层的按钮按下,开门,清2层键
{
open();a5=1;a6=1;a8=1;
}
while(a1&a4&a5&a6&a8&a9&a12);//没有按键,停止
if(!(a1&a4)) //如果3层按, 上升,楼层变3
{
delay_1s();floor=3;break;
}
if(!(a5&a6&a8)) //如果2层按,跳出switch重新检测,然后开门,清二层
{
floor=2;break;
}
if(!(a9&a12)) //如果1层按 下降 楼层变1
{
delay_1s();floor=1;break;
}
case 3: if(!(a9&a12)) //楼层3,如果3层按,开门 清三层
{
open();a9=1;a12=1;
}
while(a1&a4&a5&a6&a8&a9&a12);
if(!(a9&a12)) //如果三层按,跳出,开门,清3层
{
floor=3;break;
}
delay_1s();floor=2;break; //其他层按,下降,楼层变2
想用按键键入想去的楼层,LED灯指示想去的楼层
数码管指示当前所在楼层
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
想的简单,但做起来感觉好难好复杂,呃~~~~~~~~~我太弱了,自己写了个程序如下,望有人指点,反正不对,谢谢大家!
main()
{
IE=0X82;
TMOD=1;
TH0=0XDC;
TL0=0X01;
TR0=1;
a1=1; a1=1; a4=1; a5=1; a6=1; a8=1; a9=1; a12=1;
while(1)
{
switch(floor) //检测楼层
{
case 1: if(!(a9&a12)) //1层,如果1层电梯室按钮或者电梯内1层按钮按下 ,开门,清一层和电梯内1层按钮
{
open();
a9=1;a12=1;
}
while(a1&a4&a5&a6&a8&a9&a12); //如果没有按钮按下,停止,有则继续
if(!(a9&a12)) //如果还是一楼按,跳出swtich,因为楼层还在1楼,还在case1 所以,开门,清一层和电梯一层,
{
floor=1;break;
}
delay_1s(); //如果按下的不是一层的,楼梯上升,楼层变2 跳出。
floor=2;
break;
case 2: if(!(a5&a6&a8)) //如果 电梯内外有2层的按钮按下,开门,清2层键
{
open();a5=1;a6=1;a8=1;
}
while(a1&a4&a5&a6&a8&a9&a12);//没有按键,停止
if(!(a1&a4)) //如果3层按, 上升,楼层变3
{
delay_1s();floor=3;break;
}
if(!(a5&a6&a8)) //如果2层按,跳出switch重新检测,然后开门,清二层
{
floor=2;break;
}
if(!(a9&a12)) //如果1层按 下降 楼层变1
{
delay_1s();floor=1;break;
}
case 3: if(!(a9&a12)) //楼层3,如果3层按,开门 清三层
{
open();a9=1;a12=1;
}
while(a1&a4&a5&a6&a8&a9&a12);
if(!(a9&a12)) //如果三层按,跳出,开门,清3层
{
floor=3;break;
}
delay_1s();floor=2;break; //其他层按,下降,楼层变2
程序没看,有点乱,先把控制原理/方式理清楚,后面才好做
自己先写个流程图,方便你思维