基于单片机的电梯课程设计

合集下载

基于单片机电梯控制系统设计课程设计实验报告

基于单片机电梯控制系统设计课程设计实验报告

课程设计实验报告课程名称:课程设计实验项目:基于单片机的电梯控制系统设计专业班级:通信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、性能分析经过调试后的电梯控制系统,其性能稳定、运行可靠。

该系统能够实现对电梯运行状态、楼层信号、呼梯信号的实时监控与显示,并且具有速度快、安全可靠等特点。

该系统还具有成本低、易于维护等优点,适用于各种场合的电梯控制。

基于单片机的电梯控制系统设计 (1)

基于单片机的电梯控制系统设计 (1)

课题名称:基于单片机的电梯控制系统设计一、课题的目的及意义电梯是标志现代物质文明的垂直运输工具、是机电一体化的复杂运输设备。

它涉及电子技术、机械工程、电力电子技术、微电脑技术、电力拖动系统和土建工程等多个科学领域。

尽管电梯的品种繁多,但目前使用的电梯绝大多数为电力拖动、钢丝绳曳引式结构。

从电梯各构件部分的功能上看,可分为八个部分:曳引系统、导向系统、轿厢、门系统、重量平衡系统、电力拖动系统、电气控制系统和安全保护系统,而本次课题内容就是基于单片机的电梯控制系统设计。

随着我国经济的发展,城市中涌现出越来越多的高层建筑,而与之配套的电梯已成为人们日常生活中不可缺少的工具。

同时,由于国家老龄化问题目益突出,低层住宅建筑(一般5层左右)同样也有使用电梯的要求。

所以电梯控制的研究在现代社会有着很重要的作用,作为一名电专业的学生,这些正是自动化专业所学习的内容,又是自己的兴趣所在。

为了以后更好的工作和更深入的理解基于单片机的电梯控制系统,所以选择了该课题。

2、国内外研究现状及单片机的特点国外:20世纪初,美国出现了曳引式电梯,钢丝绳悬挂在曳引轮上,一端与轿厢连接,而另一端与对重连接,随曳引轮的转动,靠钢丝绳与曳引轮槽之间的摩擦力,使轿厢与对重作一生一降的相反运动。

显然,钢丝绳不用缠绕,因此钢丝绳的长度和股数均不受控制,当然轿厢的载重量以及提升的高度就得到了提高,从而满足了人们对电梯的使用需求。

因此,近一百年来,曳引电梯一直受到重视,并发展沿用至今。

在后来的几十年里,通过变换电动机级数的调速方法来调整电梯运行速度的技术相继研制成功,1933年,世界上第一台运行速度为6 m/s 的电梯被安装在美国纽约的帝国大厦。

第二次世界大战后,建筑业的发展促使电梯进入了高峰发展时期,代表新技术的电子技术被广泛应用于电梯领域的同时,陆续出现了群控电梯、超高速电梯。

随着电力电子技术的发展,晶闸管变流装置越来越多地用于电梯系统,使电梯的拖动系统简化,性能提高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二○一四~二○一五学年第一学期信息科学与工程学院自动化系课程设计报告书姓名:余义学号: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。

相关文档
最新文档