基于STC89C51单片机的模拟电梯设计毕业论文

上传人:痛*** 文档编号:41348132 上传时间:2021-11-20 格式:DOC 页数:22 大小:205.02KB
收藏 版权申诉 举报 下载
基于STC89C51单片机的模拟电梯设计毕业论文_第1页
第1页 / 共22页
基于STC89C51单片机的模拟电梯设计毕业论文_第2页
第2页 / 共22页
基于STC89C51单片机的模拟电梯设计毕业论文_第3页
第3页 / 共22页
资源描述:

《基于STC89C51单片机的模拟电梯设计毕业论文》由会员分享,可在线阅读,更多相关《基于STC89C51单片机的模拟电梯设计毕业论文(22页珍藏版)》请在装配图网上搜索。

1、题 目:基于STC89C51单片机的模拟电梯设计 目录一、 设计任务11.1 设计内容与要求1二、设计系统主要功能的说明22.1 设计设备的选择22.2 设计原理2三、硬件电路设计33.1电源部分33.2按键部分43.3 数码管显示原理53.4电机驱动原理53.5单片机最小系统6四、软件设计流程74.1 延时程序控制74.1.1 循环延时服务控制84.1.2 编码按键扫描控制84.2 软件的实现84.2.1主程序的实现84.2.2子函数服务程序的实现94.2.3 键盘扫描的实现方法9五、软、硬件的调试115.1 调试方案的确定115.2 调试过程11六、设计心得11参考文献13附录A 模拟电梯

2、的程序15摘要: 本设计是使用宏晶公司的STC89C51RC加外围器件作控制单元,用数码管显示,制作的经济实惠的电梯模拟系统。其原理图可分为按键部分、显示部分、电机部分、最小系统部分。两个按键(一个电梯内,一个电梯外)对应一个楼层,另有开门、关门两个按键。芯片一旦检测到某楼层的按键被按下,就会在对应端口输出5V高电平驱动电机来到该楼层,程单序会延迟几分钟,等人进入电梯后,关门,去到要去的楼层。在整个过程中,数码管会显示楼层数。最小系统为单片机提供时钟信号和复位功能。 关键词:STC89C51 单片机 模拟电梯 四位一体数码管一、 设计任务(选题) 随着科技的发展,单片机因强大的功能、低廉的价格

3、,越来越被广泛使用,成为很多电子产品中不可缺少的部分。同时因为单片机是模拟电子与数字电子的结合品,它的应用对于我们电子专业来说是一门必要掌握的课程。 电梯对人们来说已经是必不可少了乘载工具,所以将单片机应用于实际的生活中,才达到学以致用、举一反三的境界。二、 方案设计1.处理部分:现在的单片机越来越注重功耗和处理数据快慢的问题,目前最低功耗最有发展潜力的单片机是美国TI公司的MSP430系列。不过这里为了学以致用和节约成本,同时电梯的处理数据就不需要那么高的速度,所以选用8位的STC89C51单片机。2.显示部分:本来可以用15*18的点阵,可是考虑到成本和接电路布线的繁琐,更糟糕的是那耗电大

4、而不是实际的电路就没必要。所以直接用四位的数码管显示就好了。3.控制部分:本来可以用4*4的键盘,现在只用了四位数码管代表三层楼,所以只用3个按键代表梯内3层楼,3个按键代表梯外3层楼,加上“关门”和“开门(延时)键各一个,总共8个键组成编码式按键就行了。功能:三、 硬件部分1.原理框图2.原理图细分电源部分:用变压器把交流电220V转为交流电9V(不能小于或者等于交流电5伏,因为三端稳压管7805的输入端输出端电波压差为2.5V),交流9V经过整流桥D1后得到平均值为8.1V单方向全波脉动电压,其中停含有较大的汶波,为了得到平滑的电压,在其后面加滤波电容滤除交流成分。涤纶电容104可用来抵消

5、输入端的电感效应,还可以消除电源的高频干扰。一般取值是0.1-1uF。波动较大8.1V电压经7805的1脚输入,输出端输出稳定的5V,最后还要用电解电容10uF和涤纶电容104再次滤波,使电压更稳定,以供单片机和其他元器件需要。按键部分:8个按键分别是电梯外三个键代表想电梯来到的每一层楼,电梯内三个键代表想要去的三层楼,一个关门键和一个开门键。它们一边直接接地,另一边直接接STC的P1和P3口,这样就可以用高低电平去判断,然后执行对应键的操作函数。显示部分:用一个四位的共阳数码管,再用四个9015(PNP)三极管去控制显示。这样就不会占用四个I/O而浪费资源。当然数码管还要加上100的限流电阻

6、。再备用一个LED灯。电机部分:用P20和P21输出高低之间去驱动8550组成的对称电路,从而控制电机的正转和反转。晶振部分:用12M和30pF的涤纶电容使单片机STC89C51起振,从而为单片机STC89C51提供频率信号。最小系统:用一个按键、200和利用电容(电解电容22uF)充放电原理去使STC89C51重新上电复位。四、 软件部分1. 程序流程图五、 调试和验证首先布局好电路的摆布,如何让人一目了然,如何好看。跟着把电路焊接完毕。 先不要急着把单片机插上去整个系统调试,而是先测试电源部分5V正常与否。当我测试到5V波动很大或者直接没有时,发现三端稳压管7805之后的那个涤纶电容104

