基于单片机的电梯仿真程序课程设计_学位论文
基于单片机的6层电梯模拟控制系统设计课程设计(论文)

单片机的6层电梯模拟控制系统设计1设计目的这次设计给出了一种基于AT89C52单片机的电梯模型控制系统设计。
以单片机为核心,再辅以适当的硬件电路和控制程序来检测和控制整个电梯的信号,具有成本低、通用性强、灵活性大、扩展容易及易于实现复杂控制等优点。
2 方案设计2.1 设计要求(1)设置电梯的内外按键,即电梯外都有上或下的按键,电梯内有楼层的选择按键。
(2)电梯状态要有指示灯显示,即电梯目前运行到达楼层的实时显示,电梯升降的状态显示等。
(3)电梯无人时,应默认停在第一层。
2.2 系统的结构框图图2-1 系统的结构框图如上图2-1所示,楼层电梯呼叫按键就是楼层外面的上行、下行按键,有需求时即可按下;电梯内呼叫按键就是电梯内部的数字按键,它是内部按键需求的输入;单片机就是整个系统的核心,接收输入信息,经过处理后输出信息;楼层显示数码管就是接收单片机处理的信息,显示此时的楼层数;电梯状态指示灯就是接收单片机处理的信息,显示电梯的状态:上升、下降、停止。
电动机的驱动和控制就是接收单片机的PWM脉冲信号来控制驱动器,进而控制电动机的正反转,使电动机牵引电梯做上下运动。
12.3 电动机的选择我们选用Y100L24三相异步电动机,因为它还具有性能好、寿命长、可靠性高、维护方便、启动转矩大等优点,其功能参数为额定电压380V ,额定频率50HZ ,额定功率3000W ,额定转速1400转/分。
2.4 AT89C52单片机这次设计采用的是AT89C52单片机,AT89C52是一个低电压,高性能CMOS 8位单片机,器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
其外形及引脚排列如图2-2所示:12345678101112131415161721222324252627323334353637383919189293031P1.2P1.3P1.4P1.5P1.6P1.7P1.0/T2P1.1/T2EX RSTTXAL1TXAL2PSEN ALE EAAT98C52P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A1528P3.0/RXD P3.1/TXD P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WR P3.7/RD图2-2 AT89C52单片机外形及引脚排列3 硬件系统的设计3.1 硬件设计思路电梯最底层为1楼,因此在1楼仅有上升按键,而电梯最高层为6楼,因此6楼 应仅有下降按键。
基于单片机的电梯仿真程序课程设计

目录(一)前言 (1)(二)现代电梯概述 (3)(三)硬件部分设计 (6)(四)软件部分设计 (12)(五)电梯运行界面 (52)(六)设计总结与感悟 (56)(七)参考文献 (57)电梯仿真程序一、前言:本电梯仿真程序采用的是一个基于单片机及其相关外设,编程语言采用汇编与C语言结合的方式,通过矩阵键盘线反选法输入楼层,上、下行等控制信号,经I\O口读入,进行相关实时控制,软硬件结合的仿真系统,输出设备包括由CD4511驱动显示楼层的7段数码管,显示实时信息的显示屏LCD12864,由PWM控制显示电梯门开关的舵机,以及由I\O口间接控制的驱动电机正反转双桥驱动电路等几个部分组成。
可以实现真实电梯中,任意层呼叫,目的层到达按要求顺序到达,开关门,无输入自动回1层等一系列功能,并实时显示当前电梯运行状态,关于真实电梯门控光幕装置,电机自动抱闸平层等部分,由于知识不足,没有足一实现,但会在接下来的专业知识学习过程中不断完善,同时也希望得到程老师的指导。
二、现代电梯概述:电梯是一种以电动机为动力的垂直升降机,装有箱状吊舱,用于多层建筑乘人或载运货物。
也有台阶式,踏步板装在履带上连续运行,俗称自动电梯。
服务于规定楼层的固定式升降设备。
它具有一个轿厢,运行在至少两列垂直的或倾斜角小于15°的刚性导轨之间。
轿厢尺寸与结构形式便于乘客出入或装卸货物,本次微机课程设计电梯仿真选用的是垂直升降梯。
2.1、电梯功能现代电梯主要由曳引机(绞车)、导轨、对重装置、安全装置(如限速器、安全钳和缓冲器等)、信号操纵系统、轿厢与厅门等组成。
这些部分分别安装在建筑物的井道和机房中。
通常采用钢丝绳摩擦传动,钢丝绳绕过曳引轮,两端分别连接轿厢和平衡重,电动机驱动曳引轮使轿厢升降。
电梯要求安全可靠、输送效率高、平层准确和乘坐舒适等。
电梯的基本参数主要有额定载重量、可乘人数、额定速度、轿厢外廓尺寸和井道型式等。
简单使用方法(紧急情况下面有解决方法)载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作电梯电梯结构图电梯内部结构图驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。
基于AT89C52单片机电梯控制仿真系统的设计

