900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工

【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工

时间:2020-02-12 08:24:09

相关推荐

【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工

typora-root-url: ./

【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工程+答辩论文)

文章目录

typora-root-url: ./【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工程+答辩论文)设计说明书摘要设计框架架构设计说明书及设计文件源码展示

设计说明书

摘要

针对于当前社会所使用的电梯不能达到较高的节能省电的工作,本文设计出一款基于单片机的双电梯控制系统。基于单片机的系统的研究意义在于可以通过用控制的方式直接对物体进行控制,而不需要人为的操控。通过对系统的功能分析,确定系统方案,对系统的元器件选型,最后确定使用主控芯片STC89C52,数码管作为显示器,蜂鸣器作为声学报警装置,独立按键作为电梯按钮。使用AD软件绘制系统原理图,Keil软件C语言编写系统程序。在软件与硬件的设计上均采用模块化的方式设计,并且考虑到系统的抗干扰能力、稳定性来进行设计。最后通过在仿真软件Proteus中搭建电路,烧录程序,最后对系统功能测试实现了系统功能。

资料链接

原理图工程文件

原理图截图

仿真模型工程文件

仿真截图

答辩论文低重复率文档,27621字

英文文献及翻译

visio流程图工程

物料清单

设计框架架构

摘 要… 1

ABSTRACT… 1

1 概述… 1

1.1 完成本题的目的和意义… 1

1.2 国内外研究动态… 1

1.3 研究目标和内容… 2

2 总体方案… 3

2.1 硬件方案的选择… 3

2.1.1 主控芯片的选择… 3

2.1.2 显示器件的选择… 4

2.1.3 电机的选择… 4

2.2 系统总体方案… 5

3 硬件的介绍与搭接… 7

3.1 STC89C52单片机系统设计… 7

3.1.1 STC89C52的概述… 7

3.1.2 复位电路设计… 8

3.1.3 晶振电路设计… 9

3.2 电源电路设计… 10

3.3 按键及LED电路设计… 10

3.4 电机及驱动电路设计… 11

3.4.1 步进电机工作原理介绍 11

3.4.2 步进电机驱动电路设计 14

3.5 蜂鸣器报警电路设计… 15

3.6 数码管显示电路设计… 16

4 软件设计… 19

4.1 软件开发环境的介绍… 19

4.2 系统重要函数的介绍… 20

4.2.1 主函数的设计… 20

4.2.2 数码管显示函数的设计 21

4.2.3 楼层按键控制函数设计 21

4.2.4 电机控制函数设计… 22

5 基于单片机的双电梯控制仿真实现 25

5.1 开发工具介绍… 25

5.2 仿真电路搭建与调试… 25

5.3 仿真测试… 27

6 结论与心得… 32

参考文献… 33

中文译文… 43

致 谢… 49

附件一… 51

附件二… 79

附件三… 81

附件四… 83

设计说明书及设计文件

源码展示

