基于51单片机的电梯控制系统
这一次的项目是前阵子发布的Altium designer ERROR系列 第一篇的项目,实现了51单片机控制电机,从而控制一台六层电梯。
具体说明:系统启动后自动定位到一楼。当外部按键按动时,电梯前往该楼层;内部按键共七个,其中六个对应六层,第七个为报警按键,按下后电梯停止工作,蜂鸣器鸣响报警,同时上行下行显示灯关闭,再次按下恢复正常。为保证电机运行正常和电梯舒适感,每层楼运行时间间隔为三秒。
原理图如下: 这里采用了L298来驱动电机,使用74LS164驱动数码管显示楼层。在层与层之间默认了电梯运行三秒钟,但是在具体实践中应根据现实楼层高度而定。
同时,由于这次项目更多的是模拟电梯运行,所以,我在PCB设计并没有把各个按键分开,而是画到了一块板子上,如下图: 在ad中,我并没有找到74LS164的芯片原理图,只有芯片封装,所以自己画了个164的芯片,为了后续方便使用,在新版的PCB中,将L298N小板集成到了整体电路板上。
部分代码如下所示:
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;产品说明书。