50钟建伟等:基于AT89C52单片机电梯控制仿真系统的设计电工材料2020No.3基于AT89C52单片机电梯控制仿真系统的设计钟建伟,张钦惠,王智方,董伟广,周璨(湖北民族大学信息工程学院,湖北恩施445000)摘要:随着科学技术的进步,城市现代化迅猛发展。
电梯作为高层建筑主要的垂直运输工具,必然要做到效率高、安全性能好、可靠性高、方便等。
采用AT89C52单片机作为核心,配以适当接口作为输入输出通道,用8155H芯片驱动发光二极管,三行按键矩阵开关电路作为外呼内选呼叫控制,利用查询方式来检测用户请求的按键信息,实现对电梯的控制。
仿真结果表明,该电梯仿真系统具有实际电梯系统的各项功能,可以很好地模拟实际电梯系统的运行,可以应用于实际电梯控制系统的设计。
关键词:电梯:AT89C52单片机;输入输出通道;矩阵开关电路中图分类号:TP27315文献标志码:A文章编号:1671-8887(2020)03-0050-05DOI:10.16786/ki.l671-8887.eem.2020.03.014Design of Elevator Control Simulation System Based onAT89C52Single Chip ComputerZHONG Jianwei,ZHANG Qinhui,WANG Zhifang,DONG Weiguang,ZHOU Can {School of Information Engineering,Hubei University for Nationalities,Hubei Enshi445000,China)Abstract:With the development of science and technology and the rapid development of urbanmodernization,elevators,as the main vertical transportation tools for high-rise buildings,must havethe characteristics of high efficiency,good safety performance,high reliability and convenience.The AT89C52single-chip microcomputer is used as the core,with the appropriate interface as theinput and output channel,the8155H chip is used to drive the LED,and the three-line buttonmatrix switch circuit is used as the outbound call selection control.The query method is used todetect the button information requested by the user and realize the elevatoi\control.The simulation results show that the elevator simulation system has various functions of the actual elevatorsystem,which can simulate the operation of the actual elevator system well and can be applied tothe design of the actual elevator control system.Key words:elevator;AT89C52microcontroller;input and output channel;matrix switch circuit引言在当今社会和经济活动中,电梯作为一种方便、快捷的运输工具,惠及各行各业。
基于单片机的电梯控制系统_毕业设计(论文))

毕业设计(论文)题目基于单片机的电梯控制系统模拟电梯控制系统设计摘要单片机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域.电梯是集机械原理应用、电气控制技术、微处理器技术、系统工程学等多学科和技术分支于一体的机电设备,它是建筑中的永久垂直交通工具。
本论文选择AT89S51为核心控制元件,设计了一个八层电梯系统,使用单片机汇编语言进行编程,实现运送乘客到任意楼层,并且显示电梯的楼层和上下行。
利用单片机控制电梯有成本低,通用性强,灵活性大及易于实现复杂控制等优点。
关键词单片机电梯系统控制Simulated elevator control system designAbstract Microcontroller that microcomputer (Single-Chip Microcomputer) gathering CPU, RAM, ROM, the timing, number and variety of interface integrated microcontrollers. 51 various SCM SCM is the most typical and most representative of a widely used in various fields. Elevator is the application of the principle set machinery, electrical control technology, microprocessor technology, systems engineering and other technical disciplines and branches of the integration of mechanical and electrical equipment, which is building a permanent vertical transport. This paper choice AT89S51 control of the core components, designed a new 8 storey lift systems, using single-chip assembly language programming, transporting passengers arrived a floor, it also shows the elevator floor and downlink. SCM control elevators low cost, versatility, flexibility and ease of large complex control advantagesKeyboards Single-Chip Microcomputer Elevator system control目录引言 (1)第一章单片机概述 (2)1.1单片机简介 (2)1.2单片机的特点 (3)1.3单片机的应用领域 (4)1.4单片机的发展趋势 (4)1.5单片机的主要生产厂家和机型 (5)第二章硬件系统实现 (7)2.1功能模块图 (7)2.2各功能模块介绍 (7)2.2.1 AT89S51芯片 (7)2.2.2 显示模块 (10)2.2.3 复位开关模块 (10)2.2.4 振荡器电路模块 (11)2.2.5 程序下载模块 (11)2.3设计电路及连线 (11)第三章软件设计 (13)3.1汇编语言简介 (13)3.2流程图设计 (14)3.3程序设计 (15)3.3.1程序初始化 (15)3.3.2主程序调用 (15)3.3.3中断程序调用 (16)第四章系统调试 (19)4.1硬件调试 (19)4.2软件调试 (19)第五章英文翻译 (21)结论 (25)致谢 (26)参考文献 (27)程序附录 (28)引言随着现代高科技的发展,住房和办公用楼都已经逐渐向高层发展。
毕业设计论文—基于单片机的电梯控制系统设计及实现-精品

