资源描述
单片机原理与应用技术
课程设计报告(论文)
题目 基于单片机控制电梯控制器
专业班级: 电气123班
姓 名: 桑广涛
时 间: -11-24----12-8
指引教师: 孔晓红
年 12 月 8 日
电梯控制器课程设计任务书
1.设计目与规定
1.1 基本功能
(1)显示:本设计规定实现6层控制,实时显示电梯所在楼层位置。
(2)升降控制:采用一台电动机正反转来实现电梯升降。
(3)具备不可逆响应功能:
电梯上升途中只响应上升呼喊,下降途中只响应下降呼喊,任何反方向呼喊均无效。
1.2 扩展功能
(1)可增长人性化按键语音服务功能。
(2)可增长遥控或感应操作功能。
2.设计内容
(1)画出电路原理图,对的使用逻辑关系;
(2)拟定元器件及元件参数;
(3)进行电路模仿仿真;
(4)SCH文献生成与打印输出;
3.编写设计报告
写出设计全过程,附上关于资料和图纸,有心得体会。
4.答辩
在规定期间内,完毕论述并回答问题。
目录
1 引言 3
2 总体设计方案 3
2.1 设计思路 3
2.2 总体设计框图 3
3 电梯控制系统原理分析 4
3.1 控制电路设计 4
3.1.1 电梯内部呼喊电路和电机状态显示电路 4
3.1.2 电梯外部呼喊电路 5
3.1.3 电机控制电路 5
3.2 楼层显示电路 5
3.3 单片机最小系统设计 6
4 程序流程图 6
5 总结与体会 7
参照文献 8
附录一:电路总原理图 9
附录二:PCB板 10
附录三:程序清单 11
题目 基于单片机控制电梯控制器
班级姓名 电气123 桑广涛
摘要:随着经济高速发展,微电子技术,自动控制技术同样得到了迅速发展,电梯开始成为人们生活中一种重要交通工具,本设计选取AT89C52为核心控制元件,通过各个独立单元设立,设计一种六层电梯控制系统,通过控制电机正反转,进而实现电梯升降,实验中运用两个二极管来代替电机,通过二极管亮灭来判断电梯运营状态,对于程序则使用C语言进行编程,实现运送乘客到任意楼层,并且实时显示电梯楼层和电梯上下状况。实际生活中单片机具备成本低,通用性强,灵活性大以及易于实现复杂控制等长处。因而得以被广泛应用于咱们寻常生活之中。
核心词:AT89C52 LED显示 电机正反转控制 楼层显示
1 引言
随着人们生活水平不断提高和国民经济迅速发展。各大都市建筑物在不断向高层化发展。因而电梯在咱们生活中起着举足轻重作用。电梯已不但是一种生产环节中重要设备,更是一种人们生活中重要交通运送设备。因而电梯控制技术也在不断进步和完善,惯用控制技术重要有两种技术:基于PLC控制和基于单片机控制两大技术。用PLC控制电梯性能可靠、稳定,但是造价太高;基于单片机控制电梯可以大大减少成本并且运营也较可靠,因此当前电梯控制中大多数采用单片机控制。
当前大型楼宇电梯自动控制系统普通是基于PLC,但是在某些干扰较少、层数较少、控制精度规定不高、且人员不乘状况下,使用单片机是十分适合,虽然它抗干扰及稳定性上比不上PLC,但是它价格、体积及灵活性是PLC比不上。
本文基于单片机89SC51来控制各某些电路,采用单片机构成控制系统,可大大减少成本,并且做成专用控制系统,程序被固化,加强了保密性,提高了可靠性。
2 总体设计方案
2.1 设计思路
本次设计基本思想是采用AT89C52单片机作为核心,依照输出信号来控制电路整体运营,同步运用其丰富I/O接口与外围电路配合进行控制。采用LED静态显示来实时显示电梯所在楼层,并用74LS245来驱动LED显示。采用行列式键盘矩阵作为外呼内选电路,采用定期器延时来控制电梯位置校验,当电梯到达目楼层时电机停止运营,此时即可进、出乘客,乘客进入电梯之后可选取去哪一层,然后电梯依照乘客选取判断去哪一层,继续运营。通过单片机控制电梯,在上升过程中只响应上升呼喊,下降过程中只响应下降呼喊,只响应同方向呼喊,反方向呼喊无效。
2.2 总体设计框图
此电路方框图如图1所示,电路由键盘电路、单片机最小系统电路、楼层显示电路、电机状态显示电路、电机控制电路5某些构成。其中单片机最小系统重要由复位电路和时钟电路构成。电路复位后楼层显示数字1 表达电梯此时在一楼,显示电路通过74ls164串入并出驱动8位数码管显示,如有操作者在厢外呼喊,由外呼喊电路把信号输入单片机,当车厢来到呼喊层(由定期器定期电路判断,电机控制电路控制电机正反转),则打开电梯门,人进入后关门。操作者通过选层电路把目层告知单片机,控制电机把操作者送到目楼层。系统等待下次呼喊。系统正常工作由时钟电路来保证。显示电路实时显示电梯所在楼层位置,每层之间通过8秒延时控制即每延时8秒表达电梯走了一层。电梯状态是通过两个发光管显示,绿灯亮表达电梯在向上运营,黄灯亮表达电梯在向下运营。键盘电路采用独立键盘(共12个按键),其中6个按键是各层楼外呼按键,6个表达电梯内部选取键。电梯正常工作是通过对单片机写入程序控制。总体设计方框图如下所示:
楼层显示电路
AT89C52
时钟电路
电机控制电路
复位电路
键盘电路
电机状态显示
图1.总体设计方框图
3 电梯控制系统原理分析
3.1 控制电路设计
3.1.1 电梯内部呼喊电路和电机状态显示电路
电梯设计原理是通过对按键控制,从而显示相应楼层,把人送到自己想去楼层,而按键控制分为内部按键和外部按键,一某些是电梯外部人对电梯控制使电梯得到响应,一某些是电梯内部人对其控制使其得到响应,如图2,六个目的楼层选取按键K1、K2、K3、K4、K5、K6与单片机P0口P0.0、P0.1、P0.2、P0.3、P0.4、P0.5连接(P0口作为输出端驱动外部电路时须外接上拉电阻)。电机状态是通过两个发光管显示,绿灯、红灯与单片P1.6、P1.7连接(须外接上拉电阻),用于显示电梯运营状态,人进入电梯内按下要去楼层相应按键,就会控制电机转动,达到相应楼层。
K1:一楼内部向下呼喊按键,此键按下表达电梯中人想去目楼层时1楼,单片机依照此信号控制电梯运营以到达目楼层。
K2:二楼内部呼喊按键,当电梯处在上升状态时,表达此时一楼人想要去二楼;当电梯处在下降状态时,表达此时二楼以上中某个楼层人想要到达二楼,单片机依照此信号控制电梯运营以到达目楼层。
K3:三楼内部呼喊按键,当电梯处在上升状态时,表达此时一楼或者二楼人想要去三楼;当电梯处在下降状态时,表达此时三楼以上中某个楼层人想要到达三楼,单片机依照此信号控制电梯运营以到达目楼层。
K4:四楼内部呼喊按键,当电梯处在上升状态时,表达此时一楼,二楼和三楼人想要去四楼;当电梯处在下降状态时,表达此时五楼和六楼某个楼层人想要到达四楼,单片机依照此信号控制电梯运营以到达目楼层。
K5:五楼内部呼喊按键,当电梯处在上升状态时,表达此时一楼,二楼,三楼和四楼人想要去五楼;当电梯处在下降状态时,表达此时六楼人想要到达五楼,单片机依照此信号控制电梯运营以到达目楼层。
K6:六楼内部向上呼喊按键,此键按下表达电梯中人想去目楼层时六楼,单片机依照此信号控制电梯运营以到达目楼层。
内部电梯呼喊按键如图所示:
图2.电梯内部呼喊电路和电机状态显示电路
3.1.2 电梯外部呼喊电路
电梯外部呼喊电路如图3所示,按键s1out,s2out,s3out,s4out,s5out,分别与单片机p2.4,p2.3,p2.2,p2.1,p2.0口相连,若按下上升键,则电梯在上升过程中只响应上升呼喊,下降按键呼喊无效;反之亦然。
S1out:此按键按下表达此时一楼有人呼喊,想要去以上楼层,单片机依照此信号控制电梯运营以到达目楼层
S2out:此按键按下表达此时二楼有人呼喊,如若二楼向下按键,则表达二楼人想要去一楼;如若二楼向上按键,则表达二楼人想要去二楼以上楼层,单片机依照此信号控制电梯运营以到达目楼层。
S3out:此按键按下表达此时三楼有人呼喊,如若三楼向下按键,则表达三楼人想要去一楼或者二楼;如若三楼向上按键,则表达三楼人想要去三楼以上楼层,单片机依照此信号控制电梯运营以到达目楼层。
S4out:此按键按下表达此时四楼有人呼喊,如若四楼向下按键,则表达四楼人想要向下;如若四楼向上按键,则表达四楼人想要去五楼或者六楼,单片机依照此信号控制电梯运营以到达目楼层。
S5out:此按键按下表达此时五楼有人呼喊,如若五楼向下按键,则表达五楼人想要向下;如若五楼向上按键,则表达五楼人想要六楼,单片机依照此信号控制电梯运营以到达目楼层。
S6out:此按键按下表达此时六楼有人呼喊,表达想去如下楼层,单片机依照此信号控制电梯运营以到达目楼层。
本实验由于某些功能未能实现,在这里只列出了外部六个按键设立。
外部电梯呼喊如图所示:
图3.电梯外部呼喊电路
3.1.3 电机控制电路
电机采用普通直流电机,直流电机具备优良调速特性,调速平滑、以便,调节范畴广;过载能力强,能承受频繁冲击负载,可实现频繁无极迅速启动、制动和反转。用电机驱动芯片L298来驱动。电机控制电路用来控制电机正反转,当按下上升键时,电机正转,按下下降键时,电机反转。电路如图4所示。
图4.电机控制电路
3.2 楼层显示电路
显示电路是依照数码管状态显示进而让咱们懂得电梯此刻状态,本实验中咱们用一种八段数码管来实现,依照数码管数字显示让咱们懂得咱们需要目楼层,咱们用74ls164驱动数码管,其管脚1、2接单片机P3.0口,管脚8接P3.1口,通过3,4,5,10,11,12,13各个口输出状态进而起到对数码管显示控制作用。数码管9,10两个引脚接高电平用于保证数码管工作。
电路如图5所示
图5.显示楼层电路
3.3 单片机最小系统设计
单片机最小系统是控制单片机工作核心某些,用于控制单片机工作和脉冲变化,进而实现对其设计功能实现,而此电路组重要涉及复位电路和时钟电路两某些,其中复位电路采用按键手动复位和上电自动复位组合,电路如图6(左)所示:其中9 脚为单片机复位端,接单片机RST端,通过对按键控制实现电路复位。时钟电路如图6(右)所示,重要由晶振和电容构成,此晶振采用是12MHZ,电容则为30PF,电路XATL2和XATL1端分别与单片机18和19脚相连.
图6.最小系统电路
4 程序流程图
程序流程图是设计核心某些,可以简朴明了反映出设计思路,本实验是基于单片机电梯控制设计,电梯共六层,通过对按键扫描来判断与否有按键按下,从而是单片机响应控制电机转动,图7则为电梯设计流程图。
程序如下图:
调用选取当前要去楼层子程序
停留8s
电梯未运营或仍在运 行之中
电梯已到达相应目层?
是
否
是
否
电梯启动此时显示一楼
图7.程序流程图
5 总结与体会
实习已接近尾声,通过这次实习,让我明白了诸多,也学会了诸多,从最初刚刚拿到课题时茫然,过度到每天都与图书馆打交道,查阅各种资料,将实习中遇到难题各个击破,这其中布满了挑战和艰辛,可是这些都无所谓,由于更多则是咱们克服难题时兴奋和获得知识喜悦,咱们设计为电梯控制,从最初程序编译到电路仿真,以至于最后实物成形,中间不但融汇了咱们对基本知识应用尚有对计算机软件学习,固然期间也遗忘了诸多东西,但是通过与同窗之间讨论和教师悉心指引以及自己细心摸索,总算是完毕了制作,电梯仿真成果功能实现了,可是等到实物出来测试时,并没有实现应有成果,这让我结识到了理论与实际差距,更让我懂得了在此后学习生活中要结识到理论与实际结合重要性,在学习基本理论同步,要注重实际应用,从而把知识学习更加牢固。
参照文献
[1] 刘瑞新.单片机原理及应用教程[M].机械工业出版社, .7
[2] 赵晓安. MCS-51单片机原理及应用. 天津大学出版社,.3
[3] 夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社,
[4] 李朝青.单片机原理及接口技术[M].北京:北京航空航天出版社,.10
[5] 肖洪兵. 跟我学用单片机. 北京:北京航空航天大学出版社,.8
[6] 曹巧媛.单片机原理及应用[M].大连.大连理工大学出版社,1996.5
[7] 叶挺秀.应用电子学[M].杭州:浙江大学出版社,1994
[8] 朱承高.电工及电子技术手册[M].北京:高等教诲出版社,1990
[9] 李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,
[11] 唐俊翟.单片机原理与应用[M].冶金工业出版社, .9
[13] 刘瑞新.单片机原理及应用教程[M].机械工业出版社, .7
[14] 吴国经.单片机应用技术[M].中华人民共和国电力出版社, .1
[15] 何立民.单片机应用系统设计[M].北京航空航天出版社, 1995
附录一:电路总原理图
附录二:PCB板
附录三:程序清单
#include<reg51.h>
#include"电梯.h"
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
sbit k4=P0^3;
sbit k5=P0^4;
sbit k6=P0^5;
sbit LedDown=P0^6;
sbit LedUp=P0^7;
sbit up1=P2^0;
sbit up2=P2^1;
sbit down2=P2^2;
sbit up3=P2^3;
sbit down3=P2^4;
sbit up4=P2^5;
sbit down4=P2^6;
sbit up5=P2^7;
sbit down5=P1^0;
sbit down6=P1^1;
sbit d11=P1^2;
sbit d12=P1^3;
sbit d21=P1^4;
sbit d22=P1^5;
sbit pwm1=P1^6;
sbit pwm2=P1^7;
void DianTiKey();
#define uchar unsigned char
char KeyValueOld; //内部按键上次值
char KeyValueOOld; //外部按键上次值
char NowFloor; //当前所在楼层
char KeyValue; //电梯内部按键暂存值
char KeyValueO; //电梯外部按键暂存值
char GoFloor[5];
char t;
uchar code play[]={0xff,0xd7,0x32,0x92,0xd4,0x98,0x18}; //串口显示字型码
unsigned int TimeValue; // 定期器计数
char Num;
void delay(unsigned int a)
{
// unsigned int i;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
TimeValue=0;
TR0=1;
while(TimeValue<a)
{
DianTiKey();
}
TR0=0;
}
void ShangSheng()//驱动电机上升函数
{
int i;
t=11;
LedUp=0;
LedDown=1;
for(i=0;i<10;i++)
{
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;
// d11=1,d12=1,d21=1,d22=1;
LedDown=1;
LedUp=1;
}
void XiaJiang()
{
int i;
t=10;
LedDown=0;
LedUp=1;
for(i=0;i<10;i++)
{
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;
// d11=1,d12=1,d21=1,d22=1;
LedDown=1;
LedUp=1;
}
void Go() //电梯内部按键响应程序
{
char temp;
if(KeyValue!=KeyValueOld)
{
KeyValueOld=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;
}
}
}
}
void OutKey() //外部按键响应程序
{
char temp;
if(KeyValueO!=KeyValueOOld)//按键与否按下
{
KeyValueOOld=KeyValueO;
temp=NowFloor-KeyValueO;
if(t==0)
{
if(temp>0) //电梯执行上升
{
while(temp>0)
{
ShangSheng();
temp--;
SBUF=play[--NowFloor];
while(!TI);
TI=0;
}
NowFloor=KeyValueO;
}
if(temp<0) //电梯执行下降
{
while(temp<0)
{
XiaJiang();
temp++;
SBUF=play[++NowFloor];
while(!TI);
TI=0;
}
NowFloor=KeyValueO;
}
}
}
}
void DianTiKey() //电梯按键扫描函数
{
switch(~P0)
{
case 0x01:KeyValue=1;GoFloor[0]|=4;break;
case 0x02:KeyValue=2;GoFloor[1]|=4;break;
case 0x04:KeyValue=3;GoFloor[2]|=4;break;
case 0x08:KeyValue=4;GoFloor[3]|=4;break;
case 0x10:KeyValue=5;GoFloor[4]|=4;break;
case 0x20:KeyValue=6;GoFloor[5]|=4;break;
case 0x40:break;
case 0x80:break;
}
if(t==0)
{
switch(~P2) //上升按键扫描
{
case 0x01:GoFloor[0]|=1;KeyValueO=1;break;//1楼呼喊上升
case 0x02:GoFloor[1]|=1;KeyValueO=2;break;//2楼呼喊上升
case 0x04:GoFloor[2]|=1;KeyValueO=3;break;//3楼呼喊上升
case 0x08:GoFloor[3]|=1;KeyValueO=4;break;//4楼呼喊上升
case 0x10:GoFloor[4]|=1;KeyValueO=5;break;//5楼呼喊上升
case 0x20:GoFloor[0]|=2;KeyValueO=2;break;//2楼呼喊下降
case 0x40:GoFloor[1]|=2;KeyValueO=3;break;//3楼呼喊下降
case 0x80:GoFloor[2]|=2;KeyValueO=4;break;//4楼呼喊下降
}
if(!down6)
{
GoFloor[4]|=2;//6楼呼喊下降
KeyValueO=6;
}
if(!down5) //5楼呼喊下降
{
GoFloor[3]|=2;
KeyValueO=5;
}
}
else
{
if(t==11) //电梯在上升时响应上升呼喊
switch(~P2) //上升按键扫描
{
case 0x01:GoFloor[0]|=1;KeyValueO=1;break;//1楼呼喊上升
case 0x02:GoFloor[1]|=1;KeyValueO=2;break;//2楼呼喊上升
case 0x04:GoFloor[2]|=1;KeyValueO=3;break;//3楼呼喊上升
case 0x08:GoFloor[3]|=1;KeyValueO=4;break;//4楼呼喊上升
case 0x10:GoFloor[4]|=1;KeyValueO=5;break;//5楼呼喊上升
}
else if(t==10) //电梯在下降时响应下降呼喊
{
switch(~P2)
{
case 0x20:GoFloor[0]|=2;KeyValueO=2;break;//2楼呼喊下降
case 0x40:GoFloor[1]|=2;KeyValueO=3;break;//3楼呼喊下降
case 0x80:GoFloor[2]|=2;KeyValueO=4;break;//4楼呼喊下降
}
if(!down6)
{
GoFloor[4]|=2;//6楼呼喊下降
KeyValueO=6;
}
if(!down5)
{
GoFloor[3]|=2;
KeyValueO=5;
}
}
}
}
void start()
SCON=0X00;
TMOD=0X01;
ET0=1;
EA=1;
TI=0;
NowFloor=1;
KeyValueOld=KeyValueOOld=KeyValue=KeyValueO=1;
pwm1=pwm2=1;
SBUF=play[1];
while(!TI);
TI=0;
}
void main()
{
start();
while(1)
{
DianTiKey();
OutKey();
Go();
}
}
void t0() interrupt 1
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
TimeValue++;
}
展开阅读全文