基于单片机的电梯课程设计
- 格式:doc
- 大小:1.15 MB
- 文档页数:57
课程设计实验报告课程名称:课程设计实验项目:基于单片机的电梯控制系统设计专业班级:通信1103班姓名:季义强学号: 110404312实验时间: 19周-20周指导教师:唐云雷课程设计题目:基于单片机的电梯控制系统设计目录一、摘要 (2)二、绪论 (2)三、设计目的任务及要求 (4)四、总设计方案及系统框图 (4)五、设计原理 (5)六、各单元模块设计 (10)1单片机最小系统模块 (10)2 开关控制模块 (11)3电机驱动模块 (12)4显示模块 (14)5报警模块 (16)6电路总图 (17)七、心得体会 (18)八、参考文献 (18)附录一 (19)一、摘要交流双速电梯是采用继电接触器控制的最普通.最大量的一种电梯控制类型.这种控制使用继电器数量大,保护联锁触点多.电气线路复杂.维护工作量大,可靠性差.随着微电子技术的发展,采用无触点控制来代替有触点控制已势在必行.本文基于单片机89SC51来控制各部分电路,采用单片机构成控制系统,可大大降低成本,而且做成专用控制系统,程序被固化,加强了性,提高了可靠性。
二、绪论电梯的概述电梯进入人们的生活已经150年了。
一个半世纪的风风雨雨,翻天覆地的是历史的变迁,永恒不变的是电梯提升人类生活质量的承诺。
1854年,在纽约水晶宫举行的世界博览会上,美国人伊莱沙·格雷夫斯·奥的斯第一次向世人展示了他的发明。
他站在装满货物的升降梯平台上,命令助手将平台拉升到观众都能看得到的高度,然后发出信号,令助手用利斧砍断了升降梯的提拉缆绳。
令人惊讶的是,升降梯并没有坠毁,而是牢牢地固定在半空中——奥的斯先生发明的升降梯安全装置发挥了作用。
“一切安全,先生们。
”站在升降梯平台上的奥的斯先生向周围观看的人们挥手致意。
谁也不会想到,这就是人类历史上第一部安全升降梯。
生活在继续,科技在发展,电梯也在进步。
150年来,电梯的材质由黑白到彩色,样式由直式到斜式,在操纵控制方面更是步步出新——手柄开关操纵、按钮控制、信号控制、集选控制、人机对话等等,多台电梯还出现了并联控制,智能群控;双层轿厢电梯展示出节省井道空间,提升运输能力的优势;变速式自动人行道扶梯的出现大大节省了行人的时间;不同外形——扇形、三角形、半菱形、半圆形、整圆形的观光电梯则使身处其中的乘客的视线不再封闭。
课程设计报告课程名称微机课程设计设计题目电梯模拟运行设计专业班级自动化1041姓名王会学号1004421122指导教师刘文洲蔡长青起止时间2013.12.23---2013.12.31成绩评定电气与信息学院课程设计考核和成绩评定办法1.课程设计的考核由指导教师根据设计表现、设计报告、设计成果、答辩等几个方面,给出各项权重,综合评定。
该设计考核教研室主任审核,主管院长审批备案。
2.成绩评定采用五级分制,即优、良、中、及格、不及格。
3.参加本次设计时间不足三分之二或旷课四天以上者,不得参加本次考核,按不及格处理。
4.课程设计结束一周内,指导教师提交成绩和设计总结。
5.设计过程考核和成绩在教师手册中有记载。
课程设计报告内容课程设计报告内容、格式各专业根据专业不同统一规范,经教研室主任审核、主管院长审批备案。
注:1. 课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。
2. 为了节省纸张,保护环境,便于保管实习报告,统一采用A4纸,实习报告建议双面打印(正文采用宋体五号字)或手写。
12/13学年第二学期《单片机控制系统设计与调试》课程设计任务书指导教师:刘文洲蔡长青班级:自动化1041、2班地点:机房、单片机实验室(实训中心415)课程设计题目:电梯模拟运行设计一、课程设计目的1.本课程设计的目的在于培养学生运用已学的微机控制技术的基础知识和基本理论,加以综合运用,进行微机控制系统设计的初等训练,掌握运用微机控制技术的原理、设计内容和设计步骤,为从事相关的毕业设计或今后的工作需要打下良好的基础。
能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。
2.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。
3. 能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。
二、课程设计内容(包括技术指标)模拟5层楼的电梯运行,对电梯外部按键和内部按键进行识别,经单片机分析后发出控制信号,显示电梯的运行楼层,模拟电梯运行。
1 课题概述1.1 课题的主要研究内容及设计步骤本课题的主要任务是完成一个电梯系统的调度模块,即根据每个楼层不同顾客的按键需求,让电梯做出合理的判断,正确高效地知道电梯完成各项载客任务。
根据此任务,本课题需要研究的内容有:1、根据系统的技术要求,进行系统硬件的总体方案设计;2、学习单片机的相关知识,并且加以运用;3、选择恰当的芯片,并对其内部协议有所掌握,便于应用。
4、研究C语言编程,并且规定电梯的工作规则,用C语言加以实现;5、对软件和硬件进行调试,让其协调工作,完成指定任务。
结合以上内容,本课题的设计方案步骤如下:关于硬件部分:首先,对实际的电梯系统进行模拟,一般情况下,一个电梯应该具备相关按键、显示二极管、数码管等,由于这是一个调度模块,故没有设计具体的轿厢等机械部分。
然后,结合这些实物,选择恰当的芯片,并分成若干模块,安排好各自之间的关系。
接着,要完成电路图的设计,画出PCB板,焊接相关器件后进行硬件调试,看是否好用并加以适当的更正。
关于软件部分:关于电梯调度时所遵循的原则作出规定,其必须基于高效与人性化两个原则。
最后是使用C语言将规定程序化,以便电梯真正的运作。
当然,二者的关系并不是分离的,它们是相辅相成,硬件依据软件来验证,软件依据硬件来调试。
经过一个个的发现问题、一个个的解决问题,最终做出完美的电梯调度模块。
1.2课题的开发环境简介1.2.1 电路图制作软件proteus 7.2Proteus是目前最好的模拟单片机外围器件的工具,因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
1.2.2 C51的程序开发软件KeilKeil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。
基于单片机的电梯控制设计随着现代城市的发展,高层建筑的数量不断增加,电梯已成为居民出行的必备工具。
电梯控制系统是电梯的核心部分,其合理、安全、高效的控制对电梯的运行起着决定性的作用。
本文基于单片机,对一种现代化电梯控制系统进行了设计和实现,并逐步介绍其原理和具体实现方法。
1.设计思路基于单片机的电梯控制系统,基于先进、高效的现代技术,采用数字、电子、计算机等技术,集成了电梯运行的各项功能,如门控、运行控制、限速保护、人员安全保护等。
结合具体使用场景,通过对电梯各种状态的控制,实现电梯的自动运行。
2.设计方案此次设计采用基于单片机的电梯控制方案,通过采用传感器、驱动器等电子元器件,真正实现了电梯的智能化控制。
主要由以下五个部分组成:(1)控制部分:采用AT89C52单片机作为主控制器,负责控制电梯各部分。
通过对单片机程序的编写,对各个部分进行精确的控制和调整。
(2)物理部分:即电梯的各个部分,包括电机、减速钢丝绳、限速器、轮架、门体等。
(3)传感器部分:通过安装在电梯厅和轿厢内的传感器,探测电梯的各种状态信息,例如:电梯内外乘客数量、电梯运行方向、门体状态等。
实时将这些状态码转换成数字数据传送到单片机中,实现对电梯运行状态的掌控。
(4)显示部分:将电梯运行状态的各种信息,通过LED数码管、液晶显示等形式,进行实时显示。
这部分可以为乘客提供明确的电梯状态信息,提高电梯使用效率和安全性。
(5)交互部分:如何使乘客和电梯进行有效的交互,减少误操作,是电梯控制设计的核心关键。
通过电子开门器、按钮等,实现乘客与电梯交互的整个过程。
3.实现过程(1)设计程序代码在AT89C52单片机中,通过程序设计实现电梯的各部分精确控制。
代码的设计需要考虑到电梯各种状态,例如:乘客进出电梯、电梯起升、降落等。
通过逻辑程序的编写,实现扫描电梯状态,并对电梯的运行进行掌控。
(2)制作原型通过根据设计方案,搭建各个部分的物理模型,并进行调试和安装。
基于单片机的电梯控制系统方案设计本方案以STC89C52芯片为核心,模拟了电梯控制系统所需的一些基本功能,通过按键选择楼层,数码管显示实时楼层数,LED灯组成的箭头指示上下方向。
同时,采用uln2003来驱动步进电机转动,以步进电机的转动方向来模拟电梯运行方向。
根据电梯运行到不同的楼层,产生不同的电平量,以此实现对电梯的控制。
该方案软硬件结构设计简单可靠,实现了对电梯的运行控制。
标签:电梯;步進电机;STC89C52引言目前电梯控制系统大多采用继电器或者可编程控制器(PLC)的控制方式,存在着成本高,需要三相供电等缺点,本方案给出了一种基于单片机的电梯模型控制系统。
以单片机为核心,再辅以适当的硬件电路和控制程序来检测和控制整个电梯的信号,具有成本低、通用性强、灵活性大、扩展容易及易于实现复杂控制等优点。
1 总计设计方案本方案采用开关作为电梯内外的请求按键,按键和单片机的插针接口相连,按键按下为低电平,将信号传送到单片机,单片机根据各接口的信号进行判断处理,处理完毕后控制步进电机运动,实现电梯的上下运动,采用传感器确定电梯所在的楼层数及电梯准确停止的位置,用七段数码管显示电梯所在楼层,用LED 灯显示电梯的上下运行状态。
本方案采用STC89C52为控制电梯的单片机[1]。
考虑到经济性与实用性,选择28BYJ48型步进电机。
采用5V直流电源为单片机、指示灯、数码管供电。
总体设计框图如图1所示。
本方案主要由5大部分组成:键盘模块、单片机控制电路、显示模块电路、电源模块电路、步进电机驱动电路。
其中单片机控制电路主要包含复位电路,电路复位后楼层显示数字 1 表示电梯此时在一楼,而电梯楼层位置是由延时电路控制的,延时电路有2秒延时,每层之间通过2秒延时控制即每延时2秒表示电梯走了一层,同时显示相应的上下箭头指示。
本方案的延时部分主要是由软件控制的。
电梯的状态是通过点阵组成的上下箭头和数字显示的。
键盘电路采用独立式按键。
基于单片机的电梯控制模型设计
电梯是现代城市生活中不可或缺的交通工具,可以方便地将人们从一层楼移到另一层楼。
但是,如果电梯没有合适的控制系统,将会导致一系列的问题,比如电梯的过载、运行不平稳等等。
基于单片机的电梯控制模型设计可以解决这些问题。
首先,我们需要考虑电梯的控制模型。
在电梯中,需要实现的基本功能包括上行、下行、停止等等。
这些功能可以通过单片机的控制程序实现。
首先,我们需要对电梯运行的状态进行监控,包括电梯的位置和当前载重情况,将其作为输入信号传递给单片机,然后单片机进行判断,根据当前状态进行控制。
其次,我们需要考虑电梯的安全问题。
电梯运行中需要注意过载、防止急停等问题,对此,可以通过单片机的程序控制电梯的载重和速度,避免电梯的过载和急停现象。
在电梯的运行过程中,需要实现的功能还有接梯,即在每一层楼进行人员上下电梯的控制。
这需要在电梯门的开关和电梯本身的运行状态中进行判断,如果有人乘坐或者等待,就需要开启或关闭电梯门,同时根据楼层传感器的信号判断电梯的上行或下行。
在设计基于单片机的电梯控制程序时,还需要考虑一些额外的功能,比如异常处理、维修等。
在电梯故障时,需要进行异常处理,可以通过单片机程序对异常问题进行检测和处理;而维修功能可以检测各种传感器是否工作正常,确保电梯的顺畅运行。
总之,基于单片机的电梯控制模型设计可以保证电梯安全、顺畅地运行。
而且,这个模型还可以通过网络进行监控、调试和升级,方便工程师进行维护和修理。
在未来的电梯技术中,这个模型可以作为参考,提升电梯的可靠性、安全性和智能化。
基于单片机的电梯控制系统设计随着现代社会的快速发展,电梯已成为人们日常生活中不可或缺的运输工具。
为了提高电梯的运行效率,保证其安全可靠性,设计一种基于单片机的电梯控制系统。
该系统以单片机为核心,结合传感器、按键、显示等模块,实现对电梯的运行状态、楼层信号、呼梯信号的实时监控与显示。
一、系统硬件设计1、单片机选择本设计选用AT89S52单片机作为主控芯片,该芯片具有低功耗、高性能的特点,内部集成了丰富的外围设备,方便开发与调试。
2、输入模块设计输入模块主要包括楼层传感器和呼梯按钮。
楼层传感器采用光电式传感器,安装在各楼层,用于检测电梯的运行状态和位置;呼梯按钮安装在电梯轿厢内,用于收集用户的呼梯信号。
3、输出模块设计输出模块主要包括显示模块和驱动模块。
显示模块采用LED数码管,用于实时显示电梯的运行状态、楼层位置等信息;驱动模块包括继电器和指示灯,用于控制电梯的运行和指示状态。
4、通信模块设计通信模块采用RS485总线,实现单片机与上位机之间的数据传输与通信。
二、系统软件设计1、主程序流程图主程序主要实现电梯控制系统的初始化、数据采集、处理与输出等功能。
主程序流程图如图1所示。
图1主程序流程图2、中断处理程序中断处理程序主要包括外部中断0和定时器0的中断处理。
外部中断0用于处理楼层传感器的信号,定时器0用于计时和速度控制。
三、系统调试与性能分析1、硬件调试首先对电路板进行常规检查,包括元器件的焊接、电源的稳定性等;然后分别调试输入、输出、通信等模块,确保各部分功能正常。
2、软件调试在硬件调试的基础上,对软件进行调试。
通过编写调试程序,检查各模块的功能是否正常;利用串口调试工具,对通信模块进行调试。
3、性能分析经过调试后的电梯控制系统,其性能稳定、运行可靠。
该系统能够实现对电梯运行状态、楼层信号、呼梯信号的实时监控与显示,并且具有速度快、安全可靠等特点。
该系统还具有成本低、易于维护等优点,适用于各种场合的电梯控制。
课题名称:基于单片机的电梯控制系统设计一、课题的目的及意义电梯是标志现代物质文明的垂直运输工具、是机电一体化的复杂运输设备。
它涉及电子技术、机械工程、电力电子技术、微电脑技术、电力拖动系统和土建工程等多个科学领域。
尽管电梯的品种繁多,但目前使用的电梯绝大多数为电力拖动、钢丝绳曳引式结构。
从电梯各构件部分的功能上看,可分为八个部分:曳引系统、导向系统、轿厢、门系统、重量平衡系统、电力拖动系统、电气控制系统和安全保护系统,而本次课题内容就是基于单片机的电梯控制系统设计。
随着我国经济的发展,城市中涌现出越来越多的高层建筑,而与之配套的电梯已成为人们日常生活中不可缺少的工具。
同时,由于国家老龄化问题目益突出,低层住宅建筑(一般5层左右)同样也有使用电梯的要求。
所以电梯控制的研究在现代社会有着很重要的作用,作为一名电专业的学生,这些正是自动化专业所学习的内容,又是自己的兴趣所在。
为了以后更好的工作和更深入的理解基于单片机的电梯控制系统,所以选择了该课题。
2、国内外研究现状及单片机的特点国外:20世纪初,美国出现了曳引式电梯,钢丝绳悬挂在曳引轮上,一端与轿厢连接,而另一端与对重连接,随曳引轮的转动,靠钢丝绳与曳引轮槽之间的摩擦力,使轿厢与对重作一生一降的相反运动。
显然,钢丝绳不用缠绕,因此钢丝绳的长度和股数均不受控制,当然轿厢的载重量以及提升的高度就得到了提高,从而满足了人们对电梯的使用需求。
因此,近一百年来,曳引电梯一直受到重视,并发展沿用至今。
在后来的几十年里,通过变换电动机级数的调速方法来调整电梯运行速度的技术相继研制成功,1933年,世界上第一台运行速度为6 m/s 的电梯被安装在美国纽约的帝国大厦。
第二次世界大战后,建筑业的发展促使电梯进入了高峰发展时期,代表新技术的电子技术被广泛应用于电梯领域的同时,陆续出现了群控电梯、超高速电梯。
随着电力电子技术的发展,晶闸管变流装置越来越多地用于电梯系统,使电梯的拖动系统简化,性能提高。
80C51基于单片机的电梯控制器设计_毕业设计(论文)单片机技术课程设计报告课题名称基于单片机的电梯控制器设计系别理学院专业 _电子信息科学与技术_2013年 6月 20 日毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
二○一四~二○一五学年第一学期信息科学与工程学院自动化系课程设计报告书姓名:余义学号:201204134019班级:自动化1201班课程名称:微机原理与应用课程设计指导教师:程磊目录(一)前言 (1)(二)现代电梯概述 (3)(三)硬件部分设计 (6)(四)软件部分设计 (12)(五)电梯运行界面 (52)(六)设计总结与感悟 (56)(七)参考文献 (57)电梯仿真程序一、前言:本电梯仿真程序采用的是一个基于单片机及其相关外设,编程语言采用汇编与C语言结合的方式,通过矩阵键盘线反选法输入楼层,上、下行等控制信号,经I\O口读入,进行相关实时控制,软硬件结合的仿真系统,输出设备包括由CD4511驱动显示楼层的7段数码管,显示实时信息的显示屏LCD12864,由PWM控制显示电梯门开关的舵机,以及由I\O口间接控制的驱动电机正反转双桥驱动电路等几个部分组成。
可以实现真实电梯中,任意层呼叫,目的层到达按要求顺序到达,开关门,无输入自动回1层等一系列功能,并实时显示当前电梯运行状态,关于真实电梯门控光幕装置,电机自动抱闸平层等部分,由于知识不足,没有足一实现,但会在接下来的专业知识学习过程中不断完善,同时也希望得到程老师的指导。
二、现代电梯概述:电梯是一种以电动机为动力的垂直升降机,装有箱状吊舱,用于多层建筑乘人或载运货物。
也有台阶式,踏步板装在履带上连续运行,俗称自动电梯。
服务于规定楼层的固定式升降设备。
它具有一个轿厢,运行在至少两列垂直的或倾斜角小于15°的刚性导轨之间。
轿厢尺寸与结构形式便于乘客出入或装卸货物,本次微机课程设计电梯仿真选用的是垂直升降梯。
2.1、电梯功能现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。
这些部分分别安装在建筑物的井道和机房中。
通常采用钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。
单片机电梯控制课设任务电梯是我们现代生活中不可或缺的交通工具之一。
电梯的控制是由电梯控制系统来完成的,而单片机电梯控制系统则是其中的一种常见实现方式。
本文将介绍单片机电梯控制的课设任务,并对其进行分析。
一、课设要求单片机电梯控制课设要求学生设计一套基于单片机的电梯控制系统。
具体要求如下:1. 实现电梯的上下行和开关门等基本功能;2. 考虑电梯的安全性,防止电梯在超重、故障等情况下发生危险;3. 考虑电梯的舒适性,优化电梯的运行效率,减少电梯的等待时间和行程时间;4. 考虑电梯的节能性,通过控制电梯的运行方式,减少能源的消耗;5. 要求使用C语言编程,通过仿真软件进行仿真测试。
二、实现思路1. 硬件设计硬件设计包括电梯控制板的设计和电梯控制电路的设计。
电梯控制板需要包括单片机、LCD显示屏、按键、蜂鸣器等模块,用于控制电梯的运行和显示电梯的状态。
电梯控制电路需要包括电机驱动电路、传感器电路、限位开关等模块,用于检测电梯的状态和控制电梯的运行。
2. 软件设计软件设计主要包括电梯控制算法的设计和程序编写。
电梯控制算法需要考虑电梯的运行方式、电梯的调度策略、电梯的故障处理等方面。
程序编写需要将算法转化为可执行的代码,并通过仿真软件进行仿真测试。
三、实现步骤1. 确定电梯的基本功能和运行方式,包括上下行、开关门、报警等功能;2. 设计电梯控制板和电梯控制电路,包括单片机的选型、电机驱动电路的设计、传感器电路的设计等;3. 实现电梯控制算法,包括电梯的调度策略、电梯的故障处理等;4. 编写程序代码并进行仿真测试,根据测试结果进行调试和优化;5. 考虑电梯的安全性、舒适性和节能性,根据需要进行优化。
四、实现难点1. 电梯的调度策略设计,包括优化电梯的运行效率和减少电梯的等待时间;2. 电梯的故障处理,包括电梯在超重、故障等情况下的处理方式;3. 硬件设计中电机驱动电路和传感器电路的设计,需要考虑电机的功率和传感器的精度等因素。
单片机原理与应用技术课程设计报告基于单片机控制的电梯自动控制系统专业班级:姓名:时间:指导教师:基于单片机控制的电梯自动控制系统1.设计目的与要求1.1 基本功能(1)显示:本设计要求实现6层控制,实时显示电梯所在楼层位置。
(2)升降控制:采用一台电动机的正反转来实现电梯的升降。
(3)具备不可逆响应的功能:电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向呼叫均无效。
1.2 扩展功能(1)可增加人性化的按键语音服务功能。
(2)可增加遥控或感应操作功能。
2.设计内容(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩在规定时间内,完成叙述并回答问题。
- 2 -目录1 引言 ·······································································································- 4 -2 电梯控制系统原理················································································- 4 -3 总体设计方案························································································- 5 -3.1 设计思路·······················································································- 5 -3.1.1 方案比较··············································································- 5 -3.1.2 方案确立··············································································- 5 -3.2 设计方框图···················································································- 6 -4 电梯控制系统单元电路的设计 ····························································- 6 -4.1 单片机最小系统···········································································- 7 -4.2 信号输入电路···············································································- 7 -4.2.1 内外请求输入电路 ······························································- 8 -4.2.2 厢体位置模拟输入电路·······················································- 8 -4.3 信号模拟输出电路 ·······································································- 9 -4.3.1 楼层显示电路 ······································································- 9 -4.3.2 电梯外部请求显示电路·····················································- 10 -4.3.3 电梯方向及开关门电路·····················································- 11 -5 系统软件设计······················································································- 12 -5.1 初始化程序·················································································- 12 -5.2 各楼层子程序·············································································- 12 -5.3 显示子程序·················································································- 12 -6 结束语 .................................................................................................- 14 - 参考文献 .................................................................................................- 14 - 附录一 .....................................................................................................- 16 - 附录二 (17)- 3 -基于单片机原理的电梯自动控制系统摘要:本文介绍了基于单片机的电梯控制系统,硬件部分主要由单片机最小系统模块、电梯内外电路按键矩阵模拟检测模块、电梯外请求发光管显示模块、楼层显示数码管模块、电梯上下行及开关门模拟显示模块等5部分组成。
基于单片机的电梯控制系统的设计电梯控制系统被广泛应用于现代化城市、商业综合体、大型住宅等地方,它的安全性和便捷性受到广泛关注。
基于单片机电梯控制系统的出现,完美地解决了一系列问题,如传统微型电梯控制系统存在的布线麻烦、易受电磁干扰、系统资源不足等问题。
下面,本文将详细介绍基于单片机的电梯控制系统。
一、设计思想本控制系统采用AT89S51单片机作为控制器,其使用了数字电路和模拟电路相结合的设计方法,从而实现了对电梯的自动控制。
该系统集成了多种保护措施,具有高度的可靠性、抗干扰能力和波动能力,是一种非常实用的电梯控制系统。
二、硬件设计(1)AT89S51单片机该单片机采用8位CMOS微控制器,程序存储器容量为32KB,数据存储器容量为2KB,支持定时器/计数器、串行通信接口等外设。
(2)电梯电机电梯电机是电梯运行的关键部件之一,常见的电梯电机有交流电机和直流电机两种。
设计时需根据实际需要选择合适的电机,以实现电梯的起升和运行。
(3)门禁控制器门禁控制器是门禁装置的核心部件之一,用于控制电梯门的开启和关闭,保证电梯的安全性。
(4)电源模块电源模块提供电梯系统所需的稳定可靠的电源。
(5)其他模块还需要设计开关模块、指示灯模块、蜂鸣器模块等其他模块,以实现电梯的正常控制和提示。
三、软件设计该系统总共包含三个模块,即控制模块、运算模块和存储模块。
(1)控制模块第一步:启动电梯,检查电路可靠性,门状态、里程表、楼层显示等各项需要监测的装置是否正常工作。
第二步:选择电梯的运行方向和终点楼层。
第三步:通过监测电梯门开关的状态来控制电梯门的开关以及上下行电梯。
(2)运算模块运算模块负责楼层选取、电梯运转等计算工作。
具体方法:1.通过扫描各楼层的按钮输入,分析电梯所选楼层的方向。
2.确定电梯到达的楼层。
3.开关电梯门。
4.根据现场需求继续运行或停止。
(3)存储模块存储模块主要用于存储电梯的相关参数和状态信息,如电梯所在楼层、电梯的运行方向、上升/下降时间、停留时间等。
单片机课程设计-- 基于单片机的电梯控制系统单片机综合实验实验报告学院计算机与电子信息学院专业电子信息工程班级电信11-2班姓名丘海健学号 11034030234 实验题目基于单片机的电梯控制系统系统环境 Proteus 7 指导教师左敬龙实验时间 2013年10月28日至 2013年11月01日实验报告评分:_______基于单片机的电梯控制系统设计班级:电信11-2 姓名:丘海健指导老师:左敬龙摘要:本文介绍了一种采用单片AT89C52芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现电子设计的方法,利用单片机编程实现功能,简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。
硬件部分主要由单片机的最小模块、电梯内外按钮控制模块、数码管显示楼层模块、发光二极管显示目的楼层模块、报警显示模块组成。
软件部分使用kiel软件进行C语言程序编写,用proteus软件进行仿真调试。
本设计具有电梯控制系统所需的一些基本功能,能通过方向按键选择方向,能通过数字按键选择楼层,数码管显示实时楼层数,电动机控制部分采用直流电机及H桥驱动电路,使电梯箱能上下运动。
硬件设计简单可靠,结合软件,基本实现了五层电梯运行的模拟仿真。
关键词:AT89C52;单片机;电梯控制系统; C语言1 引言随着现代高科技的发展,住房和办公用楼都已经逐渐向高层发展。
电梯是高层宾馆、商店、住宅、多层仓库等高层建筑不可缺少的垂直方向的交通运输工具。
因此电梯在我们的生活中起着举足轻重的作用。
电梯已不仅是一种生产环节中的重要设备,更是一种人们频繁乘用的交通运输设备。
由于传统的电梯运行逻辑控制系统采用的是继电器逻辑控制线路。
采用这种控制线路,存在易出故障、维护不便、运行寿命较短、占用空间大等缺点。
从技术发展来看,这种系统将逐渐被淘汰。
而单片机价格相当便宜,由单片机设计的控制系统可以随着设备的更新而不断修改完善,更完美的实现设备的升级。
摘要随着社会的不断发展,楼房越来越高,而电梯则成了高层楼房的必须设备。
电梯从手柄开关操纵电梯、按钮控制电梯发展到了现在的群控电梯,为高层运输做出了不可磨灭的贡献。
单片机在电梯升降控制上的应用主要体现在它的逻辑开关控制功能。
由于单片机具有逻辑运算,计数和定时以及数据输入输出的功能,在电梯升降过程中,各种逻辑开关控制与单片机很好的结合,很好的实现了对升降的控制。
本文主要讨论研究利用Atmel 公司的51系列单片机AT89C51和四相步进电机对电梯的升降进行控制,形成电梯控制系统。
关键词:电梯 AT89C51 电梯升降控制四相步进电机 C语言程序设计第一章绪论1.1单片机简介近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。
本系统采用Atmel 公司的51系列单片机AT89C51作为主控芯片。
其特征如下:单片机 AT89C518位微控制器 8K字节在系统可编程 Flash主要性能与MCS-51单片机产品兼容8K字节在系统可编程Flash存储器1000次擦写周期全静态操作:0Hz~33Hz三级加密程序存储器32个可编程I/O口线三个16位定时器/计数器八个中断源全双工UART串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定时器双数据指针掉电标识符功能特性描述AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
一、课程设计的性质和目的通过课程设计,进行硬软件设计的方法和技能训练,巩固在课堂上学到的有关硬件电路设计和相应程序设计的基本知识和基本方法,通过具体课题的训练,达到能独立阅读、查阅资料、软硬件设计和调试完善特定功能的目的。
二、课程设计的要求1、遵循硬件设计模块化。
2、要求通过自制PCB板、或万能板、或面包板设计实物。
3、程序设计结构化。
4、要求程序结构合理,程序简明易懂,有必要的注释。
三、主要仪器设备及软件PC机、Keil软件、ALTIUM DESINGERS09(PROTEL99)、Proteus 7绘图软件及仿真等。
四、课程设计题目及要求题目:基于单片机的电梯控制器研制要求:采用单片机控制的方法,设计一个能自动控制一台电梯的控制电路。
有语音提示。
控制端用LED模块显示电梯运行情况。
PCB制板并编写各子程序。
五、课题分析及设计思路1、课题研究的内容随着科技的发展,微型计算机领域的不断进步,将使得将来电梯的体积大大减小,功能不断完善,过程的控制更平稳、可靠、抗干扰性能增强、机械与电气部件被机结合在一个设备内,把仪表、电子和计算机的功能综合在一起。
因此微型计算机控制技术将会成为电梯运行中的关键技术。
本次设计的主要内容是以单片机为主控制器的电梯控制系统。
本来电梯系统是一个相对复杂的系统,由于能力和经验有限,所以只能实现基本的功能如:层站呼叫、自动停层、轿厢命令响应等。
通过单片机输出电压通过驱动电路然后控制电梯拖动。
在此,本文以五层电梯为研究对象,选用52单片机(该机芯片选为AT89C52)作为其控制器,研究微机控制梯系统的设计方法。
根据问题的提出、意义和文献综述,本课题研究的具体内容包括以下四个方面:(1)对电梯系统常用的控制方法的研究(2)电梯控制系统硬件组成及其原理(3)电梯的单片机系统软件设计(4)电梯在信号传输中遇到的问题2 总体设计方案2.1设计思路本次设计的基本思想是采用AT89C52单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。
基于单片机的电梯模拟控制系统一.任务要求能够模拟控制一个6层楼梯的电梯的运行。
具体要求如下:1.电梯平时没有接到命令时候或者执行完命令后停在1楼,门关闭.。
2.电梯运行速度2秒一层楼3.电梯门在开启的情况下没有收到命令10秒中后自动关闭。
在运动中门必须关闭,(最后3秒可以设置音响警告信号)4.电梯控制器满足实际电梯的运行要求,电梯在运行的时候可以最多记住6个命令。
并且综合考虑公平性(先按键先执行)和有效性(完成任务的总的行走路径最短)来执行。
二.实验材料1.80c51单片机一块2.74ls21与门5个3.按键16个,共阴数码管一个,发光二极管2个,导线若干。
三.设计思路本电路主要由3大部分电路组成:,电梯控系统,楼层显示电路,按键电路,电路复位后楼层显示数字1 表示电梯此时在一楼,显示电路数码管显示,电梯楼层位置是由延时电路控制的,延时电路包括3秒延时和5秒延时,每层之间通过5秒延时控制即每延时秒表示电梯走了一层,3秒延时是控制电梯的开门时间,3秒延时后电梯关门继续运行。
电梯状态是通过两个发光管显示的,上行灯亮表示电梯在向上运行,下行灯亮表示电梯在向下运行。
键盘电路采用16个按键,其中10个按键是各层楼外呼按键,6个按键是电梯内部的选择键。
电梯的正常工作是通过对单片机写入程序控制的。
四.设计程序#include<reg52.h>#define MAXFLOOR 6unsigned char code LED_CODES[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d}; // 0~6//电梯外面的按键上下键sbit F6D=P1^0;sbit F1U=P1^1;sbit F2D=P1^2;sbit F2U=P1^3;sbit F3D=P1^4;sbit F3U=P1^5;sbit F4D=P1^6;sbit F4U=P1^7;sbit F5D=P3^0;sbit F5U=P3^1;//电梯内的按键sbit F1=P2^0;sbit F2=P3^3;sbit F3=P3^4;sbit F4=P3^5;sbit F5=P2^1;sbit F6=P2^2;//指示灯sbit ledu=P3^7;sbit ledd=P3^6;sbit open=P2^3; //开门键sbit close=P0^7; //关门键bit dir=1,stop=0; //dir表示1为向上,0为向下;stop表电梯是否停止unsigned char nf=1; //当前楼层unsigned char cf=1; //要去楼层unsigned char df; //楼层差(电梯停止依据):df=|cf-nf|unsigned char tf; //暂存当前楼层(显示码指针):tf=nfunsigned char flag,count=0; //flag=1表示正在运行;count=乘坐时计数值unsigned int timer1=0,timer2=0; //timer1为楼层间运行时间计数值,timer2为等待计数值unsigned char call_floor[7]={0,0,0,0,0,0,0}; //存储每层楼的信息,1为有人呼叫或者有人前往//主程序void select_next();void step(bit dir);void delay(unsigned int z);void main(void){P0=LED_CODES[1];TH0=0x3C;TL0=0xB0;TMOD=0x01;//工作方式1ET0=1;//允许定时器中断EA=1;//中断总允许EX0=1;//允许外部0中断IT0=1;//为脉冲触发方式,下降沿有效while(1){if(!flag&&!stop){select_next(); // 决定电梯去哪一层step(dir); // 电梯启动}else if(stop){timer2=0;TR0=1; //启动定时器/计数器工作while(timer2<100&&stop);TR0=0;timer2=0;stop=0;}}}//选择当前要去的楼层子程序void select_next(){char i;if(nf==MAXFLOOR){dir=0;}else if(nf==1){dir=1;}if(dir==0){if(call_floor[nf]==1) //要去的为当前层,即只需延时5s{call_floor[nf]=0;stop=1;return;}for(i=nf-1;i>=1;i--) //向下运行时查找下一个要去的楼层if(call_floor[i]){cf=i;return;}dir=1;for(i=nf+1;i<=MAXFLOOR;i++) //没有向下走的人,即反向运行if(call_floor[i]){cf=i;return;}dir=0;cf=1; //经过上面的判断此处表示电梯没有人,默认停在一楼}if(call_floor[nf]==1){call_floor[nf]=0;stop=1;return;}for(i=nf+1;i<=MAXFLOOR;i++)if(call_floor[i]){cf=i;return;}if(i==7){dir=0;}}//启动电梯子程序void step(bit dir){if(cf==nf)return; //返回到主调函数else if(!flag){flag=1;delay(50);if(dir==1){ledu=0;ledd=1;}else{ledd=0;ledu=1;}timer1=0;TR0=1;}}void delay(unsigned int z) //延时程序{unsigned int x,y;for(x=z;x>0;x--){for(y=125;y>0;y--);}}//定时0中断,void time0_int() interrupt 1{TH0=0x3C;TL0=0xB0;timer1++;timer2++;if(flag){if(timer1==20) //到达一个楼层延时1s{timer1=0;if(dir)nf++;elsenf--;call_floor[nf]=0;flag=0;TR0=0;P0=LED_CODES[nf]; //显示当前楼层if(cf==nf) //到达呼叫楼层,关电机{TR0=0;ledu=ledd=1;stop=1;return;}}}}//外部中断0服务子程序void int0() interrupt 0{if(F6D==0)call_floor[6]=1;else if(F1U==0)call_floor[1]=1;else if(F2D==0||F2U==0)call_floor[2]=1;else if(F3D==0||F3U==0)call_floor[3]=1;else if(F4D==0||F4U==0)call_floor[4]=1;else if(F5D==0||F5U==0)call_floor[5]=1;else if(F6==0){call_floor[6]=1;stop=0;} else if(F1==0){call_floor[1]=1;stop=0;} else if(F2==0){call_floor[2]=1;stop=0;} else if(F3==0){call_floor[3]=1;stop=0;} else if(F4==0){call_floor[4]=1;stop=0;} else if(F5==0){call_floor[5]=1;stop=0;} 五.仿真效果六.设计小结本次课程设计是对传统设计电梯的部分改进,可以降低电梯的设计成本,实现楼层快速通行的模拟控制。
二○一四~二○一五学年第一学期信息科学与工程学院自动化系课程设计报告书姓名:余义学号:201204134019班级:自动化1201班课程名称:微机原理与应用课程设计指导教师:程磊目录(一)前言 (1)(二)现代电梯概述 (3)(三)硬件部分设计 (6)(四)软件部分设计 (12)(五)电梯运行界面 (52)(六)设计总结与感悟 (56)(七)参考文献 (57)电梯仿真程序一、前言:本电梯仿真程序采用的是一个基于单片机及其相关外设,编程语言采用汇编与C语言结合的方式,通过矩阵键盘线反选法输入楼层,上、下行等控制信号,经I\O口读入,进行相关实时控制,软硬件结合的仿真系统,输出设备包括由CD4511驱动显示楼层的7段数码管,显示实时信息的显示屏LCD12864,由PWM控制显示电梯门开关的舵机,以及由I\O口间接控制的驱动电机正反转双桥驱动电路等几个部分组成。
可以实现真实电梯中,任意层呼叫,目的层到达按要求顺序到达,开关门,无输入自动回1层等一系列功能,并实时显示当前电梯运行状态,关于真实电梯门控光幕装置,电机自动抱闸平层等部分,由于知识不足,没有足一实现,但会在接下来的专业知识学习过程中不断完善,同时也希望得到程老师的指导。
二、现代电梯概述:电梯是一种以电动机为动力的垂直升降机,装有箱状吊舱,用于多层建筑乘人或载运货物。
也有台阶式,踏步板装在履带上连续运行,俗称自动电梯。
服务于规定楼层的固定式升降设备。
它具有一个轿厢,运行在至少两列垂直的或倾斜角小于15°的刚性导轨之间。
轿厢尺寸与结构形式便于乘客出入或装卸货物,本次微机课程设计电梯仿真选用的是垂直升降梯。
2.1、电梯功能现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。
这些部分分别安装在建筑物的井道和机房中。
通常采用钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。
电梯要求安全可靠、输送效率高、平层准确和乘坐舒适等。
电梯的基本参数主要有额定载重量、可乘人数、额定速度、轿厢外廓尺寸和井道型式等。
简单使用方法(紧急情况下面有解决方法)载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作电梯电梯结构图电梯内部结构图驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。
2.2、运行过程:1、在乘梯楼层电梯入口处,根据自己上行或下行的需要,按上方向或下方向箭头按钮,只要按钮上的灯亮,就说明你的呼叫已被记录,只要等待电梯到来即可。
2、电梯到达开门后,先让轿厢内人员走出电梯,然后呼梯者再进入电梯轿厢。
进入轿厢后,根据你需要到达的楼层,按下轿厢内操纵盘上相应的数字按钮。
同样,只要该按钮灯亮,则说明你的选层已被记录;此时不用进行其他任何操作,只要等电梯到达你的目的层停靠即可。
3、电梯行驶到你的目的层后会自动开门,此时按顺序走出电梯即结束了一个乘梯过程。
三、硬件部分设计3.1、总电路图:3.2、单片机最小系统:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.下面给出一个51单片机的最小系统电路图.3.3、矩阵键盘:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,1.键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V 电源上。
无按键按下时,行线处于高电平的状态,而当有按键按下时,行线电平与此行线相连的列线电平决定。
2.行列扫描法原理:第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。
第二步,在第一步判断有键按下后,延时10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下一步,否则返回第一步重新判断。
第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms 的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。
3.4、CD4511当前楼层显示CD4511 是一片CMOS BCD-锁存/7 段译码/驱动器,用于驱动共阴极LED (数码管)显示器的BCD 码-七段码译码器。
它具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。
可直接驱动共阴LED数码管。
以下是CD4511数码管驱动原理电路图。
是CD4511实现LED与单片机的并行接口方法。
3.5、LCD12864不带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4 行16×16 点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
3.6、电机双桥驱动系统一、H桥驱动电路图4.12中所示为一个典型的直流电机控制电路。
电路得名于“H桥驱动电路”是因为它的形状酷似字母H。
4个三极管组成H的4条垂直腿,而电机就是H中的横杠(注意:图4.12及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。
如图所示,H桥式电机驱动电路包括4个三极管和一个电机。
要使电机运转,必须导通对角线上的一对三极管。
根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。
图4.12 H桥驱动电路要使电机运转,必须使对角线上的一对三极管导通。
例如,如图4.13所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。
按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。
当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。
图4.13 H桥电路驱动电机顺时针转动图4.14所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。
当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。
图4.14 H桥驱动电机逆时针转动二、使能控制和方向逻辑驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。
如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。
此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。
基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。
图4.155 所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门。
4个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。
而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只有一个三极管能导通。
(与本节前面的示意图一样,图4.15所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的。
)图4.15 具有使能控制和方向逻辑的H桥电路采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。
如果DIR-L信号为0,DIR-R信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机(如图4.16所示);如果DIR-L信号变为1,而DIR-R信号变为0,那么Q2和Q3将导通,电流则反向流过电机。
四、软件部分设计:4.1、程序框图否是否否是是硬件上电待命 显示提示,开发者、版本信息键盘输入目的楼层结束键是否按下 记录并该楼层标志位 程序开始运行While(1){...} 电机运行,到达下一层 当前楼层标志位加一并与存储楼层对比 若相等 电机停转,电梯门开,延时lcd 显示,7段数码管显示 电梯门,电机运行,延时lcd 显示,7段数码管显示 运行至最后目 的楼层 键盘扫描 继续否 结束待命4.2、C51单片机汇编、C语言混编程序:; 电梯。
SRC generated from: 电梯.c; COMPILER INVOKED BY:; C:\Keil\C51\BIN\C51.EXE 电梯.c BROWSE DEBUG OBJECTEXTEND $NOMOD51NAME 电梯P0 DATA 080HP1 DATA 090HP2 DATA 0A0HP3 DATA 0B0HT0 BIT 0B0H.4AC BIT 0D0H.6T1 BIT 0B0H.5T2 BIT 090H.0EA BIT 0A8H.7IE DATA 0A8Hclock BIT 0B0H.0EXF2 BIT 0C8H.6RD BIT 0B0H.7ES BIT 0A8H.4IP DATA 0B8HRI BIT 098H.0INT0 BIT 0B0H.2CY BIT 0D0H.7TI BIT 098H.1INT1 BIT 0B0H.3 RCAP2H DATA 0CBH PS BIT 0B8H.4SP DATA 081HT2EX BIT 090H.1OV BIT 0D0H.2RCAP2L D ATA 0CAHC_T2 BIT 0C8H.1WR BIT 0B0H.6RCLK BIT 0C8H.5TCLK BIT 0C8H.4 SBUF DATA 099H PCON DATA 087H SCON DATA 098H TMOD DATA 089H TCON DATA 088HIE0 BIT 088H.1IE1 BIT 088H.3B DATA 0F0HCP_RL2 BIT 0C8H.0ACC DATA 0E0H servo_door BIT 0B0H.7 ET0 BIT 0A8H.1ET1 BIT 0A8H.3TF0 BIT 088H.5ET2 BIT 0A8H.5TF1 BIT 088H.7TF2 BIT 0C8H.7RB8 B IT 098H.2TH0 D ATA 08CHEX0 B IT 0A8H.0IT0 BIT 088H.0TH1 D ATA 08DHTB8 BIT 098H.3EX1 B IT 0A8H.2IT1 BIT 088H.2TH2 D ATA 0CDHP BIT 0D0H.0SM0 BIT 098H.7 TL0 DATA 08AH SM1 BIT 098H.6 TL1 DATA 08BH SM2 BIT 098H.5 TL2 DATA 0CCHPT0 BIT 0B8H.1PT1 BIT 0B8H.3RS0 BIT 0D0H.3PT2 BIT 0B8H.5TR0 BIT 088H.4RS1 BIT 0D0H.4TR1 BIT 088H.6TR2 BIT 0C8H.2PX0 BIT 0B8H.0PX1 BIT 0B8H.2DPH DATA 083H DPL D ATA 082H EXEN2 BIT 0C8H.3 REN BIT 098H.4T2CON DATA 0C8H RXD BIT 0B0H.0TXD BIT 0B0H.1F0 BIT 0D0H.5PSW DATA 0D0H?PR?_delay?SMARTCAR SEGMENT CODE?PR?_ABS?SMARTCAR SEGMENT CODE?PR?keysort?SMARTCAR SEGMENT CODE?PR?keycheck?SMARTCAR SEGMENT CODE?PR?sys_init?SMARTCAR SEGMENT CODE?PR?_BCD?SMARTCAR SEGMENT CODE?PR?main?SMARTCAR SEGMENT CODE?PR?TIME_BASE?SMARTCAR SEGMENT CODE ?C_INITSEG SEGMENT CODE?BI?SMARTCAR SEGMENT BIT?DT?SMARTCAR SEGMENT DA TAEXTRN CODE (?C_STARTUP)PUBLIC floor_up_2PUBLIC floor_up_1PUBLIC rankkeyPUBLIC opendoorPUBLIC iPUBLIC up_flagPUBLIC rowPUBLIC floor_down_5PUBLIC floor_down_4PUBLIC floor_down_3PUBLIC floor_down_2PUBLIC pressflagPUBLIC keyPUBLIC key_flagPUBLIC stop_flagPUBLIC tempPUBLIC down_flag PUBLIC floor_flag_5 PUBLIC floor_flag_4 PUBLIC floor_flag_3 PUBLIC floor_flag_2 PUBLIC floor_flag_1 PUBLIC startPUBLIC close_door PUBLIC rankPUBLIC countPUBLIC rowkey PUBLIC floor_up_4 PUBLIC floor_up_3 PUBLIC TIME_BASE PUBLIC mainPUBLIC _BCDPUBLIC sys_init PUBLIC keycheck PUBLIC keysort PUBLIC _ABSPUBLIC _delayRSEG ?BI?SMARTCAR floor_up_3: DBIT 1 floor_up_4: DBIT 1 close_door: DBIT 1start: DBIT 1 floor_flag_1: DBIT 1 floor_flag_2: DBIT 1floor_flag_3: DBIT 1 floor_flag_4: DBIT 1 floor_flag_5: DBIT 1 down_flag: DBIT 1stop_flag: DBIT 1pressflag: DBIT 1 floor_down_2: DBIT 1 floor_down_3: DBIT 1 floor_down_4: DBIT 1 floor_down_5: DBIT 1 up_flag: DBIT 1opendoor: DBIT 1 floor_up_1: DBIT 1 floor_up_2: DBIT 1RSEG ?DT?SMARTCARrowkey: DS 1count: DS 2rank: DS 1temp: DS 1 key_flag: DS 16key: DS 1row: DS 1i: DS 1rankkey: DS 1RSEG ?C_INITSEGDB 002HDB countDW 00000HDB 010HDB key_flagDB 000HDB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H DB 000H,000H,000H,000H,000HDB 001HDB keyDB 000HDB 001HDB iDB 000HDB 0C1H, pressflag + 000H ; bit-initDB 0C1H, up_flag + 000H ; bit-initDB 0C1H, down_flag + 000H ; bit-initDB 0C1H, stop_flag + 000H ; bit-initDB 001HDB rowkeyDB 000HDB 001HDB rankkeyDB 000HDB 001HDB tempDB 000HDB 001HDB rowDB 000HDB 001HDB rankDB 000HDB 0C1H, floor_flag_1 + 000H ; bit-initDB 0C1H, floor_flag_2 + 000H ; bit-initDB 0C1H, floor_flag_3 + 000H ; bit-initDB 0C1H, floor_flag_4 + 000H ; bit-initDB 0C1H, floor_flag_5 + 000H ; bit-initDB 0C1H, floor_down_5 + 000H ; bit-init DB 0C1H, floor_up_4 + 000H ; bit-initDB 0C1H, floor_down_4 + 000H ; bit-init DB 0C1H, floor_up_3 + 000H ; bit-initDB 0C1H, floor_down_3 + 000H ; bit-init DB 0C1H, floor_up_2 + 000H ; bit-initDB 0C1H, floor_down_2 + 000H ; bit-init DB 0C1H, floor_up_1 + 000H ; bit-initDB 0C1H, opendoor + 000H ; bit-initDB 0C1H, close_door + 000H ; bit-initDB 0C1H, start + 000H ; bit-init; //晶振12MHz 6T模式,总线频率2MHz 指令0.5us; #pragma src; #include <REG52.H> //89C52的头文件;; #define T0_HIGH 0xff //T0计时器寄存器初值; #define T0_LOW 0x9b //溢出计数80个,定时周期80*0.25us=20us; //为了保证主程序正常运行,定时器计数最好不要小于80个;; #define keynumber 16 16个按键标志; #define KEYIO P2 4*4键盘输入; #define output P1 lcd12864数据D0~D7; #define nobcd P0 BCD端口输出;; sbit clock=P3^0; lcd12864时钟输出端; sbit servo_door=P3^7; 舵机控制门输出端口; int count=0;;; char key_flag[keynumber]={0}; 按键标志位;; char key=0;; char i=0;;; bit pressflag=0;; bit up_flag=0;; bit down_flag=0; 控制信号标志位; bit stop_flag=0;;;;;;; char rowkey=0; 键盘反选变量设置; char rankkey=0;; char temp=0;; char row=0;; char rank=0;;; bit floor_flag_1=0;、、各楼层标志位; bit floor_flag_2=0;; bit floor_flag_3=0;; bit floor_flag_4=0;; bit floor_flag_5=0;; bit floor_down_5=0;; bit floor_up_4=0;; bit floor_down_4=0;; bit floor_up_3=0;; bit floor_down_3=0;; bit floor_up_2=0;; bit floor_down_2=0;; bit floor_up_1=0;; bit opendoor=0;; bit close_door=0;; bit start=0;;; //----------------------------------------------------------------------- ; void delay(unsigned int i)//延时函数_delay:USING 0; SOURCE LINE # 56;---- Variable 'i?040' assigned to Register 'R6/R7' ----; {; SOURCE LINE # 57; unsigned char j;; for(;i>0;i--); SOURCE LINE # 59?C0001:SETB CMOV A,R7SUBB A,#00HMOV A,R6SUBB A,#00HJC ?C0007; for(j=0;j<250;j++);; SOURCE LINE # 60;---- Variable 'j?041' assigned to Register 'R5' ----CLR AMOV R5,A?C0004:INC R5CJNE R5,#0FAH,?C0004?C0003:MOV A,R7DEC R7JNZ ?C0001DEC R6?C0113:SJMP ?C0001; }; SOURCE LINE # 61?C0007:RET; END OF _delay; //-----------------------------------------------------------------------; int ABS(int i) //绝对值函数RSEG ?PR?_ABS?SMARTCAR_ABS:USING 0; SOURCE LINE # 63;---- Variable 'i?142' assigned to Register 'R6/R7' ---- 键盘线反选函数; {; SOURCE LINE # 64; if (i>=0) return i;; SOURCE LINE # 65CLR CMOV A,R6XRL A,#080HSUBB A,#080HJC ?C0008RET?C0008:; else return -i;; SOURCE LINE # 66CLR CCLR ASUBB A,R7MOV R7,ACLR ASUBB A,R6MOV R6,A; }; SOURCE LINE # 67?C0009:RET; END OF _ABS; //----------------------------------------------------------------------- ; void keysort(void)RSEG ?PR?keysort?SMARTCARkeysort:USING 0; SOURCE LINE # 69; {; SOURCE LINE # 70; for(i=0;i<16;i++); SOURCE LINE # 71CLR AMOV i,A?C0011:; {; SOURCE LINE # 72; if(key==i) key_flag[i]=1;; SOURCE LINE # 73MOV A,keyCJNE A,i,?C0013MOV A,#LOW (key_flag) 读并且记录标志位函数ADD A,iMOV R0,AMOV @R0,#01H; }; SOURCE LINE # 74?C0013:INC iMOV A,iCJNE A,#010H,?C0011?C0012:;; for(i=0;i<16;i++); SOURCE LINE # 76CLR AMOV i,A?C0015:; {; SOURCE LINE # 77; if(key_flag[i]!=0); SOURCE LINE # 78MOV A,#LOW (key_flag)ADD A,iMOV R0,AMOV A,@R0JNZ $ + 5HLJMP ?C0017; {; SOURCE LINE # 79; if(i==0) floor_flag_1=1; else floor_flag_1=0;; SOURCE LINE # 80MOV A,iJNZ ?C0019SETB floor_flag_1SJMP ?C0020?C0019:CLR floor_flag_1?C0020:; if(i==1) floor_flag_2=1; else floor_flag_2=0;; SOURCE LINE # 81MOV A,iCJNE A,#01H,?C0021SETB floor_flag_2SJMP ?C0022?C0021:CLR floor_flag_2?C0022:; if(i==2) floor_flag_3=1; else floor_flag_3=0;; SOURCE LINE # 82MOV A,iCJNE A,#02H,?C0023SETB floor_flag_3SJMP ?C0024?C0023:CLR floor_flag_3?C0024:; if(i==3) floor_flag_4=1; else floor_flag_4=0;; SOURCE LINE # 83MOV A,iCJNE A,#03H,?C0025SETB floor_flag_4SJMP ?C0026?C0025:CLR floor_flag_4?C0026:; if(i==4) floor_flag_5=1; else floor_flag_5=0;; SOURCE LINE # 84MOV A,iCJNE A,#04H,?C0027SETB floor_flag_5SJMP ?C0028?C0027:CLR floor_flag_5?C0028:; if(i==5) floor_down_5=1; else floor_down_5=0;; SOURCE LINE # 85MOV A,iCJNE A,#05H,?C0029SETB floor_down_5SJMP ?C0030?C0029:CLR floor_down_5?C0030:; if(i==6) floor_up_4=1; else floor_up_4=0;; SOURCE LINE # 86MOV A,iCJNE A,#06H,?C0031SETB floor_up_4SJMP ?C0032?C0031:CLR floor_up_4?C0032:; if(i==7) floor_down_4=1; else floor_down_4=0;; SOURCE LINE # 87MOV A,iCJNE A,#07H,?C0033SETB floor_down_4SJMP ?C0034?C0033:CLR floor_down_4?C0034:; if(i==8) floor_up_3=1; else floor_up_3=0;; SOURCE LINE # 88MOV A,iCJNE A,#08H,?C0035SETB floor_up_3SJMP ?C0036 电梯运行函数?C0035:CLR floor_up_3?C0036:; if(i==9) floor_down_3=1; else floor_down_3=0;; SOURCE LINE # 89MOV A,iCJNE A,#09H,?C0037SETB floor_down_3SJMP ?C0038?C0037:CLR floor_down_3?C0038:; if(i==10) floor_up_2=1; else floor_up_2=0;; SOURCE LINE # 90MOV A,iCJNE A,#0AH,?C0039SETB floor_up_2SJMP ?C0040?C0039:CLR floor_up_2?C0040:; if(i==11) floor_down_2=1; else floor_down_2=0;; SOURCE LINE # 91MOV A,iCJNE A,#0BH,?C0041SETB floor_down_2SJMP ?C0042?C0041:CLR floor_down_2?C0042:; if(i==12) floor_up_1=1; else floor_up_1=0;; SOURCE LINE # 92MOV A,iCJNE A,#0CH,?C0043SETB floor_up_1SJMP ?C0044?C0043:CLR floor_up_1?C0044:; if(i==13) opendoor=1; else opendoor=0;; SOURCE LINE # 93MOV A,iCJNE A,#0DH,?C0045SETB opendoorSJMP ?C0046?C0045:CLR opendoor?C0046:; if(i==14) close_door=1; else close_door=0;; SOURCE LINE # 94MOV A,iCJNE A,#0EH,?C0047SETB close_doorSJMP ?C0048?C0047:CLR close_door?C0048:; if(i==15) start=1; else start=0;; SOURCE LINE # 95MOV A,iCJNE A,#0FH,?C0049SETB startSJMP ?C0017?C0049:CLR start; }; SOURCE LINE # 96; }; SOURCE LINE # 97?C0017:INC iMOV A,iXRL A,#010HJZ $ + 5HLJMP ?C0015;;;;;;;; }; SOURCE LINE # 105?C0051:RET; END OF keysort;;;; unsigned char keycheck() 4*4 键盘RSEG ?PR?keycheck?SMARTCARkeycheck:USING 0; SOURCE LINE # 109; {; SOURCE LINE # 110; char i=0;; SOURCE LINE # 111;---- Variable 'i?343' assigned to Register 'R4' ---- CLR AMOV R4,A; temp=0;; SOURCE LINE # 112MOV temp,A; KEYIO=0xf0;; SOURCE LINE # 113MOV P2,#0F0H; delay(5);; SOURCE LINE # 114MOV R7,#05HMOV R6,ALCALL _delay; rowkey=P2;; SOURCE LINE # 115MOV rowkey,P2; if(rowkey!=0xf0); SOURCE LINE # 116MOV R7,rowkeyMOV A,R7RLC ASUBB A,ACCMOV R6,AMOV A,R7XRL A,#0F0HORL A,R6JZ ?C0052; {; SOURCE LINE # 117; //delay(10);; if(rowkey!=0xf0); SOURCE LINE # 119MOV A,R7XRL A,#0F0HORL A,R6JZ ?C0053; {pressflag=1;rowkey=(rowkey&0x0f);}; SOURCE LINE # 120SETB pressflagANL rowkey,#0FHSJMP ?C0055?C0053:; else pressflag=0;; SOURCE LINE # 121CLR pressflag; }; SOURCE LINE # 122SJMP ?C0055?C0052:; else pressflag=0;; SOURCE LINE # 123CLR pressflag?C0055:;;; if(pressflag==1); SOURCE LINE # 126JB pressflag,$ + 6HLJMP ?C0085; {; SOURCE LINE # 127 ; KEYIO=0x0f;; SOURCE LINE # 128 MOV P2,#0FH; //delay(10);; rankkey=P2;; SOURCE LINE # 130 MOV rankkey,P2; rankkey=(rankkey&0xf0);; SOURCE LINE # 131 ANL rankkey,#0F0H; rankkey=(rankkey>>4);; SOURCE LINE # 132 MOV A,rankkeyMOV R0,#04H?C0114:MOV C,ACC.7RRC ADJNZ R0,?C0114MOV rankkey,A;; {; SOURCE LINE # 134 ; for(i=0;i<=3;i++); SOURCE LINE # 135 CLR AMOV R4,A?C0057:; {; SOURCE LINE # 136; temp=0x01;; SOURCE LINE # 137MOV temp,#01H; temp=(temp<<i);; SOURCE LINE # 138MOV A,tempMOV R0,AR4INC R0SJMP ?C0116?C0115:CLR CRLC A?C0116:DJNZ R0,?C0115MOV temp,A; if((rowkey&temp)!=0) {row=i+1;i=4;}; SOURCE LINE # 139ANL A,rowkeyJZ ?C0059MOV A,R4INC AMOV row,AMOV R4,#04H; }; SOURCE LINE # 140?C0059:INC R4SETB CMOV A,R4XRL A,#080HSUBB A,#083HJC ?C0057?C0058:;;; for(i=0;i<=3;i++); SOURCE LINE # 143 CLR AMOV R4,A?C0061:; {; SOURCE LINE # 144 ; temp=0x01;; SOURCE LINE # 145 MOV temp,#01H; temp=(temp<<i);; SOURCE LINE # 146 MOV A,tempMOV R0,AR4INC R0SJMP ?C0118?C0117:CLR CRLC A?C0118:DJNZ R0,?C0117MOV temp,A; if((rankkey&temp)!=0) {rank=i+1;i=4;}; SOURCE LINE # 147ANL A,rankkeyJZ ?C0063MOV A,R4INC AMOV rank,AMOV R4,#04H; }; SOURCE LINE # 148?C0063:INC R4SETB CMOV A,R4XRL A,#080HSUBB A,#083HJC ?C0061?C0062:;; if(row==1); SOURCE LINE # 150MOV A,rowCJNE A,#01H,?C0065; {; SOURCE LINE # 151; if(rank==1) key=0;; SOURCE LINE # 152MOV A,rankCJNE A,#01H,?C0066CLR A?C0066:; if(rank==2) key=1;; SOURCE LINE # 153 MOV A,rankCJNE A,#02H,?C0067MOV key,#01H?C0067:; if(rank==3) key=2;; SOURCE LINE # 154 MOV A,rankCJNE A,#03H,?C0068MOV key,#02H?C0068:; if(rank==4) key=3;; SOURCE LINE # 155 MOV A,rankCJNE A,#04H,?C0065MOV key,#03H; }; SOURCE LINE # 156 ?C0065:; if(row==2); SOURCE LINE # 157 MOV A,rowCJNE A,#02H,?C0070; {; SOURCE LINE # 158 ; if(rank==1) key=4;; SOURCE LINE # 159CJNE A,#01H,?C0071MOV key,#04H?C0071:; if(rank==2) key=5;; SOURCE LINE # 160 MOV A,rankCJNE A,#02H,?C0072MOV key,#05H?C0072:; if(rank==3) key=6;; SOURCE LINE # 161 MOV A,rankCJNE A,#03H,?C0073MOV key,#06H?C0073:; if(rank==4) key=7;; SOURCE LINE # 162 MOV A,rankCJNE A,#04H,?C0070MOV key,#07H; }; SOURCE LINE # 163 ?C0070:; if(row==3); SOURCE LINE # 164 MOV A,rowCJNE A,#03H,?C0075; {; SOURCE LINE # 165; if(rank==1) key=8;; SOURCE LINE # 166 MOV A,rankCJNE A,#01H,?C0076MOV key,#08H?C0076:; if(rank==2) key=9;; SOURCE LINE # 167 MOV A,rankCJNE A,#02H,?C0077MOV key,#09H?C0077:; if(rank==3) key=10;; SOURCE LINE # 168 MOV A,rankCJNE A,#03H,?C0078MOV key,#0AH?C0078:; if(rank==4) key=11;; SOURCE LINE # 169 MOV A,rankCJNE A,#04H,?C0075MOV key,#0BH; }; SOURCE LINE # 170 ?C0075:; if(row==4); SOURCE LINE # 171 MOV A,rowCJNE A,#04H,?C0080; {; SOURCE LINE # 172 ; if(rank==1) key=12;; SOURCE LINE # 173 MOV A,rankCJNE A,#01H,?C0081MOV key,#0CH?C0081:; if(rank==2) key=13;; SOURCE LINE # 174 MOV A,rankCJNE A,#02H,?C0082MOV key,#0DH?C0082:; if(rank==3) key=14;; SOURCE LINE # 175 MOV A,rankCJNE A,#03H,?C0083MOV key,#0EH?C0083:; if(rank==4) key=15;; SOURCE LINE # 176 MOV A,rankCJNE A,#04H,?C0080MOV key,#0FH; }; SOURCE LINE # 177 ?C0080:; rank=0;; SOURCE LINE # 178CLR AMOV rank,A; row=0;; SOURCE LINE # 179 MOV row,A; rowkey=0;; SOURCE LINE # 180 MOV rowkey,A; rankkey=0;; SOURCE LINE # 181 MOV rankkey,A; }; SOURCE LINE # 182 ; }; SOURCE LINE # 183 ?C0085:; while(P2!=0x0f); SOURCE LINE # 184 MOV A,P2CJNE A,#0FH,?C0085; {; SOURCE LINE # 185 ; //delay(5);; }; SOURCE LINE # 187 ?C0086:; return key;; SOURCE LINE # 188 MOV R7,key;; }; SOURCE LINE # 190?C0087:RET; END OF keycheck; void sys_init(void) 单片机IO口初始化RSEG ?PR?sys_init?SMARTCARsys_init:; SOURCE LINE # 191; {; SOURCE LINE # 192; //------IO口设置------------;;;;; //------定时器设置------------;; TMOD=0x11; //定时器0方式1; SOURCE LINE # 200MOV TMOD,#011H; TH0=T0_HIGH; //定时器赋初值; SOURCE LINE # 201MOV TH0,#0FFH; TL0=T0_LOW ;; SOURCE LINE # 202MOV TL0,#09BH;; TR0=1; //定时器运行; SOURCE LINE # 204SETB TR0; ET0=1; //开定时器中断; SOURCE LINE # 205SETB ET0; EA=1; //开总中断; SOURCE LINE # 206SETB EA; }; SOURCE LINE # 207RET; END OF sys_init;; unsigned char BCD(char keyp)RSEG ?PR?_BCD?SMARTCAR_BCD:USING 0; SOURCE LINE # 209;---- Variable 'keyp?544' assigned to Register 'R7' ---- ; {; SOURCE LINE # 210; if(keyp==0x00) keyp=0x00;; SOURCE LINE # 211MOV A,R7JNZ ?C0089MOV R7,A?C0089:; SOURCE LINE # 212 CJNE R7,#01H,?C0090MOV R7,#01H?C0090:; if(keyp==0x02) keyp=0x02;; SOURCE LINE # 213 CJNE R7,#02H,?C0091MOV R7,#02H?C0091:; if(keyp==0x03) keyp=0x03;; SOURCE LINE # 214 CJNE R7,#03H,?C0092MOV R7,#03H?C0092:; if(keyp==0x04) keyp=0x04;; SOURCE LINE # 215 CJNE R7,#04H,?C0093MOV R7,#04H?C0093:; if(keyp==0x05) keyp=0x05;; SOURCE LINE # 216 CJNE R7,#05H,?C0094MOV R7,#05H?C0094:; if(keyp==0x06) keyp=0x06;; SOURCE LINE # 217 CJNE R7,#06H,?C0095MOV R7,#06H?C0095:; SOURCE LINE # 218 CJNE R7,#07H,?C0096MOV R7,#07H?C0096:; if(keyp==0x08) keyp=0x08;; SOURCE LINE # 219 CJNE R7,#08H,?C0097MOV R7,#08H?C0097:; if(keyp==0x09) keyp=0x09;; SOURCE LINE # 220 CJNE R7,#09H,?C0098MOV R7,#09H?C0098:;; if(keyp==0x0a) keyp=0x10;; SOURCE LINE # 222 CJNE R7,#0AH,?C0099MOV R7,#010H?C0099:;; if(keyp==0x0b) keyp=0x11;; SOURCE LINE # 224 CJNE R7,#0BH,?C0100MOV R7,#011H?C0100:; if(keyp==0x0c) keyp=0x12;; SOURCE LINE # 225 CJNE R7,#0CH,?C0101MOV R7,#012H?C0101:; if(keyp==0x0d) keyp=0x13;; SOURCE LINE # 226CJNE R7,#0DH,?C0102MOV R7,#013H?C0102:; if(keyp==0x0e) keyp=0x14;; SOURCE LINE # 227CJNE R7,#0EH,?C0103MOV R7,#014H?C0103:; if(keyp==0x0f) keyp=0x15;; SOURCE LINE # 228CJNE R7,#0FH,?C0104MOV R7,#015H?C0104:;; return keyp;; SOURCE LINE # 230; }; SOURCE LINE # 231?C0105:RET; END OF _BCD;; //-----------------------------------------------------------------------; void main(void) 主函数main:USING 0; SOURCE LINE # 234; {; SOURCE LINE # 235; sys_init(); //初始化; SOURCE LINE # 236 LCALL sys_init?C0106:; while(1); SOURCE LINE # 237; {; SOURCE LINE # 238; keycheck();; SOURCE LINE # 239 LCALL keycheck; nobcd=key;; SOURCE LINE # 240 MOV P0,key; output=BCD(key);; SOURCE LINE # 241 MOV R7,keyLCALL _BCDMOV P1,R7;; }; SOURCE LINE # 243 SJMP ?C0106; END OF mainCSEG AT 0000BHLJMP TIME_BASE; }; //-----------------------------------------------------------------------; void TIME_BASE(void) interrupt 1 using 1 //定时器生成控制PWMRSEG ?PR?TIME_BASE?SMARTCARUSING 1TIME_BASE:PUSH ACCPUSH PSW; SOURCE LINE # 246; {; TH0=T0_HIGH; //赋初值; SOURCE LINE # 248MOV TH0,#0FFH; TL0=T0_LOW ;; SOURCE LINE # 249MOV TL0,#09BH; count++;; SOURCE LINE # 250INC count+01HMOV A,count+01HJNZ ?C0119INC count?C0119:; if(count<=0) servo_door=1;; SOURCE LINE # 251SETB C。