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


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

    设计说明书

    摘要

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

    设计框架架构

    设计说明书及设计文件

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    源码展示

    #include 
    #include 
    ///电梯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);//延时单位:ms
    void outPress();//按下电梯外按钮
    void outPress1();//1111按下电梯外按钮
    unsigned char inPress();//按下电梯内楼层按钮
    unsigned char elevator();//到达某一层返回1,否则返回0
    unsigned char elevator1();//到达某一层返回1,否则返回0
    void 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}; //下行请求
    //电机定位2
    void 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);  
    }
    //电机定位2
    void 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);//电机停止,有请求时按下启动按钮启动
    				}
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
  • 相关阅读:
    IntelliJ IDEA 常用快捷键一览表
    OpenCV-Python快速入门(十五):霍夫变换
    记录学习--Navicat使用自定义数据库列表
    第3章-指标体系与数据可视化-3.1.2-Seaborn绘图库
    武汉新时标文化传媒有限公司视频引流推广
    王杰qtday2
    【云原生】第十篇--Docker主机集群化方案 Docker Swarm
    RabbitMQ从0到1完整学习笔记一:《基础篇》
    ZooKeeper TCP连接被防火墙阻断排查过程
    nginx七层负载均衡配置
  • 原文地址:https://blog.csdn.net/qq_22592979/article/details/128064089