基于单片机的电梯仿真实验终稿(精品)

上传人:无*** 文档编号:164505712 上传时间:2022-10-24 格式:DOC 页数:11 大小:552.50KB
收藏 版权申诉 举报 下载
基于单片机的电梯仿真实验终稿(精品)_第1页
第1页 / 共11页
基于单片机的电梯仿真实验终稿(精品)_第2页
第2页 / 共11页
基于单片机的电梯仿真实验终稿(精品)_第3页
第3页 / 共11页
资源描述:

《基于单片机的电梯仿真实验终稿(精品)》由会员分享,可在线阅读,更多相关《基于单片机的电梯仿真实验终稿(精品)(11页珍藏版)》请在装配图网上搜索。

1、 基于单片机的电梯仿真实验 1. 80c51引脚图管脚图及各引脚功能介绍 图1 80c51引角图Vss(20脚):接地VCC(40脚): 主电源+5VXTAL1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。XTAL2(18脚): 接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。RST(9脚): 单片机刚接上电源时,其内部各寄存器处于随

2、机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)PSEN(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。 图2 80C51的内部结构图ALE/PROG(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两

3、次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。EA/VPP(31脚): 当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。当地址超出4KB时,将自动执行片外程序存储器的程序。当EA输入低电平时,CPU仅访问片外程序存储器。在对87C51EPROM编程时,此引脚用于施加编程电压VPP。输入/输出引脚:(1)P0.0P0.7 (39脚32脚)(2)P1.0P1.7 (1脚8脚)(3)P2.0P2.7 (26脚21脚)(4)P

4、3.0P3.7 (10脚17脚) 2. 8255A芯片介绍 Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。 8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种; 方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式

5、。其中A、B、C口的高四位或低四位可分别设置成输入或输出。 方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0. 方式2: 双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。 图3 8255A引角图 图4 8255A端口选择表3. 74LS373介绍 内部有八个D 锁存器。373为三态输出的八D 透明锁存

6、器,共有54/74S373和 54/74LS373 两种线路结构型式,其主要电器特性的典型值如下(不同厂家具体值有差别): 型号 tPd PD54S373/74S373 7ns 525mW 54LS373/74LS373 17ns 120mW373的输出端 O0O7 可直接与总线相连。当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O随数据D而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输

7、入滞后作用,使交流和直流噪声抗扰度被改善 400mV。引出端符号: D0D7 数据输入端 ;OE 三态允许控制端(低电平有效);LE 锁存允许端 ;O0O7 输出端。DnLEOEOnHHLHLHLLXLLQ0XXH高阻态其真值表: 4. 数码显示管LED图5数码显示管LED引脚图LED显示器是单片机应用系统中常见的输出器件,而在单片机的应用上也是被广泛运用的。如果需要显示的内容只有数码和某些字母,使用LED数码管是一种较好的选择。LED数码管显示清晰、成本低廉、配置灵活,与单片机接口简单易行。LED数码管作为显示字段的数码型显示器件,它是由若干个发光二极管组成的。当发光二极管导通时,相应的一个

8、点或一个笔画发亮,控制不同组合的二极管导通,就能显示出各种字符,常用的LED数码管有7段和“米”字段之分。这种显示器有共阳极和共阴极两种。共阴极LED显示器的发光二极管的阴极连在一起,通常此共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极接在一起,通常此共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。5. 行列式键盘 图6 本次仿真是用到的行列式键盘 由于本次实验中用到的按键较多,而单片机的并行口有限,只能用行列式键盘扩展。该行列式键盘的行和列分别接到8255A的PA口和PB口。在程序中

9、要注意的是先判断行,再判断列。这里要注意8255A的接口工作方式,PA口工作在输入,PB口工作在输出方式。在判断行的时候,PB口全为0,PA口全为1。在判断列的时候,使得PB口依次为0,扫描列来判断是哪一列的按键按下。6. 中断判断电路 图7 外部中断电路此电路旨在引入单片机一个外部中断INY0。由两个四输入与门74LS21和一个两输入与门74LS08组成。只要PA口中有一个低电平,INT0就为0。本实验程序流程图: 本实验仿真图:本实验程序:#include#includebit e; /定义电梯的方向sbit door=P30;sbit m0=P34;sbit m1=P35;char bd

10、ata yuzh=0x00;char bdata shang=0x00;char bdata xia=0x00;int layer;/当前层#define COM8255 XBYTE0X7FFF#define PA8255 XBYTE0x7FFC#define PB8255 XBYTE0x7FFD#define DENG8255 XBYTE0XAFFF#define DENGA XBYTE0xAFF3#define DENGB XBYTE0xAFF7#define DENGC XBYTE0xAFFBvoid delay(int z)/延时程序 int x,y; for(x=0;xz;x+) f

11、or(y=0;y110;y+);/延时程序/中断0char templayer;char dir;char constant1=0xff;void INT0_srv(void) interrupt 0 using 1 /延时去抖动delay(2);if(INT0=1)return;/延时去抖动templayer=PA8255;/先读A口。PB8255=0x06; /判断列数/if(PA8255!=constant1) dir=0x01; else PB8255=0x05; if(PA8255!=constant1) dir=0x02; else dir=0x03; /判断列数/ PB8255=

12、0x00; /标示量赋值switch(dir) case 0x01: yuzh=(templayer)yuzh;DENGC=yuzh;break; case 0x02: shang=(templayer)shang;DENGA=shang;break; case 0x03: xia=(templayer)xia;DENGB=xia; /标示量赋值return;/中断0 char code zimo=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,;char code pickup=0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0

13、x80,0x00,;char code pickdown=0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,;char code quw=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,; /停止层,闪动/int stopat() int i; for(i=0;i8;i+) P1=0; delay(200); P1=zimolayer; delay(400); return 0;/停止层,闪动/ void main() layer=0x01;/当前层 e=1; /1为上,0为下 EA=1; EX0=1; /按键和灯,初始化 COM8

14、255=0x90; /AB口都工作在方式0,A入 B为出。 PB8255=0x00; DENG8255=0X80; /DENG的ABC口都是输出。 /按键和灯,初始化 P1=zimolayer; askdir: if(yuzh|shang|xia)!=0) if(e=1) upcircle: switch(layer) case 0x01: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;

15、break; case 0x02: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; case 0x03: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; c

16、ase 0x04: if(quwlayer-1&yuzh)|(quwlayer-1&shang)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; case 0x05: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; case 0x06

17、: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; case 0x07: if(quwlayer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1;break; case 0x08: if(quw

18、layer-1&shang)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;shang=quwlayer-1&shang;DENGA=shang;DENGC=yuzh;stopat();door=1; /判断上面还有没有要去的层。 if(pickuplayer-1&yuzh)|(pickuplayer-1&shang)|(pickuplayer-1&xia)=0) e=0;/反向 goto askdir; /判断上面还有没有要去的层。 layer=layer+1; m0=1; m1=0; delay(1500); m0=0;m1=0; P1=zimo

19、layer; goto upcircle; /上移动一层 else downcircle: switch(layer) case 0x01: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1;break; case 0x02: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xi

20、a;DENGC=yuzh;stopat();door=1;break; case 0x03: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1;break; case 0x04: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();do

21、or=1;break; case 0x05: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1;break; case 0x06: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1;break; case 0x07: i

22、f(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1;break; case 0x08: if(quwlayer-1&xia)|(quwlayer-1&yuzh)door=0;yuzh=quwlayer-1&yuzh;xia=quwlayer-1&xia;DENGB=xia;DENGC=yuzh;stopat();door=1; /判断下面还有没有要去的层。 if(pickdownlayer-1&yuzh)|(pickdownlayer-1&xia)|(pickdownlayer-1&shang)=0) e=1;/反向 goto askdir; /判断下面还有没有要去的层 layer=layer-1;m0=0;m1=1;delay(1500); m0=0;m1=0; P1=zimolayer;goto downcircle; /下移动一层 /else/if /没有要去的层,原地不动。 goto askdir;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!