《基于51单片机的电梯控制器(总结报告).docx》由会员分享,可在线阅读,更多相关《基于51单片机的电梯控制器(总结报告).docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于 51 单片机的电梯控制器(总结报告)基于 51 单片机电梯控制器设计基于 51 单片机电梯控制器设计总结报告随着现代高科技的发展住房和办公用楼都已经逐渐向高层发展。电梯是高层宾馆、商店、住宅、多层仓库等高层建筑不可缺少的垂直方向的交通运输工具。随着建筑物规模越来越大楼层也越来越高对电梯的调速精度、调速范围等静态和动态特性都提出了更高的要求。基于发展我们小组运用 51 单片机设计电梯控制器系统。一、 系统功能1、电梯以同向优先的基础上就近原则2、本课题以 LED 灯代替电梯的上下并配以数码管显示楼层 二、 系统硬件实现1、模块设计主控模块:51 单片机控制显示模块:通过发光二极管模仿电梯并
2、以此指示电梯的升降配以数码管指示楼层数蜂鸣器提示到达目标楼层。输入模块:通过模拟电梯开关控制电梯升降达到模拟电梯的升降。 2、框图设计电源按键电路 驱动电路复位电路 At89s51 数LED 码晶振电路 管3、电路原理图基于 51 单片机电梯控制器设计4、焊接二、 系统软件实现1、程序流程图开始设定初始值While(1) 电梯控制显示电梯部分中断服务基于 51 单片机电梯控制器设计2、C 语言源代码Void delay() /延时函数Void print() /显示函数控制数码管及各楼层指示灯亮灭Void initial()/初始化函数Void open() /开门函数Void close()
3、 /关门函数Void run() /主函数通过调用以上函数控制整个电梯工作Void flag() /接受输入信号改变各种标志信号Void time() interrupt 1 using 1/中断服务程序 三、 调试过程1、51 单片机外围电路检测与电路调试2、硬件仿真、程序仿真3、程序结合硬件仿真四、实物五、结论电梯控制器完成系统功能电梯以同向优先的基础上就近原则配以数码管及LED 为电梯楼层指示。六、总结基于团队的水平有限虽然电梯控制器基本达到要求规定但对于程序用 C 基于 51 单片机电梯控制器设计语言书写程序段较长需改进或者尝试用其他简单实用的语言书写。 最后感谢邓老师对我们的悉心指导
4、。2010-3张晴、张海兵、林锐鹏基于 51 单片机电梯控制器设计附录:源程序#include#define T 10000 /,ms 定时常量宏定义 #define S P1 /上下开关 P1.0-P1.3:上P1.4-P1.7 下#define K1 P0 /电梯内开关 1,2,3 层 #define K2 P2 /电梯内开关 ,层sbit k1=P05; / 楼梯内防抖动标志置, sbit k2=P06;sbit k3=P07; sbit k4=P27; sbit k5=P26;/sbit upled=P30; /sbit downled=P31; char uppriority;cha
5、r downpriority; int up5; /上要求标志 int down5; /下要求标志int in5; /电梯内要求标志 bit uping; /正在上楼bit downing; /正在下楼int f; /防抖动标志 int upf5; /防抖动int downf5; /防抖动int inf5; /防抖动int onfloor;/char t=1;/void start_t2imer() / void delay(int time) /延时int i; while(time)for(i=15;i0;i-); time-;void sbuf1(int n,int m) int i;P
6、0=n;基于 51 单片机电梯控制器设计for(i=0;i4;i+) SBUF=m;delay(1);void print(int floor) /显示当前楼层 switch(floor)case 0:/ P0=0Xe1;/ P2=0xe7; sbuf1(0Xe1,18);/ P3=P3|0x80; break;case 1:/ P0=0xe2;/ P2=0xc9; sbuf1(0xe2,103);/ P3=P3&0x7f; break;case 2:/ P0=0xe4;/ P2=0xc3; sbuf1(0xe4,118);/ P3=P3&0x7f; break;case 3:/ P0=0xe
7、8;/ P2=0xe6; sbuf1(0xe8,210);/ P3=P3&0x7f;break; case 4: ;/ P0=0xf0;/ P2=0xd2; sbuf1(0xf0,244);/ P3=P3&0x7f; /当前楼层void initial()int i;基于 51 单片机电梯控制器设计/ P0=0xe1;/ P2=0xe7;/ SBUF=0X12; / delay(1); P0=0xe1;print(0); / P3=0xff; for(i=0;i5;i+) /所有标志清零upi=0; downi=0; upfi=0; downfi=0; ini=0;infi=0;upprior
8、ity=0; downpriority=0; onfloor=0; uping=0; downing=0;f=0;/*void clear() /标志清零/ upled=1;/ downled=1;/ P0=P0|(0x1f);/ P2=P2&.*/void open() /电梯门开 delay(10000);void close() /电梯门关 delay(10000);/*void toup() /电梯上开关 void todown() /电梯下开关 void stop() /电梯停基于 51 单片机电梯控制器设计*/void run()int i;if(uping) /在上楼中/ P3=
9、P3|0x02;delay(10000); /电梯运行,单位时间onfloor+;print(onfloor); /数码管及指示灯显示到达所在楼层if(uponfloor|inonfloor) /若此楼有上楼要求/ stop(); /电梯停open(); /开门inonfloor=0; /该楼楼梯内要求清零close(); /关门for(i=onfloor+1;i=0;i-) if(upi|downi|ini)break; if(i=0) /楼下有要求/ todown(); /电梯下downing=1; /下楼/ downled=0; downonfloor=0; /下要求清零elseif(d
10、ownonfloor)downpriority=1;基于 51 单片机电梯控制器设计/ downled=0; downonfloor=0;/ else/ clear(); /清除显示elseuponfloor=0;/ toup(); /电梯上elsefor(i=onfloor+1;i=0;i-)if(upi|downi|ini)break;if(i=0) /楼下有要求downing=1;/ todown(); /电梯下elsedownpriority=1; /下优先else基于 51 单片机电梯控制器设计if(downing) /在上楼中/ P3=P3|0x02;delay(10000); /
11、电梯运行,单位时间onfloor-;print(onfloor); /数码管及指示灯显示到达所在楼层if(downonfloor|inonfloor) /若此楼有下楼要求/ stop(); /电梯停open(); /开门inonfloor=0; /该楼楼梯内要求清零close(); /关门for(i=onfloor-1;i=0;i-) if(upi|downi|ini)break; if(i0) /楼下无上下楼要求downing=0; /不继续下楼if(downonfloor)downpriority=1; /下优先downonfloor=0; /该楼下楼要求清零else/ downled=1
12、; for(i=onfloor+1;i5;i+) if(upi|downi|ini)break;if(i=0;i-) if(upi|downi|ini)break; if(i0) /楼下无要求/ stop(); downing=0;/ downled=1; open(); /开门uponfloor=0;/ upled=0; close(); /关门for(i=onfloor+1;i5;i+) if(upi|downi|ini)break; if(i5) /楼上有要求/ toup(); /电梯上uping=1;elseuppriority=1; /下优先elseif(!uping&!downin
13、g) /电梯不在工作中if(uppriority)delay(20);uppriority=0; /取消上优先for(i=onfloor+1;i5;i+)if(upi|downi|ini)break;if(i=0;i-)if(upi|downi|ini)break;if(i=5)/ todown(); downing=1; /下楼else/ downled=1;elseif(!(uppriority|downpriority)if(uponfloor|downonfloor)if(uponfloor)/ upled=0; open(); uppriority=1; uponfloor=0; c
14、lose();else基于 51 单片机电梯控制器设计if(downonfloor)/ downled=0; open(); downpriority=1; downonfloor=0; close();elseinonfloor=0; for(i=0;i5;i+)if(upi|downi|ini)break;if(i5)if(ionfloor)uping=1;/ upled=0;main()initial();TMOD = 0X01; /设置定时器,工作模式EA=1; /中断使能ET0=1;TR0=1;while(1)run(); /电梯工作基于 51 单片机电梯控制器设计void flag
15、()int i;unsigned char S1=S0xff; /信号转为高电平有效char t=0x01;switch(f)case 0: for(i=0;i4;i+)/ upfi=1; if(S1&t)upfi=1; t*=2;for(i=1;i5;i+)/ downfi=1; if(S1&t)downfi=1; t*=2;if(!k1)inf0=1; / 楼梯内防抖动标志置, if(!k2)inf1=1;if(!k3)inf2=1;if(!k4)inf3=1;if(!k5)inf4=1; f=1;break; case 1:for(i=0;i4;i+)if(S1&t&upfi)upi=1; t*=2;for(i=1;i5;i+)if(S1&t&downfi)downi=1; t*=2;if(!k1&inf0)in0=1; / 楼梯内标志置,if(!k2&inf1)in1=1;if(!k3&inf2)in2=1;if(!k4&inf3)in3=1;if(!k5&inf4)in4=1; f=0;基于 51 单片机电梯控制器设计for(i=0;i5;i+) /所有标志清零upfi=0; downfi=0;void time0()interrupt 1 using 1 TH0=-T/256;TL0=-T%256;flag(); /查看输入/ run();/ TR0=0;
限制150内