基于51单片机的电梯控制系统

这一次的项目是前阵子发布的Altium designer ERROR系列链接
第一篇的项目,实现了51单片机控制电机,从而控制一台六层电梯。

具体说明:系统启动后自动定位到一楼。当外部按键按动时,电梯前往该楼层;内部按键共七个,其中六个对应六层,第七个为报警按键,按下后电梯停止工作,蜂鸣器鸣响报警,同时上行下行显示灯关闭,再次按下恢复正常。为保证电机运行正常和电梯舒适感,每层楼运行时间间隔为三秒。

原理图如下:
基于51单片机的电梯控制系统
这里采用了L298来驱动电机,使用74LS164驱动数码管显示楼层。在层与层之间默认了电梯运行三秒钟,但是在具体实践中应根据现实楼层高度而定。

同时,由于这次项目更多的是模拟电梯运行,所以,我在PCB设计并没有把各个按键分开,而是画到了一块板子上,如下图:
在ad中,我并没有找到74LS164的芯片原理图,只有芯片封装,所以自己画了个164的芯片。
基于51单片机的电梯控制系统

部分代码如下所示:

void shangsheng()
{
 int i;
 t=11;
 ledup=0;
 leddown=1;
 for(i=0;i<10;i++)
 {
  stop();
  d11=1,d12=0,d21=0,d22=0;
  delay(5);
  d11=1,d12=1,d21=0,d22=0;
  delay(5);
  d11=0,d12=1,d21=0,d22=0;
  delay(5);
  d11=0,d12=1,d21=1,d22=0;
  delay(5);
  d11=0,d12=0,d21=1,d22=0;
  delay(5);
  d11=0,d12=0,d21=1,d22=1;
  delay(5);
  d11=0,d12=0,d21=0,d22=1;
  delay(5);
  d11=1,d12=0,d21=0,d22=1;
  delay(5);
 }
 t=0;
 leddown=1;
 ledup=1;
}
void xiajiang()
{
 int i;
 t=10;
 ledup=1;
 leddown=0;
 for(i=0;i<10;i++)
 {
  stop();
  d11=0,d12=0,d21=0,d22=1;
  delay(5);
  d11=0,d12=0,d21=1,d22=1;
  delay(5);
  d11=0,d12=0,d21=1,d22=0;
  delay(5);
  d11=0,d12=1,d21=1,d22=0;
  delay(5);
  d11=0,d12=1,d21=0,d22=0;
  delay(5);
  d11=1,d12=1,d21=0,d22=0;
  delay(5);
  d11=1,d12=0,d21=0,d22=0;
  delay(5);
  d11=1,d12=0,d21=0,d22=1;
  delay(5);
 }
 t=0;
 leddown=1;
 ledup=1;
}
void go()
{
 char temp;
 if(keyvalue!=keyvalue01d)
 {
  keyvalue01d=keyvalue;
  temp=nowfloor-keyvalue;
  if(t==0)
  {
   if(temp>0)
   {
    while(temp>0)
    {
     shangsheng();
     num++;
     if(gofloor[num]!=0)
     {
      if(((gofloor[num]&0x01)+(gofloor[num]&0x04))>0);
     }
     temp--;
     SBUF=play[--nowfloor];
     while(!TI);
     TI=0;
    }
    nowfloor=keyvalue;
   }
   if(temp<0)
   {
    while(temp<0)
    {
     xiajiang();
     temp++;
     SBUF=play[++nowfloor];
     while(!TI);
     TI=0;
    }
    nowfloor=keyvalue;
   }
  }
 }
}

富文本编辑器对于edge的适应和shit一模一样,上面三块代码整块粘贴就会卡死,也是醉了。

资源包含:proteus仿真+原理图;keil编写的C语言程序;ad原理图+PCB;产品说明书。
资源链接详见评论区
知识无价,开源万岁!!!

上一篇:第十章:数据库连接池与DBUtils


下一篇:如何在 C# 中使用 数据注解