1、电信课程设计简易电梯北津学院单片机应用系统设计报告题目 简易电梯 姓 名:邓昌能学 号:090912049专 业:电子信息工程班 级:0922指导教师:倪文志职 称:教授北津学院计电系2012年7月课程设计(实习)评审表姓 名邓昌能学 院北津学院学 号090912049专业班级电信0922题 目简易电梯评审意见评审成绩指导教师签名职称评审时间 年 月 日课程设计(实习)作品验收表题目简易电梯参与人员姓 名邓昌能班 级电信0922学 号090912049设计任务与要求:(1)设计4层电梯,当按下需要到达的层次后,如果电梯向上运行,则黄色的LED灯亮,如果电梯向下运行,则绿色的LED灯亮,如果到达
2、选取的楼层或者电梯到达顶楼或者1楼的话,红色的LED灯亮,表示就绪状态。同时数码管显示电梯到达的相应的楼层号。(2)当有人按下未到达楼层的开关时,电梯到达那一层时,停留10秒,然后继续上升到最终的楼层。向下运行同理。作品完成情况:验收情况: 验收教师签名:_ 年 月 日注:1. 除“验收情况”栏外,其余各栏均由学生在作品验收前填写。2. “验收情况”栏由验收小组按实际验收的情况如实填写。简易电梯的设计1 设计任务与要求1.1 设计任务(1)设计4层电梯,当按下需要到达的层次后,如果电梯向上运行,则黄色的LED灯亮,如果电梯向下运行,则绿色的LED灯亮,如果到达选取的楼层或者电梯到达顶楼或者1楼
3、的话,红色的LED灯亮,表示就绪状态。同时数码管显示电梯到达的相应的楼层号。(2)当有人按下未到达楼层的开关时,电梯到达那一层时,停留10秒,然后继续上升到最终的楼层。向下运行同理。1.2 设计要求1.2.1 基本要求根据课题要求,通过查阅资料等,独立完成课题的方案设计、电路设计、系统流程图设计、仿真分析、调试和指标测试,撰写设计报告。1.2.2 具体要求(1)根据应用系统的要求,初步掌握总体结构的方法和构思,从中选择一种最佳的设计方案。(2)完成系统的整体电路和系统流程图。首先画出程序总体流程图,然后进行各控制模块程序的设计、编写系统程序。(3)利用Proteus软件进行仿真分析和调试,检测
4、电路功能和性能指标。在应用单片机仿真软件来开发应用系统及仿真调试的过程,先进行各模块调试,然后进行各程序模块的联调,最后与硬件一起进行联调,反复检测和修改直至开发结束。(4)仿真通过了,进行安装系统。2 系统功能描述根据设计的要求,设计需要实现以下的功能:(1)打开电源后,显示器显示初始状态,此时电梯显示的是停在一楼。(2)设置一个初始楼层,电梯从一楼开始向上运行。每一楼层显示停留10秒(3)输入楼层时用独立按键,键盘所对应的楼层为1到4层。(4)LED数码管显示的是1、2、3、4表示的是第四层楼。3 硬件系统总体设计简易电梯工作的主要过程是LED数码管显示楼层所在的位置,LED灯显示电梯的工
5、作状态,黄色LED灯亮则表示电梯正在往上运行,绿色LED灯亮则表示电梯正在向下运行,红色LED灯亮则表示电梯处于就绪状态,只有当用户键入所要去的楼层的开关时电梯才会运行。电梯在到达顶楼和到达一楼的时候是处于就绪状态的。系统总原理框图如下:图1 电梯总体设计结构框图3.1 系统的设计方案采用一种用以AT89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,能实现基本的简易电梯功能。本设计采用的电源是5V。3.2 显示模块设计方案采用共阴的7段LED数码管显示器:LED数码管亮度高、醒目、显示的信息量小,而且格上较为便宜。当接通电源后,LED灯的初始状态是1
6、,表示现在处于楼层一的位置。当电梯处于运行状态时,LED灯会显示电梯所在的楼层。图2 一位7段共阴数码管3.3 按键模块设计方案本设计全部采用独立按键作为输入信号往单片机内部送信号,从而对电梯进行控制,每一层都用一个按键来控制,即每口送一个低电平,送往单片机程序,从而使程序执行,控制外部的电路,是电梯运行,达到控制电梯的作用。P2口接4个开关(k1-k4),分别代表四层楼的呼叫按钮。图3 按键电路3.4 复位电路的设计方案 复位电路由电阻、电容、按键组成,如下图所示:图4 复位电路在单片机启动0.01S后,电容C3两端的电压持续充电为5V,这是时候1K电阻两端的电压接近于0V,RST处于低电平
7、所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.01S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候1K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。根据实际情况选择如图所示的复位电路。该电路
8、在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻 上的电压接近电源电压,即RES为高电平,在电容充电的过程中RES端电压逐渐下降,当RES端的电压小于某一数值后,CPU脱离复位状态,由于电容C足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C通过R-1放电。当电容C1放电结束后,RES端的电位为高电平。由于RES为高电平,CPU处于复位状态,松手后,电容C1充电,RES端电位下降,CPU脱离复位状态。4 软件系统的设计设计电梯的控制主要是通过程序来进行控制的,
9、在写程序时主要采用查询的方式来进行对外输入信号进行不断的查询,从而往单片机内部输入信号,使程序运行。程序主要分为六个模块:(1) 初始化函数:对单片机进行初始化,使数码管显示当前的位置。(2) 按键检测函数:对输入信号进行查询,只要查询到有呼叫信号,就判断是否响应该信号,若电梯处于上升状态要想下降,则必须等到电梯到达相应楼层后才能响应,否则不响应。(3) 定时器中断延时:设置电梯在所在楼层停留的时间。(4) 目的楼层查询函数:检测电梯是否到达目的楼层,如果到达则数码管显示相应的楼层数。(5) 电梯运行方向检测函数:检测电梯的方向是否改变。(6) LED灯点亮函数:检测电梯的运行状态。如果电梯向
10、上,则点亮黄色的LED灯,如果电梯向下运行,则点亮绿色的LED灯,如果电梯处于就绪状态,则点亮红色的LED灯。编写程序时,由于是采用的查询的方式,所以要对信号进行不断的查询,知道查询到有用的信号才响应,从而往单片机外部输出信号,完成对电路的控制。原程序见附录1。5 遇到的问题及解决的办法(1)在电路图的设计方面,由于开始我对简易电梯的认识不够全面,设计的时候过于简单,没有数码管用于显示楼层,也没有LED灯显示电梯运行的状态。在老师的指导下,我完善了电路图的设计。另外、复位电路不能响应,原因是电容太高了,经过调正复位电路已经能够正常工作,LED状态灯最开始也是不亮的,经过检查是由于电阻过高,经过
11、调整现已解决。(2)在软件设计方面,我的程序过于冗长,这个是由于自己对C语言掌握的还不够娴熟,另外就是在设计楼层的状态显示程序时,对电梯运行的考虑欠妥当,导致电梯运行时LED灯指示错误。这个在同学的帮助下,圆满解决。虽然在设计中遇到很多问题,但我觉得这锻炼了我的理论联系的实际的能力,也让我发现了自己的不足,在今后的学习中,我将更加努力的学好相关技术。6 课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过此次课程设计,我对PROTEUS和KEIL的使用有了一定深度的了解,掌握了这两款软件的基本使用
12、方法,并且通过这次以理论为基础的实践操作之后,我对单片机的51系列的工作原理也有了更深入的认识。在使用KEIL软件编写程序时,刚开始调试时有许多的错误,看得我头都大了,但是,在我的努力及同学的帮助下都被一一克服。我得到的最有用的教训就是,写程序必须仔仔细细认认真真的,不能输错一个字符标点,不能少输一个字符或则标点,一旦输错,程序就错误百出。在修改的时候要有耐心,一个一个的看,一句一句的查,绝不能心急浮躁,否则可能错误的没找到到却把正确的改错了!这次的课程设计也极大的提高了我的动手能力,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中
13、得出结论,从而提高自己的实际动手能力和独立思考的能力,而且还可以加强我们动手查资料的能力,增长我们的知识。参考文献1 陈伯阳.单片机原理及应用实验指导书. 自编实验指导书,配合实验平台进行2 李朝青.单片机原理及接口技术(第3版)北京: 北航出版社,20063 赵亮, 候国锐.单片机C语言编程与实例.北京: 人民邮电出版社,20034 沙占友, 王彦朋, 孟志永.单片机外围电路设计.北京: 电子工业出版社,20035 马忠梅, 刘滨, 戚军等.单片机C语言Windows环境编程宝典.北京: 北航出版社, 2003附录1 简易电梯的源程序#include #define uchar unsign
14、ed char#define uint unsigned intsbit K1=P27;sbit K2=P26;sbit K3=P25;sbit K4=P24;sbit red=P30;sbit green=P31;sbit yellow=P32;uchar f;uchar run;uchar floor=1,zui; /floor表示楼层,zui是表示最高或最低目的楼层bit direct=1; /direct表示方向(=1是向上,=0是向下)int p; /p表示延时计数量uchar a=0,0,0,0,0; /如果按下键盘,则相应的楼层元素设置为1uchar b1=0xff,0xf7,0
15、xfb,0xfd,0xfe; /led灯点亮的数组uchar led5=0x3f,0x06,0x5b,0x4f,0x66;void intial() /初始化函数,定义定时器的相关信息TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;ET0=1;EA=1;void delay1ms(uchar z) /1ms延时程序 uchar i; while(z-) for(i=0;i1) a1=1; TR0=1; else a1=0; if(K2=0) delay1ms(15); if(K2=0) if(direct=1) if(floor=1)
16、 a2=1; TR0=1; else a2=0; else if(floor2) a2=1; TR0=1; else a2=0; if(K3=0) delay1ms(15); if(K3=0) if(direct=1) if(floor3) a3=1; TR0=1; else a3=0; else if(floor=4) a3=1; TR0=1; else a3=0; if(K4=0) delay1ms(15); if(K4=0) if(direct=1) if(floor4) a4=1; TR0=1; else a4=0; else a4=0; void chazuizhi() /目的楼层查
17、询程序 uchar i; if(!(K1&K2&K3&K4) if(direct=1) for(i=1;i0;i-) if(ai=1) zui=i; void bianxiang() /查询电梯运行方向是否改变 if(floor=zui) if(direct=1) if(floor=4) direct=0; if(zui1) direct=0; if(K2=0)&(zui2) direct=0; else if(floor=1) direct=1; if(zui1) while(K1&K2&K3&K4) green=1; red=0; yellow=1; ; if(K3=0)&(zui3) d
18、irect=1; if(K4=0)&(zui4) direct=1; void display() /点亮led灯程序 P1=b1floor; P0=ledfloor; if(TR0=0) green=1; red=0; yellow=1; if(direct=1)&(TR0=1) green=1; yellow=0; red=1; if(direct=0)&(TR0=1) green=0; yellow=1; red=1; void main() /主函数 intial(); while(1) anjian(); chazuizhi(); display(); bianxiang(); void t0() interrupt 1 /中断函数 TH0=(65535-50000)/256; TL0=(65535-50000)%256; if(direct=1) if(floorzui) TR0=1; if(afloor=1) if(p=200) p=0; afloor=0; else p+; else if(p=60) p=0; floor-; else p+; else afloor=0; TR0=0; 附录2 简易电梯的原理图图5 电梯原理图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1