基于AT89S52单片机的模拟电梯设计.docx

上传人:b****2 文档编号:499396 上传时间:2023-04-29 格式:DOCX 页数:35 大小:491.90KB
下载 相关 举报
基于AT89S52单片机的模拟电梯设计.docx_第1页
第1页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第2页
第2页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第3页
第3页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第4页
第4页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第5页
第5页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第6页
第6页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第7页
第7页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第8页
第8页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第9页
第9页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第10页
第10页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第11页
第11页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第12页
第12页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第13页
第13页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第14页
第14页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第15页
第15页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第16页
第16页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第17页
第17页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第18页
第18页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第19页
第19页 / 共35页
基于AT89S52单片机的模拟电梯设计.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于AT89S52单片机的模拟电梯设计.docx

《基于AT89S52单片机的模拟电梯设计.docx》由会员分享,可在线阅读,更多相关《基于AT89S52单片机的模拟电梯设计.docx(35页珍藏版)》请在冰点文库上搜索。

基于AT89S52单片机的模拟电梯设计.docx

基于AT89S52单片机的模拟电梯设计

 

题目:

基于AT89S52单片机的模拟电梯设计

 

物理与电气学院

电子信息科学与技术

学院:

专业:

电信101

班级:

 

学生姓名:

 

完成日期:

 

摘要:

单片机即单片微型计算机(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。

其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域.电梯是集机械原理应用、电气控制技术、微处理器技术、系统工程学等多学科和技术分支于一体的机电设备,它是建筑中的永久垂直交通工具。

本论文选择AT89S52为核心控制元件,使用宏晶公司的STC89C51RC加外围器件作控制单元,用数码管显示,使用单片机C语言进行编程制作了一个八层电梯模拟系统。

其原理图可分为按键部分、显示部分、电机部分、最小系统部分。

两个按键(一个电梯内,一个电梯外)对应一个楼层,另有开门、关门两个按键。

芯片一旦检测到某楼层的按键被按下,就会在对应端口输出5V高电平驱动电机来到该楼层,程单序会延迟几分钟,等人进入电梯后,关门,去到要去的楼层。

在整个过程中,数码管会显示楼层数。

最小系统为单片机提供时钟信号和复位功能。

关键词:

STC89C52单片机模拟电梯四位一体数码管

 

 

一.设计任务

1.1.设计内容与要求

随着现代高科技的发展,住房和办公用楼都已经逐渐向高层发展。

电梯是高层宾馆、商店、住宅、多层仓库等高层建筑不可缺少的垂直方向的交通运输工具。

1889年美国奥梯斯升降机公司推出的世界上第一部以电动机为动力的升降机,同年在纽约市马累特大厦安装成功。

随着建筑物规模越来越大,楼层也越来越高,对电梯的调速精度、调速范围等静态和动态特性都提出了更高的要求。

由于传统的电梯运行逻辑控制系统采用的是继电器逻辑控制线路。

采用这种控制线路,存在易出故障、维护不便、运行寿命较短、占用空间大等缺点。

电梯控制系统是比较复杂的一个大型系统,在计算机诞生的几十年里,继电器控制系统为电梯控制的发展做了巨大的贡献,但在性能上和PLC还是有本质上的差距。

在科技的不断发展下,单片机控制系统很快可以解决抗扰性,成为方便有效的电梯控制系统。

此单片机模拟电梯用绿色发光二极管组成的箭头来指示电梯当前是处于上升状态还是下降状态,用数码管显示当前是处于哪一层,用红色发光二极管指示电梯走到哪一层会停.电源接通后,若没有人按下停止按键,它就以每层2秒的速度一直上下运行,若有人按下某一层的停止按键,它就会在相应的那一层停止4秒钟,并伴有开门和关门的声音提示。

二.硬件系统实现

2.1.AT89S52芯片

AT89S52——低功耗高性能CMOS8位单片机,片内8kBytesISP(In-systemprogrammable)的可反复擦写1000次的FLASH只读程序存储器,器件采用ATMEL公司之高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

单芯片上,拥有8位CPU及在系统可编程FLASH,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效之解决方案。

AT89S52之特点:

40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

图2.1AT89S52管脚图:

AT89S52功能:

8k字节FLASH,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

AT89S52可降至0Hz静态逻辑操作,支持2种软件可选节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

P0口——8位漏极开路之双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

访问外部程序和数据存储器时,P0口亦被作为低8位地址/数据复用。

在这种模式下,P0不具有内部上拉电阻。

在FLASH编程时,P0口亦用来接收指令字节;在程序校验时,输出指令字节。

程序校验时,需外部上拉电阻。

P1口——有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口用。

作输入用时,被外部拉低的引脚因内部电阻,将输出电流(IIL)。

此外,P1.0及P1.2分别作定时器/计数器2之外部计数输入(P1.0/T2)及时器/计数器2之触发输入(P1.1/T2EX),详见表1所示。

在flash编程及校验时,P1口接收低8位地址字节。

表2.1.1

引脚号

第二功能

P1.0

T2(定时器/计数器T2的外部计数输入),时钟输出

P1.1

T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)

