基于单片机三层电梯系统设计毕业论文.docx
《基于单片机三层电梯系统设计毕业论文.docx》由会员分享,可在线阅读,更多相关《基于单片机三层电梯系统设计毕业论文.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机三层电梯系统设计毕业论文
基于单片机三层电梯系统设计
【摘要】本设计是以STC89C52单片机为核心的三层电梯模拟控制系统。
硬件部分主要由单片机最小系统模块、电梯内外电路按键矩阵模拟检测模块、楼层显示数码管模块、电梯上下行显示模块等4部分组成。
软件部分使用C语言,利用查询方式来检测用户请求的按键信息,根据电梯运行到相应楼层时,模拟按键引起电平变化,送到单片机计数来确定楼层数,并送到数码管进行显示。
利用单片机设计电梯控制系统,具有成本低、通用性强、灵活性大及易于实现复杂控制等优点。
【关键词】STC89C52电梯系统数码显示控制
1前言
随着我国城市化进程的日益加快,电梯已经融入了我们的生活,电梯被应用于宾馆、饭店、办公大楼、商场、娱乐场所、仓库以及居民住宅大楼等。
因为电梯的高效、方便、快捷,所以电梯受到了大家的热烈欢迎。
电梯的应用将会不断拓展,款式将各种各样,目的就是为了满足人们的多种多样的需求。
电梯将是现代人不可或缺的代步工具,随着科技的不断进步,经济的深入发展,科技将引领电梯进行质的飞跃,电梯将越来越智能,越来越安全稳定。
2总体设计方案
设计任务
设计一个基于STC89C52单片机的三层电梯系统。
以单片机作为控制核心,根据电梯运行到相应楼层时,模拟按键引起电平变化,送到单片机计数来确定楼层数,控制电机转动,并送到数码管进行显示。
硬件设计简单可靠,结合软件,基本实现电梯运行的模拟。
设计要求
(1)每层电梯入口处都有上下请求按扭,电梯内设有乘客到达楼层的请求开关;
(2)设有电梯所处位置指示装置以及电梯运行模式(升降或下降)指示装置;
(3)上一层楼的时间和等待时间为4秒,延时时间为1秒;
(4)能记忆电梯内外的所有请求信号,并按照电梯运行规则次序响应,每个信号保留至执行后清除;
(5)电梯初始状态为1楼等待。
总体方案的论证与选择
方案一:
多片单片机控制方案。
这种方案是使用多片单片机,其中一片是作为主控制器。
每层的控制系统分别由一个单片机控制,然后通过主控制器和副控制器之间的通讯,实现电梯系统的控制。
其总体框图如图。
图方案一总体框图
方案二:
一片单片机为主控制器的方案。
本设计是采用一片单片机控制所有的按键、数码管、电机、蜂鸣器等,并对以上所有信号进行处理。
其总体框图如图。
图方案二总体框图
通过比较可知道,方案一的控制系统结构虽然简单明了,各个系统之间相互独立也便于维护和修检,但是适用于多层电梯系统,并且此系统使用多片单片机联调相对方案二来说比较复杂。
而方案二的控制系统适用于较简单的电梯控制系统,因为这次设计的内容是3层电梯控制系统,所以选用方案二。
3系统硬件电路设计
单片机最小系统设计
STC89C52是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
其最小系统如图。
图STC89C52单片机最小系统
SCT89C52的主要特性
1,增强型8051单片机;
2,工作频率范围为0-40MHz;
3,32个双向I/O口;
4,3个16位定时/计数器;
5,外部中断4路,下降沿中断或低电平触发电路
6,低功耗空闲和掉电模式。
STC89C52的引脚功能
P0口:
P0口是漏极开路的8位并行双向I/O口,也是地址/数据总线复用口。
作为输出端口时,每个引脚能能驱动8个TTL负载;在访问外部数据存储器或程序存储器时,P0口也可以提供低8位地址和8位数据的复用总线;在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节。
校验时,要求外接上拉电阻。
P1口:
P1口是具有内部上拉电阻的8位双向并行I/O口。
P1口的输出缓冲器可驱动(吸收或输出电流)4个TTL输入。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
P1口作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
P2口:
P2口是具有内部上拉电阻的8位双向并行I/O口。
P2的输出缓冲器可驱动(吸收或输出电流)4个TTL输入。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
P3口:
P3口是具有内部上拉电阻的8位双向并行I/O口。
P3口输出缓冲器可驱动(吸收或输出电流)4个TTL输入。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能。
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
RST是复位信号输入引脚。
晶振工作时,如果在此引脚上持续出现至少两个机器(晶振的12个振荡周期为一个机器周期)的高电平就会使单片机复位。
XTAL1和XTAL2:
XTAL1和XTAL2是片内振荡器输入/输出引脚。
XTAL1是反向振荡放大器的输入及内部时钟工作电路的输入引脚,XTAL2是来自反向振荡器的输出。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号。
ALE/PROG:
ALE/PROG是地址锁存允许/编程引脚。
EA/Vpp:
外部访问允许。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
显示电路设计
如图。
此模块采用数码管显示电梯所到的目标楼层,以及上行下行状态,上行显示为“E”,下行显示为“F”。
此模块虽功耗大,但其软件驱动简单,硬件电路调试方便,价格便宜,亮度大,能满足本设计的要求。
图楼层显示模块
如图。
LED显示运行情况。
当电梯运行时,LED灯亮;到达目标楼层,LED灯灭。
图LED显示模块
声音提示模块
如图。
此模块采用蜂鸣提示音提示。
电梯运行前,有超重、故障、紧急情况时,蜂鸣器有警报声;到达目标楼层时,蜂鸣器有短提示音。
其软件驱动、硬件电路调试非常简洁方便,而且价格便宜,能满足本设计的要求。
图声音提示模块
按键模块
如图。
按键的输入引起电平变化,通过单片机控制数码管显示,电梯上下行。
图按键模块
电机模块
如图所示,当电梯需要上下行,电机转动,同时LED灯亮。
图电机模块
系统总电路原理图
基于单片机的三层电梯系统原理图如图。
主要用于绘制PCB电路印刷板。
图系统原理图
系统PCB图
如图为系统PCB图。
图系统PCB图
4系统程序设计
系统总体设计程序流程图如图。
图程序流程图
系统子程序流程图如图。
图子程序流程图
5系统调试
软件调试
Keil软件的简介
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
Proteus软件的简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
软件调试结果
系统软件调试成功是硬件实现的关键,在软件上编译调试程序是开发的第一步也是不可缺少的一部。
仿真采用Proteus软件,Proteus软件能完成原理图布图、代码调试到单片机与外围电路协同仿真。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前最好的仿真单片机及外围器件的工具。
系统仿真图如图。
图仿真图
如图为电梯从3楼到1楼的情况。
图从上向下运行时仿真图
如图为电梯从1楼到2楼的情况。
图电梯从1楼到2楼
系统硬件制作与调试
1,对课题要求做出分析,列出所需模块有单片机最小系统、指示灯模块、按键电路、数码管显示电路;
2,划分好系统模块后,根据实际情况确定各个模块的实现方式,为各模块分配I/O口,由此确定系统的大概结构。
本设计中,由于系统硬件较简单,直接用各个I/O口控制各个模块,而无需经地址译码。
其中,P0口给数码管送段选码,和P1口控制电梯内外指示灯,P2口接按键;
3,根据实际情况,确定各个模块的实现方式,进而确定系统的详细参数。
本系中所需按键较多故采用矩阵键盘,P0口无内部上拉电阻,故应在外部加上,此外,为使数码管足够量,用一个三极管进行驱动。
4,运用DXP软件绘制原理图、PCB图并手动布线。
绘制原理图的过程中,要注意选择合适的元件封装。
在进行布线时不但要考虑电路的稳定、安全,还要考虑其美观、以及调试的方便,布线过程中要细心以免造成断路或短路;
5,打印PCB图、熨烫、腐蚀、打孔、焊接、检查线路,腐蚀电路板时应注意把握度,以免腐蚀过度,打孔、焊接、检查电路时应细心以保证电路板的质量。
焊接的实物图如图。
图实物图
如图为电梯从1楼到2楼的情况。
此时电梯为上升状态,黄色LED灯亮,同时电机转动,数码管显示下降状态“E”以及目标楼层2,到达后,黄色LED灯灭,电机停止转动,蜂鸣器提示到达目标楼层。
图电梯从1楼到2楼
如图为电梯从2楼到3楼的情况。
此时电梯为上升状态,黄色LED灯亮,同时电机转动,数码管显示上升状态“E”以及目标楼层3,到达后,黄色LED灯灭,电机停止转动,蜂鸣器提示到达目标楼层。
图电梯从2楼到3楼
调试方案和步骤
1,先对电路板进行目测,看电路是否有无断点或短路点。
若有就用电烙铁进行焊接。
如果怀疑某点是断路点或短路点,就用万用表的蜂鸣器测试电路,电路通则蜂鸣器响,不通则不响。
2,在用万用表的蜂鸣器测试所有电路,特别是电源线和地线,确保电路正常通路。
3,确保无误后,连接电源。
4,对各个模块进行检测,首先单片机上电后,各个I/O口一般为高电平,可用万用表检测验证,此时指示灯、数码管所有段应全亮,可观察指示灯和数码管是否正常亮,若不够亮或不亮,可能是电流不够,可检测相关节点电压以分析原因并解决。
另外,可烧入一简单的拉低所有I/O口电平的程序,看是否有相应的变化。
5,烧入一简单的程序,拉低键盘行线电平,列线保持高电平,按下按键,
用万用表检测按下后按键所在列线电平是否变低,若变低则正常,否则,不
正常,应检测相关节点的电平,以分析故障原因并解决。
6设计总结
电路设计总结
本系统的硬件结构简明、清晰,但在调试过程中还是发现很多的问题,分析这些问题后发现,电路设计、制作过程中需注意很多问题。
首先,在划分系统模块、确定各模块实现的电路形式时,不但要考虑控制芯片的控制I/O口个数、特点,还应根据系统运行时的环境和具体情况来选择与之最合适的电路形式和元件;其次,在设计过程的每一步时,都应该考虑如何设置才能便于后续的工作及最终的调试和操作;此外,在确定各个模块的电路后,应对电路某些关键的参数进行分析,结合实际与理想的区别,进行合理的设置。
软件设计总结
本系统设计的关键和难点就是电梯动作的调度程序,正因如此,在设计和调试程序的过程中,获益匪浅。
首先,在对设计所要模拟、实现的内容分析时,不但要全面考虑各种情况,而且,还要准确的把握这些不同情况的规律以及所遵循的统一原则,如本电梯控制模型设计中就应该考虑到不同情况下对相同请求的响应的差别、相同情况下对不同请求响应的区别,而且,要从中找出其“顺路”的请求先响应的原则、规律;
其次,编写程序代码时,要养成良好的编程习惯,有好的设计风格,关键性语句加注释,使程序可读性强,也便于后续的查错、调试;再者,在写到条件、循环语句时,要考虑全面,以免逻辑错误或死循环;此外,对于用到的状态变量和控制变量,应进行初始化,以免默认的初始化值与预想的不一致。
本系统设计是用单片机实现电梯运行控制功能。
系统采用单片机AT89C52、数码管按键等等元器件,实现了设计所要求的全部功能,系统不足之处是由于元器件的原因及个人水平有限,某些功能模块存在不足,需加以改正。
通过这次毕业设计,使我加深了对旧知识的巩固和增强了对新知识的了解,使我得到了一次利用专业知识,专业技能分析、处理和解决问题的能力,使加强了对单片机的的原理、应用、开发等方面的掌握,为日后的工作学习打下了结实的基础。
最后,我要向所有为我提供过帮助的人致谢。
真诚的感谢导师及同学们的关心和指导。
[参考文献]
[1]李朝青.单片机通讯技术与工程实践[M].北京:
航空航天大学出版,
[2]李群芳.单片机原理接口与应用[M].北京:
清华大学出版社,
[3]杨志亮.Protel99SE电路原理图设计技术[M].西安:
西北工业大学出版社,
[4]马忠梅.单片机C语言应用程序设计[M].北京:
航空航天大学出版社,
[5]谢自美.电子线路设计[M].武汉:
华中科技大学出版社,
[6]胡烨.Protel99SE电路设计与仿真教程[M].北京:
机械工业出版社,
[7]谭浩强著,C程序设计第三版[M].华大学出版社,
[8]刘柏私,谢开贵,马春雷,等.复杂中压配电网的可靠性评估分块算法[J].中国电机工程学报,2005,25期(4页)
[9]周念成,谢开贵,周家启,等.基于最短路的复杂配电网可靠性评估分块算法[J].电力系统自动化,2005,29期(22页)
layerelevatorsystem
[Abstract]ThedesignisbasedontheSTC89C52single-chipmicrocomputerasthecoreofthethreelayerelevatorsimulationcontrolsystem.Thehardwaremainlycomprisesthesmallestsingle-chipsystemmodule,insideandoutsidetheelevatorcircuitkeymatrixsimulationdetectionmodule,digitaltubedisplayfloormodule,theelevatordowndisplaymoduleiscomposedof4parts.ThesoftwarepartoftheuseofClanguage,usingquerymodetodetectuserrequeststhekeyinformation,accordingtotheoperationoftheelevatortotheappropriatefloor,analogkeycausechangesinlevel,totheSCMcounttodeterminethenumberoffloors,andsenttothedigitaltubedisplay.Theuseofsingle-chipdesignofelevatorcontrolsystem,andhastheadvantagesoflowcost,strongversatility,flexibilityandeaseoflargecomplexcontroladvantages.
[Keywords]STC89C52elevatorsystemdigitaldisplaycontrol
附录1
以下为程序清单:
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
unsignedintn,mb;
uintData;
uchary;
ucharflag;
intnum;
intq;
charlou;
sbitLED=P2^3;
sbitbeep=P2^2;
//sbitIR1=P3^4;
//sbitIR2=P3^3;
ucharbai,shi,ge;
sbitqianwei=P2^7;
sbitbaiwei=P2^6;
sbitshiwei=P2^5;
sbitgewei=P2^4;
ucharTB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};//显示段码
voiddelay1(uchara)//数码管显示部分延时函数
{
unsignedinti;
while(--a!
=0)
{
for(i=0;i<100;i++);//一个;表示空语句,CPU空转。
}//i从0加到125,CPU大概就耗时1毫秒
}
voidxianshi(charyy,charxx,inttt)//数码管显示函数,能够显示任意4位十进制数
{
if(yy==0)
{
qianwei=0;
P0=0X40;//01110001F停止
delay1(5);
qianwei=1;
}
if(yy==1)
{
qianwei=0;
P0=0X71;//01110001F上升
delay1(5);
qianwei=1;
}
if(yy==2)
{
qianwei=0;
P0=0X79;//01111001E下降
delay1(5);
qianwei=1;
}
baiwei=0;
P0=TB[xx%10];
delay1(5);
baiwei=1;
shiwei=0;
P0=0x40;
delay1(5);
shiwei=1;
gewei=0;
P0=TB[num];
delay1(5);
gewei=1;
}
/**电梯门外按键定义***/
sbitK1=P1^0;//第三层上请求按键
sbitK2=P1^3;//第三层下请求按键
sbitK3=P1^1;//第二层上请求按键
sbitK4=P1^4;//第二层下请求按键
sbitK5=P1^2;//第一层上请求按键
sbitK6=P1^5;//第一层下请求按键
/**电梯门内按键定义***/
sbitKK1=P1^6;//第三层内选择1楼按键
sbitKK2=P3^1;//第三层内选择2楼按键
sbitKK3=P3^4;//第三层内选择3楼按键,按此键复位num=1
sbitKK4=P3^7;//第三层内选择报警按键
sbitKK5=P1^7;//第二层内选择1楼按键
sbitKK6=P3^2;//第二层内选择3楼按键
sbitKK7=P3^5;//第二层内选择2楼按键,按此键复位num=1
sbitKK8=P2^0;//第二层内选择报警按键
sbitKK9=P3^0;//第一层内选择2楼按键
sbitKK10=P3^3;//第一层内选择3楼按键
sbitKK11=P3^6;//第一层内选择1楼按键,按此键复位num=1
sbitKK12=P2^1;//第一层内选择报警按键
voidqingqiu()
{
if(K1==0)//3上
{
flag=1;lou=num=3;
while(K1==0);
}
if(K2==0)//3下
{
flag=1;lou=num=3;
while(K2==0);
}
if(K3==0)//2上
{
flag=1;lou=num=2;
while(K3==0);
}
if(K4==0)//2下
{
flag=2;lou=num=2;
while(K4==0);
}
if(K5==0)//1上
{
flag=2;lou=num=1;
while(K5==0);
}
if(K6==0)//1下
{
flag=2;lou=num=1;
while(K6==0);
}
if(KK3==0||KK7==0||KK11==0)//复位
{
flag=0;num=lou=1;
while(KK3==0||KK7==0||KK11==0);
}
}
voidBeep()
{uchari;
beep=0;
for(i=0;i<5;i++)
{xianshi(flag,lou,num);}
beep=1;
}
voidBeep1()
{uchari;
beep=0;
for(i=0;i<50;i++)
{xianshi(flag,lou,num);}
beep=1;
}
voidbaojing()
{
if(KK8==KK12==KK4==0)
{
Beep();
}
}
voidxuanzhe()//选择要到那一层去
{
if(lou==1)//如果当前在第一层
{
if(KK9==0)//到2楼
{
num=lou=2;
while(KK9==0)
{
LED=0;for(q=0;q<500;q++){xianshi(1,lou,num);}
Beep1();
LED=1;
}