苏州经贸职业技术学院学生毕业设计(毕业论文)基于单片机的电梯控制系统设计及实现系别:机电系专业:应用电子技术班级:09应电31学生姓名:张兴宝学生学号:0901083149指导教师:曹双兰摘要近年来,电梯的发展速度不断增加,已深入到社会生活的方方面面。
为了社会的需要与乘客的需求,其自身也在不断的完善着。
电梯在操纵控制方面步步出新——手柄开关操纵、按钮控制、信号控制、集选控制、人机对话等等,多台电梯还出现了并联控制,智能群控;双层轿厢电梯展示出节省井道空间,提升运输能力的优势;变速式自动人行道扶梯的出现大大节省了行人的时间;不同外形——扇形、三角形、半菱形、半圆形、整圆形的观光电梯则使身处其中的乘客的视线不再封闭。
电梯是高层建筑中安全、可靠、垂直上下的运载工具,对改善劳动条件、减轻劳动强度起到很大的作用。
电梯的应用范围很广,可用于宾馆、饭店、办公大楼、商场、娱乐场所、仓库以及居民住宅大楼等。
在现代社会中,电梯已成为人类必不可少的垂直运输交通工具。
人们的生活因此变得更加美好。
本设计是以单片机为基础,C语言为编程语言,AT89C52为控制核心的8 层电梯控制系统。
本设计能实现电梯的开关门、显示电梯的所在楼层以及其运行的状态,并能过根据不同乘客的需求定向定层的进行载客服务,每到达一楼层时,楼层所在的传感器点亮,方便顾客做好准备上下楼梯。
根据实际生活,此电梯系统设计了紧急报警功能,当电梯发生意外或无法正常工作时。
乘客可以通过紧急报警系统向有关部门求助。
本设计为了能够让大家更清楚的明白电梯的工作原理,让其更好的为人们服务,设计从输入模块、控制模块、led点阵显示模块系统的阐述了电梯的工作的不同状态,并通过不断的论证选择适合的方案,进行仿真,以其最真是的效果表达出来。
同时,希望能通过本次设计发现其不足之处,加以改进,使其在生活中更加的方便与人性化,展现其最大的作用。
关键词:电梯控制单片机C语言AT89C52 LED点阵AbstractIn recent years, the development of the elevator speed increase unceasingly, has penetrated into every aspect of social life. In order to the needs of society and the needs of passengers, its oneself also is constantly improving the. Elevator control aspect is a new step by step -- the handle switch operation, button control, signal control, set control, man-machine dialogue and so on, many elevators also appeared parallel control, intelligent control; double-deck elevator hoistway show save space, improve transport capacity advantage; transmission type automatic sidewalk escalator has greatly saved the pedestrian time; different shape -- fan, triangle, half diamond, semicircular, circle the sightseeing elevator, which are in the sight of the passenger is not closed. The elevator is in the high-rise construction the safe, reliable, upper and lower vertical delivery vehicle, to improve working conditions, reduce labor intensity plays a big role. Elevator application scope is very broad, and can be used for guesthouses, hotels, office buildings, shopping malls, entertainment venues, warehouse and residential building. In modern society, the elevator has become indispensable vertical transportation. People's life becomes more beautiful.The design is based on single chip microcomputer for C language programming, and language, AT89C52 as control core 8 Elevator control system. The design can realize the elevator door switch, display the floor where the elevator and its running state, and can according to the different needs of passengers directional fixed layer were passenger service, every arrive at the floor, floor where the sensor lights, the convenience of customers ready to go up and down stairs. According to the actual life, the elevator system design of emergency alarm function, when the elevator accidents or cannot work normally. Passengers can pass through the emergency alarm system to the relevant department for assistance.This design in order to be able to make people more clearly understand the elevator works, make it better serve the people, design from the input module, control module, LED dot matrix display module of the system elaborated the elevator work in different states, and through constant argument to select a suitable scheme, simulation, with the most really the effect of the expression. At the same time, hope that through this design found its shortcomings, to be improved, the life is more convenient and humanized, show its biggest effect.Key words: elevator control MCU C language AT89C52 LED lattice目录摘要............................................ 错误!未定义书签。
基于51单片机电梯控制设计毕业论文