P1.5

MOSI(在系统编程用)

P1.6

MISO(在系统编程用)

P1.7

SCK(在系统编程用)

P2口——有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口。

作输入用时,被外部拉低的引脚因内部电阻,将输出电流(IIL)。

在访问外部程序存储器或用16位地址读取外部数据存储器,P2口送出高八位地址。

在这种应用中,P2口用很强的内部上拉发送1。

在用8位地址访问外部数据存储器时,P2口输出P2锁存器之内容。

在FLASH编程及校验时,P2口亦接收高8位地址字节及一些控制信号。

P3口——有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可用作输入口。

作输入用时,被外部拉低的引脚因内部电阻之原因,将输出电流(IIL)。

P3口亦作为AT89S52特殊功能(第二功能)用,如表2所示。

在FLASH编程及校验时,P3口亦接收些控制信号。

此外,P3口亦接收些用于FLASH闪存编程及程序校验的控制信号。

表2.1.2

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INTO(外中断0)

P3.3

INT1(外中断1)

P3.4

TO(定时/计数器0)

P3.5

T1(定时/计数器1)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读选通)

RST——复位输入。

振荡器工作时,RST引脚有两个机器周期以上高电平将是单片机复位。

ALE/PROG——访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般,ALE仍以时钟振荡频率的1/6输出固定之脉冲信号,故它可对外输出时钟或用于定时目的。

需注意:

每当访问外部数据存储器时将跳过一个ALE脉冲。

对FLASH存储器编程期间,该引脚亦用于输入编程脉冲(PROG)。

若必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条MOVX及MOVC指令方能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN——程序储存允许(PSEN)输出是外部程序存储器之读选通信号,AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP——外部访问允许,要CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端须保持低电平(接地)。

需注意:

若加密位LB1被编程,复位时内部会锁存EA端状态。

若EA端为高电平(接Vcc端),CPU则执行内部程序存储器之指令。

FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这须是该器件是使用12V编程电压Vpp。

XTAL1——振荡器反相放大器及内部时钟发生电路之输入端。

XTAL2——振荡器反相放大器之输出端。

单片机最小系统

要使单片机工作起来,最基本的电路的构成为

1、单片机电源:

AT89S51单片机的工作电压范围:

4.0V—5.5V,所以通常给单片机外接5V直流电源。

连接方式为VCC(40脚):

接电源+5V端VSS(20脚):

接电源地端

2、时钟电路:

单片机工作的时间基准,决定单片机工作速度。

时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。

AT89S51单片机时钟频率范围:

0—33MHz。

3、复位电路:

确定单片机工作的起始状态,完成单片机的启动过程。

单片机接通电源时产生复位信号,完成单片机启动,确定单片机起始工作状态。

手动按键产生复位信号,完成单片机启动,确定单片机的初始状态。

