基于 单片机的六层电梯控制系统c语言程序
- 格式:pdf
- 大小:193.38 KB
- 文档页数:7
#include<>#define uint unsigned int#define uchar unsigned char〃延时程序,以毫秒为单位,用软件计时,输入的参数为毫秒数void Delay_ms( uint Time);〃电梯向上走void Up();I〃电梯向下走void Down();〃报警函数void Warnning();〃获取目的楼层void Destination();//显示某一楼层void Display( uchar n, uchar a);//闪烁显示到达的楼层void Flash( uchar a);//点阵键盘扫描uchar KBScan();//延时void dl_ms();//解析出按键所代表的楼层uchar Reprsent();#include ""uchar code TAB[16]= (0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);sbit P0_0 = P0A0;sbit P0_1 = P0A1;sbit P0_2 = P0A2;sbit P0_3 = P0A3;sbit P0_4 = P0A4;sbit P0_5 = P0A5;sbit P0_6 = P0A6;s bit P0_7 = P0A7;sbit P1_0 = P1A0;uchar lift = 1;〃电梯所在的楼层uchar destination1 = 1;〃电梯的目的楼层uchar flag = 0;〃进入电梯程序的标志uchar key;〃按键的键码uchar request[] = {0, 0, 0, 0, 0, 0, 0, 0, 0);//1-8 楼有无请求,有请求为 1uchar status = 1;//电梯往上还是往下走,1为上,0为下//报警的响声的频率产生void Timer1() interrupt 3 { P1_0=-P1_0;TH1 = 0xfc;TL1 = 0x0c;) int main(){'uchar i;P0 = 0xff;P2 = 0x76; //数码管‘H’EA = 1; //开启外部中断INT0EX0 = 1;IT0 = 1;while(1) //检查flag 标志{ //flag初始化为0if(flag == 1) 〃在中断中将其置1break;P1 = 0x01; 〃数码管跑马显示HDelay_ms( 100); //flag置1后则进入电梯程序for(i = 0; i < 5; ++i) (P1 = P1 << 1;Delay_ms( 100);) 一)while(1) 〃电梯程序的循环(if( (key = KBscan()) == 0x77) 〃若点阵按键右下角的按键(其代码为0x77)按下(Warnning(); 〃则报警) else (Destination(); 〃查询有无楼层请求到达if( destination1 >= lift) 〃请求的楼层比要到达的楼层高(Up(); 〃电梯向上走) else (〃否则电梯向下走;Down();)))return 0;)〃中断请求,将flag置1,表示要进入电梯程序void Int0() interrupt 0(flag = 1;)〃延时程序,以毫秒为单位,用软件计时,输入的参数void Delay_ms( uint Time)( 一uint i = 0, j = 0;for(i = 0; i < Time; ++i) (for(j = 0; j < 125; ++j);〃电梯向上走void Up() (uchar n, m; //n为所在楼层,m 为存储查询有无楼层请求的变量( uchar i;〃循环控制status = 1;〃置1表示电梯向上走for( n = lift; n <= destination1; ++n) 〃电梯到达目的楼层之前往上走(Display( n, 1); //没到达一楼就显示该楼层数lift = n;m = Represent(); if( m == 9) (Warnning();) else (request[m] = 1;)for(i = 1; i <= 8; ++i)〃若请求到达的楼层在所在楼层和目的楼层之间{〃则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的 request 清零{request[i] = 0; Flash( 1); ))) --n; lift = n;( Flash( 1);〃到达目的楼层闪烁显示该楼层)//电梯向下走void Down() {uchar n, m; //n为所在楼层,m 为存储查询有无楼层请求的变量uchar i;//循环控制//读取点阵键盘//报警键按下则报警〃有楼层请求到达〃将对应的request 置1for(i = 1; i <= 8; ++i)〃若请求到达的楼层在所在楼层和目的楼层之间{〃则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的 request 清零{request[i] = 0; Flash( 0);))) ++n; lift = n; Flash( 0);〃到达目的楼层闪烁显示该楼层)〃报警函数void Warnning() {TMOD = 0x10; //T1定时器初始化ET1 = 1; TH1 = 0xfc; TL1 = 0x0c; TR1 = 1; while(1) {P1=0x04; P2=0x07; Delay_ms( 5); P1=0x08; P2 = 0x3f; Delay_ms( 5); P1=0x10;status = 0;〃置1表示电梯向上走for( n = lift; n >= destinationl; --n) 〃电梯到达目的楼层之前往下走(Display( n, 0);楼层数lift = n;m = Represent(); if( m == 9) (Warnning();) else%(request[m] = 1;)//没到达一楼就显示该〃读取点阵键盘//报警键按下则报警〃有楼层请求到达〃将对应的request 置1P1=0x02; P2 = 0x6D; Delay_ms( 5); //显示STOPP2=0x73;Delay_ms( 5);if( KBScan() != 0x77) 〃报警键没有按{ 〃则跳出,并停止喇叭响break;) ))¥〃获取目的楼层void Destination() {uchar j, n; 〃j循环控制变量,n存储度点阵键盘变量n = Represent(); 〃有键按下request[n] = 1; 〃其对应的楼层request 置 1if( status == 1) 〃若电梯向上走则从高楼层到低楼层扫描〃以此达到判断优先级的目的!{for(j = 8; j >= 1; --j) {if( request[j] == 1){request[j] = 0; 〃哪一层有请求destination1 = j; 〃则将目的楼层设为该楼break; 〃并将其对应的request置1,然后跳出)),)else if( status == 0) 〃若电梯向下走则从低楼层到高楼层扫描{ 〃以此达到判断优先级的目的for(j = 1; j <= 8; ++j){if( request[j] == 1){request[j] = 0;destination1 = j; break;))〃显示某一楼层void Display( uchar n, uchar a)( uchar i, b;" 一一if(a == 1)( b=0x73;)else if(a == 0)( b = 0x5E;)for(i = 0; i < 60; ++i)P1=0x20;P2 = b;Delay_ms( 10);P1 = 0x02;P2 = TAB[n];Delay_ms( 10);//闪烁显示到达的楼层void Flash( uchar a) (uchar i, j, b;uchar m;if(a == 1) //a=1 表示向上(b = 0x73; //七段码P)表示向下/ else if(a == 0) //a=0(b = 0x5E; //七段码 d) for(i = 0; i < 5; ++i) {m = Represent(); 〃闪烁时判断有无楼层请求到达 request[m] = 1; for(j = 0; j < 15; ++j) 〃闪烁显示楼层和P 或者d(P1=0x20; P2 = b; Delay_ms( 10); P1 = 0x02; P2 = TAB[lift];Delay_ms( 10);)一for(j = 0; j < 15; ++j) (P1 = 0x20; P2 = b; Delay_ms( 10); P1 = 0x02; P2 = 0x00;Delay_ms( 10);}一)}》#include ""〃延时void dl_ms()( 一uchar i;for(i = 0; i < 200; ++i);〃点阵键盘扫描uchar KBScan() (uchar sccode, recode; //sccode 低位,recode 高位uchar i, a; //i循环控制,a 读取P0 口P0 = 0x0f;if( (P0 & 0x0f) != 0x0f) //有无键按下(dl_ms();〃消抖延时 if( (P0 & 0x0f) != 0x0f)〃有键按下则继续recode = 0x7f; for(i = 1; i <= 4; ++i) (〃先显示P 或者d 以及楼层数〃再显示P 或者d 而不显示楼层数〃以此达到闪烁的目的P0 = recode; 〃从P0的最高位开始扫描,即点阵键盘第四行if( (P0 & 0x0f) != 0x0f)# {a = P0; 〃若该行有键按下,则返回其代码sccode = a & 0x0f;recode = recode & 0xf0;return (sccode + recode);)else{recode = (recode >> 1) | 0x80; //若没有则扫描其上面一行))))return 0; )//解析出按键所代表的楼层uchar Represent(){uchar key, n;key = KBScan();switch( key){case 0xee: n = 1; break; case 0xed: n = 2; break; case 0xeb: n = 3; break; case 0xe7: n = 4; break; case 0xde: n = 5; break; case0xdd: n = 6; break; case 0xdb: n = 7; break; case 0xd7: n = 8; break; case 0x77: n = 9; break; default: n = 0; break;)return n; )。
基于单片机原理的电梯自动控制系统摘要:本文介绍了基于单片机的电梯控制系统,硬件部分主要由单片机最小系统模块、电梯内外电路按键矩阵模拟检测模块、电梯外请求发光管显示模块、楼层显示数码管模块、电梯上下行及开关门模拟显示模块等5部分组成。
该系统采用单片机(AT89S51)作为控制核心,内外招使用按键按下和否而引起的电平的改变,作为用户请求信息发送到单片机,单片机控制电动机转动,单片机根据楼层检测结果控制电机停在目标楼层。
软件部分使用汇编语言,利用查询方式来检测用户请求的按键信息,根据电梯运行到相应楼层时,模拟按键引起电平变化,送到单片机计数来确定楼层数,并送到数码管进行显示。
硬件设计简单可靠,结合软件,基本实现了六层电梯运行的模拟。
关键词:AT89S51、电梯控制、单片机1 引言随着现代高科技的发展,住房和办公用楼都已经逐渐向高层发展。
电梯是高层宾馆、商店、住宅、多层仓库等高层建筑不可缺少的垂直方向的交通运输工具。
由于传统的电梯运行逻辑控制系统采用的是继电器逻辑控制线路。
采用这种控制线路,存在易出故障、维护不便、运行寿命较短、占用空间大等缺点。
从技术发展来看,这种系统将逐渐被淘汰。
而单片机价格相当便宜,由单片机设计的控制系统可以随着设备的更新而不断修改完善,更完美的实现设备的升级。
2 电梯控制系统原理电梯使用中大多采用交流变频电机拖动原理,其厢体由一条曳引钢缆连接,由安装在顶层的曳引轮和曳引电机拖动,电机的功率随着曳引重量的不同大小不等。
其主要的拖动及控制系统有:a)外呼内选系统,外部呼叫信号和指示以及厢体内选层和指示系统;b)平层换速系统,电梯快速到达指定楼层之前切换为慢速并到达平层位置停车;c)厢体状态指示系统,随时显示厢体所在位置;d)开关门控制系统,平层开门,关门行车;e)安全保护系统,含有上下限位、消防、满载、门电锁等功能;电梯运行基本过程是:由外部呼叫信号给出呼叫,控制系统判断厢体目前所处位置并和呼叫楼层进行对照,同方向还是反方向。
基于单片机的智能电梯控制系统设计摘要本文介绍了一种采用单片机STC89C52芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现四层电梯的智能控制,利用单片机编程简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。
本设计实现了电梯控制系统所需的一些基本功能,能通过电梯内按键或者电梯外上升、下降按键选择楼层,数码管显示实时楼层数,LED显示实时电梯运行状态。
原理图和PCB部分采用protel99se专业软件来设计,实现将设计产品化。
本次设计更注重了把一些新的思路加入到设计中。
主要包括采用了STC89C52芯片,使用C语言进行编程,使其具有了更强的移植性,更加利于产品升级。
关键词:STC89C52;电梯控制系统;protel99se;C语言AbstractThis paper introduces a design method of using STC89C52 chip for elevator control system, mainly describes how to use microcontroller programming to achieve the intelligent four storey elevator control, the design method of microcontroller programming simple and variable, shortens the development cycle, at the same time that the elevator control system smaller and more powerful. Some of the basic functions of the design and implementation of elevator control system required by the elevator, elevator buttons or rise, decline the key to select the floor, digital tube display real-time number of floors, LED display real-time operating state of elevator. Schematic and PCB design using Protel99SE software, the design of products. This design pays more attention to some new ideas into the design. Including the use of the STC89C52 chip, the use of C language programming, which has portability stronger, more conducive to the upgrading of products. Keywords: STC89C52; elevator control system; Protel99SE; C language第一章绪论随着人类社会已经逐步进入信息化的时代,信息社会的快速发展更是离不开电子产品的进步。
单片机课程设计一、设计名称:电梯控制系统设计二、设计人员:周海峰、杨柳、吴晶晶、邹敏三、指导老师:王宪菊四、设计要求:楼层:共六层设计名称:电梯控制系统设计六个按键:用来输入要去的楼层点阵1:显示当前楼层点阵2:显示“↑”或“↓”箭头例如:当前电梯停在三楼,当按下键1时,点阵1间隔一秒依次显示“2”,“1”,点阵2显示箭头↓;当按下键6时,点阵1间隔一秒依次显示“4”,“5”,“6”,点阵2显示箭头↑。
器件:89c51芯片、两个8*8点阵、6个按键五、器件介绍:89c51芯片:89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
结构特点:8位CPU;片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM64K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器;管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
建造6层电梯控制系统程序设计方案1.1 PLC的基本结构1、中央处理单元(CPU) 中央处理单元 (CPU)是PLC的控制核心。
它按照PLC系统程序赋予的功能:a. 接收并存储从用户程序和数据;b.检查电源、存储器、I/O以及警戒定时器的状态,并能诊断用户程序中的语法错误。
2、存储器可编程序控制器的存储器分为系统程序存储器和用户程序存储器。
存放系统软件(包括监控程序、模块化应用功能子程序、命令解释程序、故障诊断程序及其各种管理程序)的存储器称为系统程序存储器;存放用户程序(用户程序存和数据)的存储器称为用户程序存储器,所以又分为用户存储器和数据存储器两部分。
3.输入接口电路输入输出信号有开关量、模拟量、数字量三种,在我们实际涉及到的信号当中,开关量最普遍。
4.输出接口电路:可编程序控制器的输出有:继电器输出(M)、晶体管输出(T)、晶闸管输出(SSR)三种输出形式。
5.电源 PLC的电源在整个系统中起着十分重要得作用。
如果没有一个良好的、可靠得电源系统是无法正常工作的,因此PLC的制造商对电源的设计和制造也十分重视。
一般交流电压波动在+10%(+15%)范围内,可以不采取其它措施而将PLC直接连接到交流电网上去。
如FX1S额定电压AC100V—240V,而电压允许范围在AC85V—264V 之间。
允许瞬时停电在10ms以下,能继续工作。
一般小型PLC的电源输出分为两部分:一部分供PLC内部电路工作;一部分向外提供给现场传感器等的工作电源。
1.2 PLC的工作原理PLC则是采用循环扫描的工作方式。
一个扫描周期主要可分为3个阶段。
1.2.1输入刷新阶段在输入刷新阶段,CPU扫描全部输入端口,读取其状态并写入输入状态寄存器。
完成输入端刷新工作后,将关闭输入端口,转入程序执行阶段。
在程序执行期间即使输入端状态发生变化,输入状态寄存器的内容也不会改变,而这些变化必须等到下一工作周期的输入刷新阶段才能被读入。