基于51单片机的电梯控制设计毕业论文一章绪论1电梯的概述电梯进入人们的生活已经15年了。
一个半世纪的风风雨雨,翻天覆地的是历史的变迁,永恒不变的是电梯提升人类生活质量的承诺。
1854年,在纽约水晶宫举行的世界博览会上,美国人伊莱沙·格雷夫斯·奥的斯一次向世人展示了他的发明。
他站在装满货物的升降梯平台上,命令助手将平台拉升到观众都能看得到的高度,然后发出信号,令助手用利斧砍断了升降梯的提拉缆绳。
令人惊讶的是,升降梯并没有坠毁,而是牢牢地固定在半空中——奥的斯先生发明的升降梯安全装置发挥了作用。
“一切安全,先生们。
”站在升降梯平台上的奥的斯先生向周围观看的人们挥手致意。
谁也不会想到,这就是人类历史上一部安全升降梯。
生活在继续,科技在发展,电梯也在进步。
15年来,电梯的材质由黑白到彩色,样式由直式到斜式,在操纵控制方面更是步步出新——手柄开关操纵、按钮控制、信号控制、集选控制、人机对话等等,多台电梯还出现了并联控制,智能群控;双层轿厢电梯展示出节省井道空间,提升运输能力的优势;变速式自动人行道扶梯的出现大大节省了行人的时间;不同外形——扇形、三角形、半菱形、半圆形、整圆形的观光电梯则使身处其中的乘客的视线不再封闭。
如今,以美国奥的斯公司为代表的世界各大著名电梯公司各展风姿,仍在继续进行电梯新品的研发,并不断完善维修和保养服务系统。
调频门控、智能远程监控、主机节能、控制柜低噪音耐用、复合钢带环保——一款款集纳了人类在机械、电子、光学等领域最新科研成果的新型电梯竞相问世,冷冰冰的建筑因此散射出人性的光辉,人们的生活因此变得更加美好。
中国最早的一部电梯出现在上海,是由美国奥的斯公司于191年安装的。
1932年由美国奥的斯公司安装在天津利顺德酒店的电梯至今还在安全运转着。
1951年,党中央提出要在天安门安装一台由我国自行制造的电梯,天津从庆生电机厂荣接此任,四个月后不辱使命,顺利地完成了任务。
80C51基于单片机的电梯控制器设计_毕业设计(论文)

80C51基于单片机的电梯控制器设计_毕业设计(论文)单片机技术课程设计报告课题名称基于单片机的电梯控制器设计系别理学院专业 _电子信息科学与技术_2013年 6月 20 日毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
基于单片机的电梯制作

山东科技大学2012届本科毕业论文基于单片机的电梯制作论文作者姓名:张强所学专业:自动化目录前言第一章绪论 (1)1.1课题来源 (1)1.2课题背景 (1)1.3国内外在该方向的研究现状及分析 (2)1.4使用的开发平台 (2)第二章控制方案的选取 (3)2.1控制芯片的选取 (3)2.2楼层检测装置的选取 (3)2.3楼层显示装置的选取 (4)2.4紧急报警装置的选取 (5)2.5电动机的选取 (5)2.6电机驱动电路的选取 (5)第三章硬件设计 (7)3.1硬件模块设计框图 (7)3.2电梯模型搭建图 (7)3.3单片机最小系统介绍 (8)3.4各模块的设计 (9)3.4.1 键盘模块 (9)3.4.2 电源模块 (10)3.4.3 位置检测模块 (10)3.4.4 电机驱动模块 (11)3.4.5 按键显示模块 (13)3.4.6 电梯紧急报警模块............................................................... 错误!未定义书签。
3.4.7 数码管显示模块 (14)第四章软件设计 (15)4.1电梯程序流程图 (15)4.2电梯主程序 (16)4.3键盘扫描请求指令 (16)4.4电梯应答中断服务 (16)4.5紧急报警和演示 (16)结论 (17)参考文献 (18)附录一管脚说明 (19)附录二程序代码 (20)附录三系统PCB图 (31)前言电梯在高层建筑中几乎是必不可少的,它将大楼的各层连接在一起,极大的方便了人们的出行,可以说电梯已经是现代物质文明的一个象征,它使得我们的出行更加方便。
但是实际了解电梯构造特别是控制构造方面的人却少之又少。
本设计研究了电梯控制的过程,详细了阐述了元器件的选取、搭建和软件设计过程。
本文以STC89S52芯片为核心,结合一些外围电路如:红外线收发电路、按键扫描电路、电机驱动电路等。
每一层都被安置了一对红外收发装置,它可以被用来检测电梯是否到达这一层。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。