如何用51实现4层“电梯模拟”?

2019-07-16 04:02发布

单片机新手求助~~~~
想用按键键入想去的楼层,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

      
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。