单片机的电梯控制设计.docx
- 文档编号:11656070
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:12
- 大小:108.49KB
单片机的电梯控制设计.docx
《单片机的电梯控制设计.docx》由会员分享,可在线阅读,更多相关《单片机的电梯控制设计.docx(12页珍藏版)》请在冰豆网上搜索。
单片机的电梯控制设计
Documentnumber:
PBGCG-0857-BTDO-0089-PTT1998
单片机的电梯控制设计
单片机原理及系统课程设计
评语:
考勤(10分)
守纪(10分)
过程(30分)
设计报告(30分)
答辩(20分)
总成绩(100分)
专业:
自动化
班级:
动1101
姓名:
孙海文
学号:
7
指导教师:
赵峰
兰州交通大学自动化与电气工程学院
2014年1月15日
1设计任务及要求
设计题目
基于单片机的三层电梯控制模型的设计
设计具体要求
(1)用户可通过按键发出请求;
(2)可显示电梯所在楼层;
(3)满足用户升降要求;
(4)显示电梯升降超重状态;
2所用器件原理介绍
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP的可反复擦写1000次的Flash只读程序存储器。
AT89C51是低功耗、高性能的CMOS型8位单片机。
片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。
片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等,完全满足该课题的需要。
3系统设计
本系统以AT89C51单片机的电梯自动控制系统为核心,有硬件设计,软件设计,软件调试等几个部分。
数码管显示实时楼层,单片机通过扫描按键指示灯来读取请求,根据所在楼层的不同,进行不同的分析、调度,然后做出正确的响应,更新状态并在指示灯和数码管上显示出来,还有报警器的设计,上下呼叫指示灯的部分组成。
总体设计框图如图1所示。
图1总体设计框图
硬件设计
(1)AT89C51接口
由单片机的P0口控制数码管的位码,P1口控制数据的读取,P2口控制电机运行状态、电梯运行状态和蜂鸣器状态。
(2)按键控制图
为了节省单片机的接口,故选用行列键盘矩阵,本电路初始按键一端都加低电平,有按键按下时,电路导通给输入口P1输入低电平信号,然后根据按键不同功能实现电梯的控制。
按键控制电路如图2所示。
图2按键控制图
(3)LED指示灯
在本次设计中电机正反转用两个发光管来表示,用单片机的P1口做输入口来输入,其中L1亮表示电机正转电梯向上运行,L2亮表示电机反转电梯向下运行,L3亮表示超重。
当电梯超重时,单片机产生低电平由P25口输出,同时由P17,P37口输出高电平,以此控制LED指示灯。
LED指示灯如图3所示。
图3LED指示灯
(4)数码管显示
数显管的基本功能是具备显示当前电梯的层数。
采用共阳极接法,把二极管的阳极连接到一起构成共阳极,使用时公共阳极接+5V。
这样阴极段端输入低电平的段发光二极管导通点亮,而输入高电平不点亮。
因为P0口没有上拉电阻所以不能输出高电平,所以要接上拉电阻,排阻就是好多电阻连接一起,有一个公共端输入高电平,因为采用共阳极接法,所以采用上拉。
数码管显示电路如图4所示。
图4数码管显示
(5)蜂鸣器
对于电梯超重问题的提示报警选用蜂鸣器,P25口输出信号,为了使蜂鸣器有较大的声音,给它加一个三极管放大,使其增大脉冲电流信号。
蜂鸣器电路图如图5所示。
图5蜂鸣器
软件设计
(1)程序流程图
软件设计思想:
采用模块化的设计方法,不同功能由不同子程序实现。
由于本设计采用单片机实现控制,其中主程序部分完成了系统初始化,定时器的工作方式,中断产生,延时等。
电梯的整个软件设计包括以下几个部分:
电梯逻辑控制模块、电梯运行模块、电机启动模块、电机正反转模块、楼层数显模块、键盘按键输入模块、指示灯模块、超重报警器模块。
程序流程图如图6所示。
图6主程序流程图
软件设计源程序如附录2所示。
4软件编译调试
在软件调试中,采用keil仿真软件进行程序调试。
首先分别调试各个功能程序,再对整个程序进行调试,以便修改错误码。
首先在keil软件中选择AT89C51作为CPU,新建一个.c文件,将各个功能程序录入,先检查程序有无明显错误,保存过后编译程序,当有错误时就根据提示加以修改,当各个功能程序编译完成后,再对整个程序全速执行,查看程序有哪些地方出现错误,对应错误提示逐步调整程序,纠正错误直到程序正确无误。
分析实际生活中的电梯运行情况,总结电梯运行规律及原则。
电梯在扫描到请求后,到底是否立即响应、何时响应,总是遵循“顺路”的原则,若请求的运动方向与电梯现行方向相同且在该方向上继续运行即可响应该请求,则“顺路”响应。
5硬件仿真
硬件仿真使用的是Proteus模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件.)。
然后右键AT89C51再左键,出现“EditComponet”,在ProgramFile中单击出现文件浏览对话框,找到文件,单击确定.完成添加文件,单击OK退出。
单击仿真按钮,系统开始工作,通过按键,电梯都能完成请求,基本实现了电梯运行的模拟。
首先利用Proteus中的器件库完成电路的连接,如附录1所示。
6设计总结
本次课程设计主要是对单片机控制的实践,经过这一实践,让我更对单片机的工作原理、功能、应用及其常见的外围电路都有了更进一步的理解和切身的体会。
无论是查资料、分析课题、设计电路、调试电路、设计软件、调试程序还是系统调试,每一步都认真的去学习,把理论知识应用到实践中,动手能力得到很大提高。
本次课设过程中遇到了很多问题,如数码管和按键模块的电阻阻值设置不合理,分析课题时没有抓准电梯运行的规律、原则导致程序设计的不完善,写条件语句时考虑不全面等等。
这些问题不但使我深深的感到对原理知识理解、运用的缺乏,还让我体会到了许多理论与实际的差距。
在解决这些问题的过程中,让我懂得了在面对不同的故障现象时,如何找出故障原因及排除故障的方法,充分锻炼了分析、解决问题的能力。
参考文献
[1]王思明,张金敏,张鑫等.单片机原理及应用系统设计[M].北京:
北京科学出版社,2012.
[2]李超青.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,1999.
[3]何立民.单片机应用系统设计[M].北京:
北京航空航天大学出版社,1990.
附录1:
Proteus电路的连接图
附图1Proteus电路的连接图
附录2:
电梯源程序
#include<>
#include<>
#defineuintunsignedint//预定义
#defineucharunsignedchar
ucharcodeLED_CODES[]={0xc0,0xf9,0xa4,0xb0};//字形代表码0-3
sbitweight=P2^7;//超重信号
sbitF3D=P1^0;//3楼向下按钮
sbitF1U=P1^1;//1楼向上按钮
sbitF2D=P1^2;//2楼向下按钮
sbitF2U=P1^3;//2楼向上按钮
sbitF1=P1^4;//电梯内1楼
sbitF2=P1^5;//电梯内2楼
sbitF3=P1^6;//电梯内3楼
sbitledu=P3^7;//上行指示灯
sbitledd=P1^7;//下行指示灯
sbitledw=P2^6;//超重指示灯
sbitbeep=P2^5;//超重报警
sbitINA=P2^0;//电机信号1
sbitINB=P2^1;//电机信号2
ucharnf=1;//当前楼层
ucharcf;//呼叫楼层
uchardf;//要去楼层
ucharf1,f2;//楼层差(电梯停止依据):
f1=|cf-nf|;f2=|df-nf|
uchart1,t2;//暂存当前楼层(显示码指针):
t1=nf;t2=nf
ucharflag;//呼叫flag=0,乘电梯flag=1
uchardir;//电机方向1-正转,0-反转
uintMA;//脉冲频率
uintSpeed=25;//50%占空比,脉冲宽度占电机周期比
//X*1MS延时函数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
//定时器初始化
voidTimer_Init()
{
TH0=0xEC;
TL0=0x78;
TMOD=0x01;
ET0=1;
EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
}
//电机运行及指示灯函数
voidstep(uchardir)//电机启动
{
if(dir==1)
{
TR0=1;//开定时器,启动电机
ledu=0;//正反转指示灯
ledd=1;
}
elseif(dir==0)
{
TR0=1;//开定时器,启动电机
ledd=0;
ledu=1;
}
elseif(dir==2)
TR0=0;
delay(50);//延时稳定电机
}
//乘坐电梯运行,flag=1为该运行方式标记
//置乘坐运行标记;置目的楼层;若当前电梯正在1楼则不动作;
//计算当前电梯距目标楼层的层数;置电机转向;暂存当前楼层;
//修改当前楼层为目的楼层;电梯运转;
voidFloors()//电梯内部呼叫
{
if(F1==0)
{flag=1;df=1;if(df==nf)return;f2=abs(df-nf);dir=0;t2=nf;nf=df;step(dir);delay(5000);}
elseif(F2==0)
{flag=1;df=2;if(df==nf)return;f2=abs(df-nf);if(df>nf)dir=1;elsedir=0;t2=nf;nf=df;step(dir);delay(5000);}
elseif(F3==0)
{flag=1;df=3;if(df==nf)return;f2=abs(df-nf);dir=1;t2=nf;nf=df;step(dir);delay(5000);}
dir=2;
delay(50);
}
//呼叫电梯运行,flag=0为该运行方式标记
//同乘坐电梯运行
voidCalls()//电梯外部呼叫
{
if(F3D==0)
{flag=0;cf=3;if(cf==nf)return;f1=abs(cf-nf);dir=1;t1=nf;nf=cf;step(dir);delay(5000);}
elseif(F1U==0)
{flag=0;cf=1;if(cf==nf)return;f1=abs(cf-nf);dir=0;t1=nf;nf=cf;step(dir);delay(5000);}
elseif(F2D==0)
{flag=0;cf=2;if(cf==nf)return;f1=abs(cf-nf);if(cf>nf)dir=1;elsedir=0;t1=nf;nf=cf;step(dir);delay(5000);}
elseif(F2U==0)
{flag=0;cf=2;if(cf==nf)return;f1=abs(cf-nf);if(cf>nf)dir=1;elsedir=0;t1=nf;nf=cf;step(dir);delay(5000);}
dir=2;//停止电机
delay(50);
}
voidmain()//主函数,LED数显管显示
{
Timer_Init();//定时器初始化
P0=LED_CODES[1];//启动时电梯在1楼,显示楼号
while
(1)
{
P0=LED_CODES[nf];
Calls();//呼叫电梯
Floors();//乘坐电梯
while
(1)//超重检测
{
if(weight==0)
{beep=~beep;ledw=~ledw;ledu=1;ledd=1;delay(150);}
else
{beep=1;ledw=1;break;}//检查是否超重,指示灯闪烁
}
}
}
voidtime0_int()interrupt1//定时中断,脉冲宽度调制,产生脉冲
{
TH0=0xEC;
TL0=0x78;
MA++;
if(MA { if(dir==1) INA=0; elseif(dir==0) INB=1; elseif(dir==2) INA=1; } else { if(dir==1) INA=1; elseif(dir==0) INB=0; elseif(dir==2) INB=1; } if(MA>=50) MA=0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电梯 控制 设计