8×8 LED点阵屏模仿电梯运行的楼层显示本科课程毕业设计.doc
本科课程设计(论文) 8×8 LED点阵屏模仿电梯运行的楼层显示学 院 信息工程学院 专 业 测控技术与仪器 (光机电一体化方向) 年级班别 20 级(1)班 学 号 学生姓名 指导教师 2014年01 月 13日摘要伴随着我国现代化程度的提高,电梯成为高层建筑中的重要交通工具,它是高层建筑中安全、可靠、垂直上下的运载工具,对改善劳动条件、减轻劳动强度起到很大的作用。同时也给人们的生活带来了便利,为我国现代化建设的加速发展提供了强大的保障。电梯的应用范围很广,可用于宾馆、饭店、办公大楼、商场、娱乐场所,仓库以及居民住宅大楼等。因此,在现代社会中电梯已成为人类必不可少的垂直运输交通工具。利用单片机控制电梯有成本低,通用性强,灵活性大以及易于实现复杂控制等优点。本课程设计采用了一种采用单片AT89C51芯片进行电梯控制系统的设计方法,主要阐述如何使用单片机进行编程来实现电子设计的方法,利用单片机编程实现功能,简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。本设计实现了电梯控制系统所需的一些基本功能,能通过数字按键选择楼层,点阵显示实时楼层数。原理图采用proteus专业软件来设计。关键词:单片机;电梯;系统;控制;C语言目录摘要11 任务提出与方案论证31.1设计任务及要求31.2课题设计内容31.3方案论证32 总体设计42.1设计原理及方法43硬件设计元器件选择53.1 AT89C51单片机53.2 74LS24573.3 LED点阵84 模块设计94.1单片机最小系统模块94.2开关控制模块104.3显示模块114.4声光模块114.5按键中断检测模块124.6电源电路模块124.7电路总图135 软件设计146 总结15附录A 程序清单16附录B 元器件目录表23参考文献24 1 任务提出与方案论证1.1课程设计要求1、 设计采用单片机控制8*8 LED点阵屏来模仿电梯运行的楼层显示装置。2、 单片机的Pl口的8只引脚接有8只按键开关KlK8,这8只按键开关K1K8分别代表l楼8楼。如果某一楼层的按键按下,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置。3、 在上述功能的基础上,向电路中添加LED指示灯和蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。4、 如果在待去的楼层的数字中,有的在当前运行的反方向,则数字先在当前方向运行完毕后,再依次按顺序前往反方向的数字位置。1.2课题设计内容本课题的主要任务是完成一个电梯系统的智能控制模块,即根据每个楼层不同顾客的按键要求,让电梯做出合理的判断,正确高效的指导电梯完成各项载客任务。设计基于单片机的电梯智能控制系统的硬件电路与软件程序,给出硬件系统的电路原理图,对硬件电路与软件分别进行调试,得到调试成功的基于单片机的电梯智能控制系统。根据此任务,本课题需要研究的内容有:1、根据系统的技术要求,进行系统硬件的总体方案设计;2、学习单片机的相关知识,并且加以运用;3、选择适当的芯片,并对其内部协议有所掌握,便于应用。4、研究单片机C语言编程,并且规定电梯的工作规则,用C语言加以实现;5、对软件和硬件进行调试,让其协调工作,完成指定任务。1.3方案论证本次设计的基本思想是采用AT89C51单片机作为核心,利用其丰富的I/O接口与外围电路配合进行控制。按题目要求采用8*8点阵来实时显示电梯所在楼层。由于是8层楼,采用8个独立键盘。当电梯到达目的楼层时,LED灯亮起,蜂鸣器响,此时即可进、出乘客,然后电梯根据乘客的选择判断去哪一层,继续运行。电梯的正常运行通过单片机的控制来实现。2 总体设计2.1设计原理及方法根据层次化设计理论,该设计问题自顶向下可分为单片机最小系统模块、显示模块、开关控制模块、电机驱动模块、稳压模块,其系统框图如图2.1所示。图2.1 电梯控制系统框图本次设计是采用键盘控制实现上下到指定楼层,通过稳压模块使电机转动带动电梯箱上下运动,到达指定楼层。显示模块是显示此时的楼层以及要求到达的楼层。电梯初始显示0。单片机的Pl口的8只引脚接有8只按键开关K1K8,这8只按键开关K1K8分别代表l楼8楼。如果按下代表某一楼层的按键,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置。在上述功能的基础上,向电路中添加LED指示灯和蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。例如,当前位置在l层时,用户依次按下6、5时,则数字分别向上滚动到5、6时暂停且LED闪烁片刻,同时蜂鸣器发出提示音。如果在待去的楼层的数字中,有的在当前运行的反方向,则数字先在当前方向运行完毕后,再依次按顺序前往反方向的数字位置。用P2口做8*8点阵的行选通,Pl口完 成按键的读取及确认。3.硬件电路器件选择3.1 AT89C51单片机AT89C51是一个低电压,高性能CMOS8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)。和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C51单片机能够被应用到控制领域中。 本设计采用AT89C51,它提供以下的功能标准:4K字节闪烁存储器,128字节随机存取数据存储器,32个I/O口,2个16位定时/计数器,1个5向量两级中断结构,1个串行通信口,片内震荡器和时钟电路。另外,AT89C51还可以进行0HZ的静态逻辑操作,并支持两种软件的节电模式。闲散方式停止中央处理器的工作,能够允许随机存取数据存储器、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存随机存取数据存储器中的内容,但震荡器停止工作并禁止其它所有部件的工作直到下一个复位。引脚图如图2-7所示。图3.1 AT89C51引脚VCC:电源电压 GND:地P0口:P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。作为输出口时,每一个管脚都能够驱动8个TTL电路。当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。P1口:P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。闪烁编程时和程序校验时,P1口接收低8位地址。P2口:P2口是一个内部带有上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时,可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个运行期间不变。闪烁编程或校验时,P2口接收高位地址和其它控制信号。P3口:P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。P3口除了作为一般的I/O口外,更重要的用途是它的第二功能,如下表所示:端口引脚第二功能P3.0RXDP3.1TXDP3.2INT0P3.3INT1P3.4T0P3.5T1P3.6WRP3.7RD表2-1P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。RST:复位输入。当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。ALE/ :当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。这个位置后只有一条MOVX和MOVC指令ALE才会被应用。此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。EA/VPP:外部访问允许。欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA端状态。如EA端为高电平,CPU则执行内部程序存储器中的指令。闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。XTAL1:片内振荡器反相放大器和时钟发生线路的输入端。使用片内振荡器时,连接外部石英晶体和微调电容。XTAL2:片内振荡器反相放大器的输出端。当使用片内振荡器时,外接石英晶体和微调电容。3.2 74LS245图3.274LS24574LS245是我们常用的芯片,用来驱动LED或者其他的设备,它是8路相同三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0口最大负载能力时,必须接入74LS245等总线驱动器。 当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高组态。 由于P2口始终输出地址的高8位,接口时74LS245d 三态控制端1G和2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1D1),其他时间处于输出(P01D1)。3.3.LED点阵图3.3 LED点阵外观显示屏是由发光二极管行列组成的LED点阵模块组成显示屏体。本设计中选择8*8的点阵是由64个发光二极管按规律组成的。如图2-10。图3.4 LED点阵内部结构如图2-8所示的发光二极管,行接高电平,列接低电平,发光二极管导通发光。8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。4 模块设计4.1单片机最小系统模块图4.1单片机最小系统单片机最小系统包括主芯片,复位电路和晶振脉冲产生电路。X1为12MHz晶振,与30Pf电容并联,产生1us的脉冲信号作为单片机的“心脏”部分。复位电路是开关与10uf电容并联组成的上电自动复位电路,在RST端为高电平时单片机清零,也即开关按下会产生清零信号。RP1为排阻,作为P0端的上拉电阻,接此原因是P0端口是由OC门组成。U1为数据输入端口,通过电脑编程能将程序通过此接口烧录入单片机中。8位CPU·4kbytes,程序存储器(ROM) (52为8K),128bytes的数据存储器(RAM) (52有256bytes的RAM),32条I/O口线·111条指令,大部分为单字节指令,21个专用寄存器,2个可编程定时/计数器,5个中断源,2个优先级(52有6个),一个全双工串行通信口,外部数据存储器寻址空间为64kB,外部程序存储器寻址空间为64kB,逻辑操作位寻址功能,双列直插40PinDIP封装,单一+5V电源供电。CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。4.2开关控制模块图4.2 开关控制模块单片机的Pl口的8只引脚接有8只按键开关K1K8,这8只按键开关K1K8分别代表l楼8楼。如果按下代表某一楼层的按键,单片机控制的点阵屏将从当前位置向上或向下平滑滚动显示到指定楼层的位置,系统检测按键低电平识别依次按下的多个按键。4.3显示模块图4.3显示模块8X8点阵,它共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;p2进行列扫描,p0输入数据.4.4声光模块图4.4P3.0、P3.1口分别控制电路中LED指示灯和蜂呜器,使系统可以同时识别依次按下的多个按键,在到达指定位置后蜂鸣器发出短暂声音且LED闪烁片刻,数字继续滚动显示。4.5按键中断检测模块图4.5按键中断检测模块,由于单片机检测低电平,有8个按键需要检测,采用2个四输入端与门和一个二输入端与门搭配,使之达到检测是否有按键按下目的。4.6 电源电路模块电源电路如图2-6所示。整个系统采用的电源电压只需+5V电压,将交流电经变压器变换为12V交流电,再用整流桥得到8.5V左右的直流电,采用不可调的3端稳压器件LM7805将电源稳定在5V直流输出。图4.6 电源电路4.7电路总图图4.7 电路总图5. 软件设计YNYNNNN开始创建变量,数组主程序开T0中断初始化数组大小排列计数计满?进入T0中断有无按键?点阵扫描当前楼层进入外部中断存键值判断上升下降标志进入T0中断是否上升?点阵上升扫描是否到达指定楼层?蜂鸣器响,LED闪烁有无上升下降请求?点阵下降扫描YYYY图5.1 电梯智能控制功能实现流程图详细程序见附录。6 总结本课程设计了实现单片机控制下电梯智能控制系统的设计方案。由于条件的限制,没有做成真正的电梯。但做成的电梯智能控制系统的硬件电路已能演示。可以按照乘客的要求,将乘客送到要去的目的层。但是,电梯还有很多的扩展的空间并未实现,比如电梯自动语音报站系统的设计,楼层监控系统,节能设计以及其它更多的服务。设计的核心内容就是利用单片机C51的编程来实现控制外围各电路的运行。通过本次设计,我熟练掌握了程控系统设计的一般步骤,熟悉了编程软件的用法,并对编程能力起到了一定的提高作用。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。在此次设计中,我们得到以下体会:一、在这次点阵设计的过程让我进一步熟悉KEIL及Proteus的使用。二、通过这次点阵设计,重新复习并进一步学习了MCS-52优点,明确了研究目标。三、在后的设计中,既要想到电路器件的联合使用,又要灵活变通,举一反三。通过本次设计,我收获颇丰,本人的知识领域得到进一步扩展,专业技能得到进一步提高,同时提高了分析和解决实际问题的综合能力。另外,也培养了自己严肃认真的科学态度和严谨求实的作风。由于本人水平有限,本次设计还存在一些不足之处,请评阅与答辩的各位老师批评指正。 附录A 程序清单#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code Table_of_Digits= /点阵显示数组 0x00,0x3C,0x24,0x24,0x3C,0x24,0x24,0x3C, /8 0x00,0x3C,0x04,0x04,0x04,0x04,0x04,0x00, /7 0x00,0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C, /6 0x00,0x3C,0x20,0x20,0x3C,0x04,0x3C,0x00, /5 0x00,0x0C,0x14,0x24,0x7E,0x04,0x04,0x00, /4 0x00,0x3C,0x04,0x3C,0x04,0x04,0x3C,0x00, /3 0x00,0x3C,0x04,0x04,0x3C,0x20,0x3C,0x00, /2 0x00,0x08,0x38,0x08,0x08,0x08,0x3E,0x00, /1 0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00 /0;uchar i=0,t=0,j=0,a=0;/i-行扫描,t-延迟char offset=0;static int Current_floor=0,Pressed_key_up=0,Pressed_key_down=0,b=0,c=0,max=0,min=0;/Current_floor-当前楼层,Pressed_key_up-上升请求,Pressed_key_down-下降请求 int flag;int floor_up8=9,9,9,9,9,9,9,9; /上升请求存放数组int floor_down8=0,0,0,0,0,0,0,0; /下降请求存放数组sbit KEY1=P10; /定义P1口按键sbit KEY2=P11; sbit KEY3=P12;sbit KEY4=P13;sbit KEY5=P14;sbit KEY6=P15;sbit KEY7=P16;sbit KEY8=P17;sbit LED=P37; /定义LED跟蜂鸣器sbit SPEAK=P36;void Key_up_comparison();/函数声明 , 把floor_up按从小到大排列void Key_down_comparison(); /把floor_down按从大到小排列void max_min_comparison();/比较出floor_up的最大值(max)和floor_down的最小值(min)/主函数/void main()P2=0x80; /初始化LED=0;SPEAK=0;TMOD=0x01;/T0方式TH0=(-6000)/256; /6ms定时TL0=(-6000)%256;IT0=1;IE=0x83;TR0=1;ET0=1;Pressed_key_up=floor_up0;while(1)/循环排列Key_up_comparison();Key_down_comparison();max_min_comparison();void LED_Screen_Display() interrupt 1/进入中断,显示楼层TH0=(-6000)/256;/6msTL0=(-6000)%256;P0=0xff;Pressed_key_up=floor_up0;Pressed_key_down=floor_down0;if(flag=1) /上升标志 if(Pressed_key_up!=9) /有上升请求 if(Pressed_key_up>Current_floor) /点阵平滑上升显示P0=Table_of_Digits(8-Current_floor)*8+i+offset;P2=_crol_(P2,1); if(+i=8) i=0;P2=0x80;if(+t=25) /延迟t=0;if (-offset = -8) offset = 0;+Current_floor; else if(Pressed_key_up<Current_floor);else if(Pressed_key_up=Current_floor) /到达请求楼层P0=Table_of_Digits(8-Current_floor)*8+i;P2=_crol_(P2,1);if(+i=8) i=0;P2=0x80;LED=LED;SPEAK=SPEAK;/蜂鸣器响,LED闪烁if(+t=250)t=0;if(Current_floor=Pressed_key_up)Current_floor=Pressed_key_up;if(Current_floor=max)flag=0;floor_up0=9; else if(Pressed_key_up=9)/无请求,扫描显示当前楼层 P0=Table_of_Digits(8-Current_floor)*8+i;P2=_crol_(P2,1);if(+i=8) i=0;P2=0x80;if(+t=250)t=0; else if(flag=0) /下降标志 if(Pressed_key_down!=0) /有下降请求 if(Pressed_key_down>Current_floor);else if(Pressed_key_down<Current_floor)/点阵平滑下降显示P0=Table_of_Digits(8-Current_floor)*8+i+offset;P2=_crol_(P2,1);if(+i=8) i=0;P2=0x80;if(+t=25)t=0;if (+offset = 8) offset = 0;-Current_floor; else if(Pressed_key_down=Current_floor) /到达请求楼层P0=Table_of_Digits(8-Current_floor)*8+i;P2=_crol_(P2,1);if(+i=8) i=0;P2=0x80;LED=LED;SPEAK=SPEAK;/蜂鸣器响,LED闪烁if(+t=250)t=0;if(Current_floor=Pressed_key_down)Current_floor=Pressed_key_down;if(Current_floor=min)flag=1;floor_down0=0; else if(Pressed_key_down=0)/无请求,扫描显示当前楼层 P0=Table_of_Digits(8-Current_floor)*8+i;P2=_crol_(P2,1);if(+i=8) i=0;P2=0x80;if(+t=250)t=0; void Key_detection() interrupt 0 /按下按键,进入外部中断,将上升请求跟下降请求放入数组,并判断标志flagP0=0xff;P2=0x80;i=0;/防抖if(KEY1=0) j=8;else if(KEY2=0) j=7;/判断请求else if(KEY3=0) j=6;else if(KEY4=0) j=5;else if(KEY5=0) j=4;else if(KEY6=0) j=3;else if(KEY7=0) j=2;else if(KEY8=0) j=1;if(j>Current_floor)/将上升请求放入数组if(floor_down0=0)flag=1;floor_upb+=j;if(b=8) b=0;else if(j<Current_floor) /将下降请求放入数组if(floor_up0=9)flag=0;floor_downc+=j;if(c=8) c=0;else if(j=Current_floor);void Key_up_comparison()/把floor_up按从小到大排列int a1,a2,a3=0;for(a2=0;a2<7;a2+)for(a1=0;a1<7;+a1)if(floor_upa1>floor_upa1+1)a3=floor_upa1;floor_upa1=floor_upa1+1;floor_upa1+1=a3;if(floor_upa1=floor_upa1+1)floor_upa1+1=9;void Key_down_comparison()/把floor_down按从大到小排列int a1,a2,a3=0;for(a2=0;a2<7;a2+)for(a1=0;a1<7;+a1)if(floor_downa1<floor_downa1+1)a3=floor_downa1;floor_downa1=floor_downa1+1;floor_downa1+1=a3;if(floor_downa1=floor_downa1+1)floor_downa1+1=0;void max_min_comparison() /求出floor_up的最大(max)和floor_down的最小(min)int j;for(j=1;j<=7;j+)if(floor_downj=0);else if(floor_downj+1=0)min=floor_downj;else if(floor_downj>floor_downj+1)min=floor_downj+1;else min=floor_downj;for(j=1;j<=7;j+)if(floor_upj=9);else if(floor_upj+1=9)max=floor_upj;else if(floor_upj<floor_upj+1)max=floor_upj+1;else max=floor_upj;附录B元器件目录表序号型 号(名称)数量作用1AT89C511单片机274LS2451锁存器374LS212判断按键474LS091判断按键510k排阻1上拉电阻68*8LED点阵显示器1显示数字7按钮9复位按钮等822pF瓷片电容2晶振电路用910F电解电容1上电复位1011.0592MHz1晶振11蜂鸣器1提示12LED1提示1347k欧电阻114100欧电阻215三极管1驱动参考文献1 李朝青单片机通讯技术与工程实践北京:航空航天大学出版,2007.22 李群芳单片机原理接口与应用北京:清华大学出版社,2005.63 朱清慧,张凤蕊,翟天嵩,王志奎.Proteus教程电子线路设计、制作与仿真M. 北京:清华大学出版社,2008.4 谢自美电子线路设计.武汉:华中科技大学出版社,2000.55康华光,陈大钦. 电子技术基础模拟部分(第五版)M. 北京:高等教育出版社,20056郭天祥.51单片机C语言教程M.北京:电子工业出版社.2009.17 刘欣铭,张广斌.LED显示屏技术综述J.黑龙江电力,2003, 25(4):294-296.8 苏凯,刘国庆,陈国平.MCS-51系列单片机系统原理与设计J.北京:冶金工业出版社,2003