微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 如何用51实现4层“电梯模拟”?

如何用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
      

程序没看,有点乱,先把控制原理/方式理清楚,后面才好做

自己先写个流程图,方便你思维

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top