通常在单片机工作出现混乱或“死机”时,使用手动复位可实现单片机“重启”。

2.2.功能模块图

在本设计中需用到AT89S52芯片,1个数码管,一个蜂鸣器,复位电路,8个按键,24个发光二极管。

 

 

 

图2.2功能模块

2.3显示模块

显示电路采用了1个LED数码管,单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路。

7段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。

LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的。

因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。

以本设计共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。

当然,LED的电流通常较小,一般均需在回路中接上限流电阻。

假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。

而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。

图2.3LED数码管

2.4复位开关模块

MCS-51单片机的复位是靠外部电路实现的。

MCS-51单片机工作之后,只要在它的RST引线上加载10ms以上的高电平,单片机就能有效地复位。

MCS-51单片机通常采用上电自动复位和按键复位两种方式。

最简单的复位电路如下图:

图2.4复位开关

上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上的高电平,就能使单片机有效的复位。

在应用系统中,有些外围芯片也需要复位。

如果这些芯片复位端的复位电平与单片机的复位电平的要求一致,则可以将复位信号与之相连。

2.5振荡器电路模块

MCS--51单片机内部的振荡电路是一个增益反相放大器,引线XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。

单片机内部虽然有振荡电路,但要形成时钟,外部还需要附加电路。

石英晶体振荡和陶瓷振荡均可采用。

输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

51单片机的时钟产生方式有两种,分别为:

内部时钟方式和外部时钟方式。

利用其内部的振荡电路XTAL1和XTAL2引线上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出的时钟信号。

在MCS-51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激振荡器,晶体和电容决定了单片机的工作时间精度为1微秒。

晶体可在1.2-12MHz之间选择。

MCS-51单片机在通常应用情况下,使用振荡频率为6MHZ的石英晶体,而12MHZ频率的晶体主要是在高速串行通信情况下才使用,在这里我用的是12MHZ石英晶体。

对电容无严格要求,但它的取值对振荡频率输出的稳定性、大小及振荡电路起振荡速度有一点影响。

C1和C2可在20-100PF之间取值,一般情况取30PF。

外部时钟方式是把外部振荡信号源直接接入XTAL1或XTAL2。

由于XTAL2逻辑电平不是TTL的,所以还要接一个上拉电阻。

2.6程序下载模块

该模块完成的功能是把源程序代码下载到AT89S51芯片中,它需要和微机上的ISP下载器软件配合使用来完成这样的功能。

ISP为在线编程接口,J2为标准10PJTAG下载接口。

ISP在线编程接口为89S51单片机提供了方便的在线编程方法。

使用时将ISP下载线一端与PC并口相连接,一端与ISP接口相连,使用ISP下载软件即可实现MCU在线编程。

下载线插接说明:

两排十针下载口,1号引脚的边上有一个小方框;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引脚,这一点一定要切记,不然的话程序下载不进去。

2.7设计电路及连线

图2.5电路连接图

三.软件设计

3.1软件功能描述

此单片机模拟电梯用绿色发光二极管组成的箭头来指示电梯当前是处于上升状态还是下降状态,用数码管显示当前是处于哪一层,用红色发光二极管指示电梯走到哪一层会停.电源接通后,若没有人按下停止按键,它就以每层2秒的速度一直上下运行,若有人按下某一层的停止按键,它就会在相应的那一层停止4秒钟,并伴有开门和关门的声音提示。

3.2

流程图设计

 

3.3单片机C语言程序

模拟电梯程序

#include

sbitkey3=P1^1;

sbitkey2=P1^0;

sbitkey1=P1^2;

sbitkey4=P1^3;

sbitkey5=P1^4;

sbitkey6=P3^7;

sbitkey7=P3^6;//关门升降

sbitkey8=P3^5;//开门延时键

sbitP24=P2^4;

sbitP25=P2^5;

sbitP26=P2^6;

sbitP27=P2^7;

sbitzhengzhuan=P2^0;//电动机正转

