单片机毕业设计基于单片机控制的模拟电梯显示.docx
《单片机毕业设计基于单片机控制的模拟电梯显示.docx》由会员分享,可在线阅读,更多相关《单片机毕业设计基于单片机控制的模拟电梯显示.docx(28页珍藏版)》请在冰豆网上搜索。
单片机毕业设计基于单片机控制的模拟电梯显示
摘要电梯是标志现代物质文明的垂直运输工具、是机—电一体化的复杂运输设备。
它涉及电子技术、机械工程、电力电子技术、微机技术、电力拖动系统和土建工程等多个科学领域。
目前电梯的生产情况和使用数量已成为一个国家现代化程度的标志之一。
随着现代化城市的高速发展,每天都有大量人流及物流需要输送。
为节约用地和适应经贸事业的发展,一幢幢高楼拔地而起,这些高层建筑的垂直运输是一个突出问题,与人们的工作和生活紧密相关
8051是MCS-51系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21个专用控制寄存器、4kB的程序存储器、128字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。
MCS-51具有比较大的寻址空间,地址线宽达16条,即外部数据存储器和程序存储器的寻址范围达216=64kB,这作为单片机控制来说已是比较大的,这同时具备对I/O口的访问能力。
此外,MCS-51采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品。
从而容易使产品形成系列化。
关键词电梯单片机汇编
第一节概述
MCS-51把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。
由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。
因此,在工业测控系统中,使用单片机是最理想的选择。
单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。
设计要求:
1)、不管电梯停在哪一层,可以响应其他任意一层的呼叫
2)、电梯在上升过程中,响应将经过楼层或高出目的楼层的同向呼叫,停靠同一方的所选楼层,不响应其他呼叫。
3)、电梯在下降过程中,响应将经过楼层或低于目的楼层的同向呼叫,停靠同一方向的所选楼层,不响应其他呼叫。
4)、电梯中途停靠,需延时一段时间,作为上下客时间,然后再继续运行到最终目的地。
5)、电梯在上升或下降的过程中停靠期间,其上升或下降指示灯不灭。
6)、如果无任何键按下,电梯不运行
第二节硬件系统的设计
由于MCS-51集成了几乎完善的8位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利
2.1、软件硬件结合调试:
8051中集成了完善的各种中断源,用户可十分方便地控制和使用其功能,使得它的应用范围加大可以说它可以满足绝大部分的应用场合。
当把单片机应用系统的试验样机装配完毕以后,便可进入硬件调试阶段,硬件调试一般按脱机检查和联机调试两步进行。
脱机检查就是根据硬件逻辑电路图,用万用表等工具检查试验样机联线的正确性与可靠性,其中对电源系统的极性、短路故障等问题要特别注意。
要仔细地检查硬件电路的地址总线、数据总线和控制总线是否有短路、开路或错位情况;在电路检查完成以后,可在不插入集成电路芯片的情况下加电检查,确定一些点的电位是否正常;断电后,再把集成电路芯片正确地插入各插座,然后加电,迅速地检查各芯片是否有温升异常,以及单片机和有关接口电路的通电初始化状态是否正确。
在上述情况都正常后,便可进入硬件的联机调试。
值得注意的是,在加点情况下,不可拔插任何集成电路芯片。
联机调试就是把试验样机上的单片机和EPROM拔下,并将单片机开发装置的仿真头插入试验样机上的单片机插座上,这样就将仿真器与单片机应用系统两者连接起来,构成了联机调试状态。
联机调试时,首先分别接通开发装置和试验样机的电源,在加电后,若开发装置能正常工作,就说明试验样机的地址总线、数据总线和控制总线无短路故障,否则应再断电检查试验样机的线路,直到排除了鼓掌为止;联机调试状态下,还可使用开发装置对试验样机进行全面的检查,例如检查读写结果、观察试验样机I/O设备的状态等,利用这些手段还可进一步检查、排除试验样机的硬件故障(包含设计和工艺错误)。
在试验样机中,常见的故障有元器件质量低劣,开发装置或试验样机接地不良,电压波动大,单片机负载过重,线路短路或断路以及设计工艺错误。
硬件电路如图2-1:
图2-1硬件电路图
MCS-51的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相当灵活和方便的。
对应用程序进行排错调试就是对已经进行过硬件检查的试验样机和翻译成机器码的应用程序,还要进行联合排错和调试检查。
目前常用的排错、调试方法有两种,一是用单片机仿真开发装置与试验样机联机提供排错、调试手段,具体的方法有单步运行、断点运行、跟踪运行、全速运行等。
其中单步运行方法是使所编制的程序指令仅执行一条就停止下来,检查试验样机和应用程序中的错误,然后再单步执行下一条指令…;断点运行方法是在程序中设置断点,使得当程序执行到断点处时停止,供设计者检查试验样机和应用程序中的错误;跟踪运行方法是应用程序指令一条一条地执行,开发装置摄取运行每一条指令的地址、单片机各部分数据、I/O端口等处信息,供调试者随时停止程序,对各种信息进行检查和修改;全速运行方法是实时地运行用户程序,可以检查用户程序最终执行结果。
二是在IBM-PC机上创建一个模拟目标单片机的模拟环境,把编好的程序在这个模拟环境下运行,进而进行排错和调试。
该方法对单片机软件的开发简单易行,它不需要任何在线仿真器,也不需要调试样机。
2.2MCS-51对系统环境的要求:
MCS-51的开发环境要求较低,软件资源十分丰富,硬件只需配备一台PC,一台仿真编程器即可实现产品开发,我们在软件方面采用汇编语言编写代码,在硬件方面我们使用个人电脑结合西安唐都科教仪器公司开发的TDN-MI单片机开发实验系统。
TDN-MI主要功能包括:
程序的输入、信息的保存、程序的运行和调试、以及应用系统的仿真、程序的固化等。
其中TDN-MI和个人PC之间采用RS232串行接口连接。
2.3硬件电路设计:
硬件电路设计一般包括两个部分的内容:
一是扩展单片机芯片内部单元的功能,如ROM、RAM、定时/记数器、I/O接口线等的容量不满足应用系统的要求时,就需要设计相应的功能扩展电路;二是根据应用系统的功能要求配置一定的外部设备,如键盘、显示器、打印机、A/A、D/A等。
对应用系统进行扩展与配置时,应充分考虑如下的设计原则。
1)、尽可能选择典型电路,并符合单片机的常规使用要求。
2)、扩展与配置的数量应充分满足应用系统功能的要求并留有余地,以便能方便地进行功能扩展和进一步的开发。
3)、应充分结合软件方案老考虑硬件结构。
4)、整个系统中的相关器件应尽可能做到性能匹配,如选用的晶振频率较高时,就应选择存取速度较高的芯片。
5)、应重视整个系统的可靠性及抗干扰设计,如充分筛选芯片和器件,增加去耦电路,采取隔离和屏蔽等措施。
在此,我们的设计用到的硬件有:
89C51,74LS164,数码管,电容,二极管,电阻,等
组成的单片机最小系统如图2-2:
图2-2单片机最小系统图
第三节软件系统的设计
一些在此次电梯设计中用到的运行特征:
1)、键位特征:
外键:
EEH,EDH,EBH,----上键值
DEH,DDH,DBH----下键值
上键值特征:
P2.0=1
下................:
P2.0=0
内键:
77H,7BH,7DH,7EH
2)、运行特征:
正在执行上,下程序特征:
P2.3=1
没在执行:
P2.3=0
正在上行特征:
P2.4=1
正在下行:
P2.4=0
3)、取键特征:
KEYA:
取外键值
KEYB:
取内键值
R2:
电梯运行的终止层
R3:
内键或外键中断层
FLOORNOW:
现在的楼层数
4)、子程序代码:
OPENOUT:
按外键时的情况
OPENIN:
按内键时的情况
MAKER3:
取按键所在的层-中断层数值。
DISPL:
由现在层FLOORNOW运行到R2
DISPLA:
先由现在层运行到R2,再到R3------上升
DISPLB:
由现在层运行到R3,再到R2------下降
DISPLD:
根据实际情况判断。
DISPS:
数码管显示楼层数
DISPLS:
通过FLOOLNOW所在层灯的闪烁表示开关门。
:
R2中的内容和R3中的内容互换
主程序流程图如图3-1:
图3-1主程序流程图
一:
主程序:
DINEQUP0.0
CLKEQUP0.1
FLOORNOWEQU35H
FLOORLASTEQU45H
ORG0000H;初使化
LJMPSTART
ORG000BH
MOVR5,#200
CLRP2.6
PUSHACC
PUSHPSW
DJNZR5,EXIT
LCALLKEYA
LCALLKEYB
JBP2.6,LP;有键按下时跳到主程序,
EXIT:
POPPSW;无键按下的返回
POPACC
RETI
START:
MOVR7,#00H;数码管显0
CLRP2.3;无执行
MOVFLOORLAST,#01H
MOVFLOORNOW,#01H
MOVTMOD,#02H;方式二
MOVIE,#82H
MOVTH0,#56H
MOVTL0,#56H
SETBTR0
LCALLDISPS
LP:
LCALLKEYA
LCALLKEYB
LJMPLP
二:
外键盘查询子程序---KEYA:
KEYA:
MOVP1,#0FH
;A1-A4输出,B1-B4输入
MOVA,P1
CJNEA,#0FH,K11;有键按下
K10:
AJMPK17;无键按下
K11:
ACALLYAN;延时去前沿抖动
MOVA,P1;再读键盘状况
CJNEA,#0FH,K12;确有键按下
SJMPK10
K12:
MOVB,A;存行值
MOVP1,#0EFH;按键在A?
列,设键在A4列
MOVA,P1
CJNEA,#0EFH,K13
MOVP1,#0DFH;设键在A3列
MOVA,P1
CJNEA,#0DFH,K13
MOVP1,#0BFH;设键在A2列
MOVA,P1
CJNEA,#0BFH,K13
MOVP1,#07FH;设键在A1列
MOVA,P1
CJNEA,#07FH,K13
AJMPK10;多键同时按下
K13:
ANLA,#0F0H
ORLA,B;拼装键值
MOVB,A;暂存键值
MOVR1,#7H;7个键
MOVR2,#00H;键码初值
MOVDPTR,#KEYATAB;键码表首地址
K14:
MOVA,R2
MOVCA,@A+DPTR;从键值表中取键值
CJNEA,B,K16;键值比较
MOVP1,#0FH;相等,则完成以下步骤
K15:
MOVA,P1
CJNEA,#0FH,K15;等键释放
ACALLYAN;延时去后沿抖动
MOV31H,R2;得键码
MOV30H,B
MOVA,30H
ANLA,#0F0H;高四位
CJNEA,#0E0H,K19
SETBP2.0;上行键特征
AJMPK18
K19:
CLRP2.0;下行键特征
SETBP2.1
AJMPK18
K16:
INCR2;不相等,到继续访问键值表
DJNZR1,K14
AJMPK17
K18:
SETBP2.6;置有键按下时特征
LCALLOPENOUT
K17:
RET
KEYATAB:
DB0EFH,0EEH,0EDH,0EBH
DB0DEH,0DDH,0DBH
三:
内键盘查询子程序逻辑---KEYB:
KEYB:
MOVP1,#0FH;A1-A4输出,B1-B4输入,
;输入者对应锁存先写1
MOVA,P1
CJNEA,#0FH,L11;有键按下
L10:
AJMPL17;无键按下
L11:
ACALLYAN;延时去前沿抖动
MOVP1,#0FH
MOVA,P1;再读键盘状况
CJNEA,#0FH,L12;确有键按下
SJMPL10
L12:
MOVB,A;存行值
MOVP1,#0EFH;按键在A?
列,设键在A4列
MOVA,P1
CJNEA,#0EFH,L13
MOVP1,#0DFH;设键在A3列
MOVA,P1
CJNEA,#0DFH,L13
MOVP1,#0BFH;设键在A2列
MOVA,P1
CJNEA,#0BFH,L13
MOVP1,#07FH;设键在A1列
MOVA,P1
CJNEA,#07FH,L13
AJMPL10;多键同时按下
L13:
ANLA,#0F0H
ORLA,B;拼装键值
MOVB,A;暂存键值
MOVR1,#5H;16个键
MOVR2,#00H;键码初值
MOVDPTR,#KEYBTAB;键码表首地址(如图6-9所示编码)
L14:
MOVA,R2
MOVCA,@A+DPTR;从键值表中取键值
CJNEA,B,L16;键值比较
MOVP1,#0FH;相等,则完成以下步骤
L15:
MOVA,P1
CJNEA,#0FH,L15;等键释放
ACALLYAN;延时去后沿抖动
MOV41H,R2;得键码
CLRP2.1
AJMPL18
L16:
INCR2;不相等,到继续访问键值表
DJNZR1,L14
AJMPL17;多键同时按下
L18:
SETBP2.6;置有键按下时特征
LCALLOPENIN
L17:
RET
KEYBTAB:
DB0FFH,77H,7BH,7DH,7EH
执行有外键按下时流程图3-2,3-3:
图3-2无执行流程图
3-3正在执行流程图
四:
执行有外键按下时子程序----OPENOUT:
OPENOUT:
JBP2.3,OUTLP;正在执行则跳转
LCALLMAKER3;取中断层
MOVA,R3
MOVR2,A
LJMPDISPL
RET
OUTLP:
JBP2.0,OUTLP2;按的是下行键则跳转
JNBP2.4,OUTLP3;正在上行则跳转
RET
OUTLP3:
LCALLMAKER3;取中断层
MOVA,FLOORNOW
MOVB,R3
DIVAB
JNZOUTLP4;中断层小于现在层则跳转
RET
OUTLP4:
MOVA,R2
MOVB,R3
DIVAB
JZOUTLP5;终止层小于中断层则跳转
MOVA,R2
XCHA,R3
MOVR2,A
OUTLP5:
LCALLDISPLB
RET
OUTLP2:
JBP2.4,OUTLP6
RET
OUTLP6:
MOVA,FLOORNOW
MOVB,R3
DIVAB
JZOUTLP7;现在层小于中断层则跳转
RET;现在层小于中断层则返回
OUTLP7:
MOVA,R2
MOVB,R3
DIVAB
JNZOUTLP8;中断层小于终止层则跳转
MOVA,R2
XCHA,R3
MOVR2,A
OUTLP8:
LCALLDISPLA
RET
五:
执行有内键按下时流程图3-4:
3-4内键按下流程图
执行有外键按下时子程序:
OPENIN:
JBP2.3,INLP;正在运行则跳转
LCALLMAKER3
MOVA,R3
MOVR2,A
LCALLDISPL
INLP:
LCALLMAKER3
LCALLDISPLD
RET
取中断层R3流程图3-5:
3-5取中断层流程图
六:
取中断层R3子程序:
MAKER3:
JNBP2.1,MAKELP3;按内键则跳转
JBP2.0,MAKELP1;按下行键则跳转
MOVA,#8
SUBBA,31H
LJMPMAKELP2
MAKELP1:
MOVA,#4
SUBBA,31H
MAKELP2:
MOVR3,A
AJMPMAKELP4
MAKELP3:
MOVR3,41H
MAKELP4:
RET
DISPL子程序:
DISPL:
MOV32H,R2
MOVA,FLOORNOW
CJNEA,32H,LPL4;现在层是否等于终止层
MOVDPTR,#KEYTAB
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOVP3,A
MOVR7,FLOORNOW
LCALLDISPS;数码管显示层数
AJMPLPL5
LPL4:
MOVA,FLOORNOW
MOVB,R2
DIVAB
JNZLPL1;现在层大于终止层则跳转
MOVDPTR,#KEYTAB
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOV50H,A
LPL2:
MOVA,50H
MOVP3,A
SETBP2.3
RLA;上升
SETBP2.4
MOV50H,A
MOVFLOORLAST,FLOORNOW
INCFLOORNOW
INCR7
LCALLDISPS;数码管显示层数
MOVA,R2
LCALLLONGYAN
CJNEA,FLOORLAST,LPL2;是否到达终止层?
DECFLOORNOW
CLRP2.3
LCALLDISPLS;闪烁,表示开门
LCALLYAN;延时
LCALLDISPLS;闪烁,表示关门
RET
LPL1:
MOVDPTR,#KEYTAB
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOV50H,A
LPL3:
MOVA,50H
MOVP3,A
SETBP2.3;设置正在运行状态位
RRA;下降
CLRP2.4;设置正在下降状态位
MOV50H,A
MOVFLOORLAST,FLOORNOW
DECFLOORNOW;未到终止层则现在层减一,继续下降
DECR7
LCALLDISPS;数码管显示层数
MOVA,R2
LCALLLONGYAN
CJNEA,FLOORLAST,LPL3;是否到达终止层
INCFLOORNOW;到达终止层,回复现在层的层数
CLRP2.3;置无在运行状态位
LPL5:
LCALLDISPLS;闪烁,表示开门
LCALLYAN;延时
LCALLDISPLS;闪烁,表示关门
SJMP$
DISPLA子程序:
DISPLA:
MOVDPTR,#KEYTAB
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOV50H,A
LPLA1:
MOVA,50H
MOVP3,A
SETBP2.3;设置正在运行状态位
RLA
SETBP2.4于;设置正在上升状态位
MOV50H,A
MOVFLOORLAST,FLOORNOW
INCFLOORNOW
INCR7
LCALLDISPS;数码管显示层数
MOVA,R3
LCALLLONGYAN
CJNEA,FLOORLAST,LPLA1;现在层=中断层?
DECFLOORNOW;恢复现在层数值
LCALLDISPLS;闪烁,表示开门
LCALLYAN;延时
LCALLDISPLS;闪烁,表示关门
LPLA2:
MOVDPTR,#KEYTAB
INCFLOORNOW
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOV50H,A
LPLA3:
MOVA,50H
MOVP3,A
SETBP2.3;设置正在运行状态位
RLA
SETBP2.4;设置正在上升状态位
MOV50H,A
MOVFLOORLAST,FLOORNOW
INCFLOORNOW
INCR7
LCALLDISPS;数码管显示层数
MOVA,R2
CJNEA,FLOORLAST,LPLA3;现在层=终止层?
DECFLOORNOW;恢复现在层数值
LCALLDISPLS;闪烁,表示开门
LCALLYAN;延时
LCALLDISPLS;闪烁,表示关门
CLRP2.3;清除正在运行标志位
SJMP$
DISPLB子程序:
DISPLB:
MOVDPTR,#KEYTAB
MOVA,FLOORNOW
MOVCA,@A+DPTR;取现在层的显示二进制数值
MOV50H,A
LPLB1:
MOVA,50H
MOVP3,A
SETBP2.3;设置正在运行状态位
RRA;下降
CLRP2.4