7、已经击穿了,换了一个之后电源稳定正常了。 然后在仿真软件Proteus上对照自己设计的电路画了个电路图,因为上面没有9015三极管只有通用的PNP三极管只好用这个来替补。当我在Keil C51上随便编了一个显示5678的函数把它灌入仿真软件上调试时,发现数码管四位都是显示8。然后我再倒头看看程序是否错误,感觉真的没错啊。又用另外的方式编写了显示1234的程序,它还是一样显示4444。我就在Keil 上一步一步地调试程序,真的感觉没有错,当时一时懵了。最后我就做了决定,直接把把程序烧进上,插上到电路板上,那显示竟然与自己编写的完全一致喔。那时一片黑云散了,心情很好。 后来觉得调试不方便,不可能每

8、次都要把程序烧进单片机上在电路板上调试。我就仿真软件上把那个通用三极管换成反相放大器,这样调试就好了。六、心得每一次努力都总会有或多或少的收获,所以当我们做每一件事时都要全力以赴,否则就不要去做。这对我们以后工作乃至生活形成一个良好的习惯和心态。结论谢辞在、 首先感谢各位老师三年来的教导。俗话说入靠师傅,修行在个人。刚接触这个专业时,还不清楚学什么,能学到什么,而现在虽说七、参考文献 谭浩强编著.C语言程序设计胡宴如、耿苏燕编著.模拟电子技术 刘守义、杨宏丽、王静霞编著.单片机应用技术 郑鹏思、林远长、董前程、矫津毅编著.Protel99 SE附录A模拟电梯程序#includesbit key

9、3=P11;sbit key2=P10;sbit key1=P12;sbit key4=P13;sbit key5=P14;sbit key6=P37;sbit key7=P36; /关门升降sbit key8=P35; /开门延时键sbit P24=P24;sbit P25=P25;sbit P26=P26;sbit P27=P27;sbit zhengzhuan=P20; /电动机正转sbit fanzhuan=P21; /电动机反转unsigned int i,j;unsigned char sanlou=0;unsigned charerlou=0;bit biaozhi=0;unsi

10、gned charyilou=0;unsigned char qusanlou=0;unsigned char querlou=0;unsigned char quyilou=0; unsigned char code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/-延时1ms函数-void delay(unsigned int t) for(i=0;it;i+) for(j=0;j121;j+) ; /-外按三楼函数-void display3(void) if(qusanlou=1) for(i=0;i500;i+) for(

11、j=0;j121;j+) ; if(P26=0)/如果现在在一楼则显示从一楼到三楼函数 P2=0xb0; P0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key2=0) /判读外二楼有没有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&qusanlou=1);/同时要是之前的内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出

12、延时函数 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同时要是内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(

13、erlou=1) delay(1000); /在二楼停留多1s当模拟有人进出 zhengzhuan=0; fanzhuan=0; /电机停止 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xe0; P0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同时要是内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就

14、延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(P25=0) P2=0xd0; P0=tab2; zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000); P2=0xe0; P0=tab3; if(P24=0)/如果现在还是显示3楼 P2=0xe0; P0=tab3; sanlou=0; erlou=0; qusanlou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-外按二楼

15、函数,不过最后还是到先三楼去-void display2(void) if(querlou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(P26=0) /如果现在在一楼则显示从一楼到二楼再到三楼函数 P2=0xb0; P0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=2

16、00;/把i变成200跳出延时函数 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000); /上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /如果再次开门就延时1s if(key7=0) delay

17、(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); delay(1000); delay(1000);/在二楼停留多1s当模拟有人进出 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xe0; P0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是

18、内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 erlou=0; biaozhi=biaozhi;/为了不让在显示完上升函数时再去显示下降函数 /- / 如果现在是在三楼的话 /- if(P24=0&biaozhi=0) /如果现在在三楼的话则从三楼到二楼再到一楼 P2=0xe0; P0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1

19、); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内

20、二楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /在二楼停留多2S当模拟有人进出 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层

21、楼的时间 P2=0xb0; P0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 erlou=0; biaozhi=0; querlou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-外按一楼函数-void display1(void) if(qu

22、yilou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(P24=0) /如果现在在三楼则显示从三楼到一楼函数 P2=0xe0; P0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key2=0)/判读外二楼有没有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&quyilou=1); /同时要是内一楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); whil

23、e(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同时要是内一楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(2000); /如果再次开门就延时2s if(

24、key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(erlou=1) zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /在二楼停留多1s当模拟有人进出 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xb0; P0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同时要是

25、内一楼键按下才有效 delay(10); while(key8=0); delay(2000); /如果再次开门就延时2s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 yilou=0; erlou=0; if(P25=0) P2=0xd0; P0=tab2; zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000); P2=0xb0; P0=tab1; yilou=0; if(P26=0)/如果现在还是显示3楼 P2

26、=0xb0; P0=tab1; yilou=0; quyilou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-void main (void) P2=0xb0; P0=tab1; /一开始显示一楼 while(1) if(key3=0) /判断外三楼键 delay(10); while(key3=0); sanlou=1; qusanlou=0; if(sanlou=1) display3(); /显示外三楼的函数 /- if(key2=0) /判读外二楼键 delay(10); while(key2=0); erlou=1; querlou=0; if(erlou

27、=1) display2(); /显示外二楼的函数 /- if(key1=0) /判读外一楼键 delay(10); while(key1=0); yilou=1; quyilou=0; if(yilou=1) display1(); /显示外一楼的函数 /- / 电梯内键 /- if(key4=0)/判断内去三楼键 delay(10); while(key4=0); sanlou=1; qusanlou=1; if(key5=0)/判断内去二楼键 delay(10); while(key5=0); erlou=1; querlou=1; if(key6=0)/判断内去一楼键 delay(10); while(key6=0); yilou=1; quyilou=1; 22

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!