sbitfanzhuan=P2^1;//电动机反转

unsignedinti,j;

unsignedcharsanlou=0;

unsignedcharerlou=0;

bitbiaozhi=0;

unsignedcharyilou=0;

unsignedcharqusanlou=0;

unsignedcharquerlou=0;

unsignedcharquyilou=0;

unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//---------延时1ms函数--------------------

voiddelay(unsignedintt)

{

for(i=0;i

{

for(j=0;j<121;j++)

{;}

}

}

//-------------外按三楼函数-------------------------

voiddisplay3(void)

{

if(qusanlou==1)

{

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

;

}

}

}

if(P26==0)//如果现在在一楼则显示从一楼到三楼函数

{

P2=0xb0;

P0=tab[1];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key2==0)//判读外二楼有没有人按下

{

delay(10);

while(key2==0);

erlou=1;

}

if(key8==0&&qusanlou==1);//同时要是之前的内三楼键按下才有效

{

delay(10);

while(key8==0);

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

zhengzhuan=1;

fanzhuan=0;//电机正转

delay(1000);

delay(1000);

delay(1000);

delay(1000);//上一层楼的时间

 

P2=0xd0;

P0=tab[2];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key8==0&&qusanlou==1);//同时要是内三楼键按下才有效

{

delay(10);

while(key8==0);

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

if(erlou==1)

{

delay(1000);//在二楼停留多1s当模拟有人进出

zhengzhuan=0;

fanzhuan=0;//电机停止

}

zhengzhuan=1;

fanzhuan=0;//电机正转

delay(1000);

delay(1000);

delay(1000);

delay(1000);//上一层楼的时间

 

P2=0xe0;

P0=tab[3];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key8==0&&qusanlou==1);//同时要是内三楼键按下才有效

{

delay(10);

while(key8==0);

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

}

if(P25==0)

{

P2=0xd0;

P0=tab[2];

zhengzhuan=1;

fanzhuan=0;//电机正转

delay(1000);

delay(1000);

delay(1000);

delay(1000);

P2=0xe0;

P0=tab[3];

}

if(P24==0)//如果现在还是显示3楼

{

P2=0xe0;

P0=tab[3];

}

sanlou=0;

erlou=0;

qusanlou=0;

zhengzhuan=0;

fanzhuan=0;//电机停止

}

//-------------外按二楼函数,不过最后还是到先三楼去-------------------------

voiddisplay2(void)

{

if(querlou==1)

{

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

;

}

}

}

if(P26==0)//如果现在在一楼则显示从一楼到二楼再到三楼函数

{

P2=0xb0;

P0=tab[1];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key8==0&&querlou==1);//同时要是内二楼键按下才有效

{

delay(10);

while(key8==0);

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

zhengzhuan=1;

fanzhuan=0;//电机正转

delay(1000);

delay(1000);

delay(1000);

delay(1000);//上一层楼的时间

 

P2=0xd0;

P0=tab[2];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key8==0&&querlou==1);//同时要是内二楼键按下才有效

{

delay(10);

while(key8==0);

zhengzhuan=0;

fanzhuan=0;//电机停止

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

zhengzhuan=0;

fanzhuan=0;//电机停止

delay(1000);

delay(1000);

delay(1000);//在二楼停留多1s当模拟有人进出

zhengzhuan=1;

fanzhuan=0;//电机正转

delay(1000);

delay(1000);

delay(1000);

delay(1000);//上一层楼的时间

 

P2=0xe0;

P0=tab[3];

for(i=0;i<500;i++)

{

for(j=0;j<121;j++)

{

if(key8==0&&querlou==1);//同时要是内二楼键按下才有效

{

delay(10);

while(key8==0);

delay(1000);//如果再次开门就延时1s

}

if(key7==0)

{

delay(10);

while(key7==0);

i=200;//把i变成200跳出延时函数

}

}

}

erlou=0;

biaozhi=~biaozhi;//为了不让在显示完上升函数时再去显示下降函数

}

//-----------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2