#include <REG52.H>#include <INTRINS.H>///电梯1//unsigned char ucMotorDrvPuls1; //电机运转时初始值unsigned char FORREV1=1; //1表示上行,0表示下行unsigned char STOPCUR1=0;//1电梯停留在当前层,0不停留unsigned char CURFLR1=1; //当前所在楼层unsigned char count1=0; //累计到COUNT即表示运行过一层///电梯2//unsigned char ucMotorDrvPuls; //电机运转时初始值unsigned char FORREV=1; //1表示上行,0表示下行unsigned char STOPCUR=0;//1电梯停留在当前层,0不停留unsigned char CURFLR=1; //当前所在楼层unsigned char count=0; //累计到COUNT即表示运行过一层#define UCTIMES 8 //设置电机转速#define OUTPUT P2 //电机驱动信号口#define COUNT 8 //电机每循环8次表示电梯经过一层楼sbit UP1=P3^4;sbit DOWN2=P3^3;sbit UP2=P3^2;sbit DOWN3=P3^1;sbit UP3=P3^0;sbit DOWN4=P1^7;sbit FLOOR1=P1^0;sbit FLOOR2=P1^1;sbit FLOOR3=P1^2;sbit FLOOR4=P1^3;sbit START=P1^4;sbit STOP=P1^5;sbit ALARM=P1^6;//报警位sbit alarmBit=P3^5;sbit alarmBit1=P0^7;sbit upLight=P3^6;sbit downLight=P3^7;void time(unsigned int ucMs);//延时单位:msvoid outPress();//按下电梯外按钮void outPress1();//1111按下电梯外按钮unsigned char inPress();//按下电梯内楼层按钮unsigned char elevator();//到达某一层返回1,否则返回0unsigned char elevator1();//到达某一层返回1,否则返回0void storeUP(unsigned char);//存储当前所有上行请求void storeDOWN(unsigned char);//存储当前所有下行请求void storeUP1(unsigned char);//存储当前所有上行请求void storeDOWN1(unsigned char);//存储当前所有下行请求//延时函数void time(unsigned int ucMs);//初始化所有灯void initLights(void);//设置当前楼层void setFloor(int floor);void setFloor1(int floor);//设置电梯向上运行灯void setUpLight();//设置电梯向下运行灯void setDownLight();//设置电梯停止运行灯void setStopLight();//设置电梯向上运行灯void setAlarmLight();//设置电梯报警灯和喇叭void setAlarmLight();//关闭电梯报警灯和喇叭void offAlarmLight();//报警开关int alarmSwitch=1;电梯1/unsigned char UP_req1[5]={0,0,0,0,0}; //上行请求unsigned char DOWN_req1[5]={0,0,0,0,0}; //下行请求电梯2/unsigned char UP_req[5]={0,0,0,0,0}; //上行请求unsigned char DOWN_req[5]={0,0,0,0,0}; //下行请求//电机定位2void position1(void){OUTPUT=0x01|(P2&0x0f);time(200);OUTPUT=0x02|(P2&0x0f);time(200);OUTPUT=0x04|(P2&0x0f);time(200);OUTPUT=0x08|(P2&0x0f);time(200);ucMotorDrvPuls1=0x11;OUTPUT=0x01|(P2&0x0f); }//电机定位2void position(void){OUTPUT=0x01|(P2&0xf0);time(200);OUTPUT=0x02|(P2&0xf0);time(200);OUTPUT=0x04|(P2&0xf0);time(200);OUTPUT=0x08|(P2&0xf0);time(200);ucMotorDrvPuls=0x11;OUTPUT=0x01|(P2&0xf0); }/****************************************//* 主函数*//****************************************/void main(void){ time(100);initLights();position();//电机定位position1();//电机定位ucMotorDrvPuls=0x11;OUTPUT=0x00|(P2&0xf0);//电机停止 ucMotorDrvPuls1=0x11;OUTPUT=0x00|(P2&0x0f);//电机停止 setFloor(CURFLR);setFloor1(3);setUpLight();time(100); while(1)//主循环{unsigned char set=0;outPress();//按下电梯外按钮outPress1();//按下电梯外按钮while(STOPCUR==1)//电梯在当前层,电梯不动,可以继续接受请求{outPress();outPress1();inPress();} if(inPress())//按下电梯内楼层按钮{while(START)//等待启动按键按下,电梯不动,可以继续接受请求{outPress();outPress1();inPress();}} while(1)//电机运转循环{if(set=0) //电梯1//{set=0; if(UP_req1[1]==0&&UP_req1[2]==0&&UP_req1[3]==0&&DOWN_req1[2]==0&&DOWN_req1[3]==0&&DOWN_req1[4]==0) {break;//没有请求,跳出电机运转循环,电梯不动} if(FORREV1)//上行 { setUpLight();//上行灯亮if(STOPCUR1==1){break;}//if(elevator1())//往上到达某一层{if(CURFLR1==4) {setDownLight();break;}//到达四楼}OUTPUT=(ucMotorDrvPuls1&0xf0)|(P2&0x0f);ucMotorDrvPuls1=_crol_(ucMotorDrvPuls1,1);}if(!FORREV1)//下行{setDownLight();//下行灯亮;if(STOPCUR1==1){break;}if(elevator1())//往下到达某一层{if(CURFLR1==1) {setUpLight();break;}//到达一楼}OUTPUT=(ucMotorDrvPuls1&0xf0)|(P2&0x0f);ucMotorDrvPuls1=_cror_(ucMotorDrvPuls1,1);}outPress();//按下电梯外按钮outPress1();//按下电梯外按钮//if(inPress())//按下电梯内楼层按钮//{// while(START)//等待启动按键按下//{outPress();inPress();//电梯运行时,内部按钮按下,无需按启动按钮// }//}time(380-UCTIMES*16);OUTPUT=0x00|(P2&0xf0);break;//电机停止,有请求时按下启动按钮启动}else电梯2{set=1;if(UP_req[1]==0&&UP_req[2]==0&&UP_req[3]==0&&DOWN_req[2]==0&&DOWN_req[3]==0&&DOWN_req[4]==0) {break;//没有请求,跳出电机运转循环,电梯不动} if(FORREV)//上行 { setUpLight();//上行灯亮if(STOPCUR==1){break;}//if(elevator())//往上到达某一层{if(CURFLR==4) {setDownLight();break;}//到达四楼}OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);ucMotorDrvPuls=_crol_(ucMotorDrvPuls,1);}if(!FORREV)//下行{setDownLight();//下行灯亮;if(STOPCUR==1){break;}if(elevator())//往下到达某一层{if(CURFLR==1) {setUpLight();break;}//到达一楼}OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);ucMotorDrvPuls=_cror_(ucMotorDrvPuls,1);}outPress1();//按下电梯外按钮//if(inPress())//按下电梯内楼层按钮//{// while(START)//等待启动按键按下//{// outPress();inPress();//电梯运行时,内部按钮按下,无需按启动按钮// }//}time(380-UCTIMES*16);break;}//end while-电机运转循环//}OUTPUT=0x00|(P2&0xf0);//电机停止,有请求时按下启动按钮启动}

【毕业设计】49-基于单片机的双电梯控制控制系统设计(原理图工程+仿真工程+源代码工程+答辩论文)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。