软件、硬件定制开发,联系QQ:99605319
应用领域: 单片机
开发语言: C
数据库 : 其它
资源语言: 中文

51单片机课程设计,3层电梯控制,附带程序代码、仿真电路图


电梯仿真图.jpg

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

	

uchar smg_du[4] = {0x3f,0x06,0x5b,0x4f};//显示0123的段码

bit flag_100ms;//100ms标志位,100ms就进行一次电梯计算	
bit flag_stop = 1;   //用做到了相应的楼停下标志位


uchar value2;

sbit led3 = P1^2;//控制按电梯的led灯亮灭
sbit led2 = P1^1;
sbit led1 = P1^0;

uchar dt_1;  //1楼电梯标志位
uchar dt_2;  //2楼电梯标志位
uchar dt_3;  //3楼电梯标志位


uchar dt_value = 1;  //电梯到哪一层的变量,初始为第一层
uchar dt_s_x ;    //电梯上下的标志位

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}


/********************独立按键程序*****************/
uchar key_can;	 //按键值

void key()	 //独立按键程序
{
	static uchar key_new;
	key_can = 20;                   //按键值还原
	P3 |= 0xff;
	if(P3 != 0xff)		//按键按下
	{
		delay_1ms(1);	     	//按键消抖动
		if((P3 != 0xff) && (key_new == 1))
		{						//确认是按键按下
			key_new = 0; //归零标志位
			switch(P3)
			{
				case 0xfe: key_can = 1; break;	  //得到按键值 
				case 0xfd: key_can = 2; break;	  //得到按键值 
				case 0xfb: key_can = 3; break;	  //得到按键值 
			}
		}			
	}
	else 
	key_new = 1;	
}

void key_with()
{
	if(key_can == 1)
	{
		led1 = 1;	 //点亮发光二极管
		dt_1 = 1;	 //电梯楼层为1
	}		
	if(key_can == 2)
	{
		led2 = 1;	 //点亮发光二极管
		dt_2 = 1;//	电梯楼层为2
	}	
	if(key_can == 3)
	{
		led3 = 1;	//点亮发光二极管
		dt_3 = 1;  //	电梯楼层为3
	}	

}
/*********************当电梯不动时、判断是向上、还是向下**********************/
void tiandi_shang_xia()
{
	static uchar value;
	if(dt_s_x == 0)
	{
		
		flag_stop = 1;
		if(dt_value == 1)	 //电梯在第1层停下不走了
		{
			value = dt_2 + dt_3 ; 
			if(value != 0)
			{
				dt_s_x = 1;   //电梯向上	
			 		
			}
		}			
		if(dt_value == 2)	 //电梯在第2层停下不走了
		{
			value = dt_3 ; 
			if(value != 0)
			{
				dt_s_x = 1;   //电梯向上走				 		
			}
			value = dt_1; 
			if(value != 0)
			{
				dt_s_x = 2;   //电梯向下走	
				 		
			}	
		}
		if(dt_value == 3)	 //电梯在第3层停下不走了
		{
			value = 0; 
			if(value != 0)
			{
				dt_s_x = 1;   //电梯向上走				 		
			}
			value = dt_1 + dt_2; 
			if(value != 0)
			{
				dt_s_x = 2;   //电梯向下走	
					 		
			}	
		}	
	
			
	}
}

/****************电梯向上、做最后的判断是否还要继续向上****************/
void dt_shang_guan()
{
	uchar value;
	if(dt_s_x == 1)    //电梯向上  做最后的判断是否还要继续向上
	{
		if(dt_value == 1)	//在第1层
		{
			value = dt_2 + dt_3 ; 
			if(value == 0)	 //说明上面没有人按下
			{
				dt_s_x = 0;  //电梯停下不动了  
 
			}else 
				flag_stop = 1;	
		}		
		else if(dt_value == 2)	//在第2层
		{
			value = dt_3; 
			if(value == 0)	 //说明上面没有人按下
			{
				dt_s_x = 0;  //电梯停下不动了  

			}else 
				flag_stop = 1;	
		}		
		else if(dt_value == 3)	//在第3层
		{
			value = 0; 
			if(value == 0)	 //说明上面没有人按下
			{
				dt_s_x = 0;  //电梯停下不动了  
					
			}else 
		flag_stop = 1;	 
		}		
	
	}	
}

/****************电梯向下、做最后的判断是否还要继续向下****************/
void dt_xia_guan()
{
	uchar value;
	if(dt_s_x == 2)    //电梯向下  做最后的判断是否还要继续向下
	{
		if(dt_value == 1)	//在第1层
		{
			dt_s_x = 0;  //电梯停下不动了 	
			flag_stop = 1;	
		}		
		else if(dt_value == 2)	//在第2层
		{
			value = dt_1; 
			if(value == 0)	 //说明上面没有人按下
			{
				dt_s_x = 0;  //电梯停下不动了  
 
			}else 
			flag_stop = 1;	
		}		
		else if(dt_value == 3)	//在第3层
		{
			value = dt_1 + dt_2; 
			if(value == 0)	 //说明上面没有人按下
			{
				dt_s_x = 0;  //电梯停下不动了  
 					
			}else 
			flag_stop = 1;	 
		}		
		
	}		
}

/***********************电梯处理函数************************/
void td_dis()
{
	uchar value,value1;
	value = dt_1 + dt_2 + dt_3 ; 
	if(value != 0)
	{		   //100ms
		if(flag_stop == 1)	//到相应的楼了  要停下
		{
/***************************向上走电梯***********************************/	
			if(dt_s_x != 0)		  //向上走电梯
			{
				value1 ++;
				if(value1 >= 10)  //1s
				{
					value1 = 0;
					if(dt_s_x == 1)		  //向上走电梯
					{
						dt_value ++;
					}
					if(dt_s_x == 2)		  //向下走电梯
					{
						dt_value --;
					}					
					if(dt_value == 1)	   //当到了第一层的时候
					{
						if(dt_1 == 1)
						{
							led1 = 0;		 //关闭第一层发光二极管
							dt_1 = 0;        //清零电机在的标志
							flag_stop = 0;   //到停下
						} 				
					}
					else if(dt_value == 2)	   //当到了第二层的时候
					{
						if(dt_2 == 1)
						{
							led2 = 0;		 //关闭第二层发光二极管
							dt_2 = 0;        //清零电机在的标志
							flag_stop = 0;   //到停下
						} 				
					}
					else if(dt_value == 3)	   //当到了第3层的时候
					{
						if(dt_3 == 1)
						{
							led3 = 0;		 //关闭第3层发光二极管
							dt_3 = 0;        //清零电机在的标志
							flag_stop = 0;   //到停下

						} 				
					}
				
				}
			}		
		} 						
	}
	if(flag_stop == 0) //到达指定楼层,开始停止
	{
		value2 ++;

		if(value2 >= 20)	 //100ms*20 = 2秒,也就是隔两秒再进行判断需要向上还是向下
		{
			value2 = 0;	 			
			dt_shang_guan();  //电梯向上  做最后的判断是否还要继续向上
			dt_xia_guan();	  //电梯向下  做最后的判断是否还要继续向下

		}
	}	
}


/*************定时器0初始化程序***************/
void time_init()	  
{
	EA   = 1;	 	  //开总中断
	TMOD = 0X01;	  //定时器0、工作方式1
	ET0  = 1;		  //开定时器0中断 
	TR0  = 1;		  //允许定时器0定时
}

/******************主程序**********************/	   
void main()
{
	P1 = 0x00;
	P0 = 0X00;	   //单片机IO口初始化
	time_init();   //定时器初始化
	while(1)
	{
		key();		  //按键判断程序
		if(key_can < 20)  //判断按键值
		{	  
			if(dt_s_x == 0)//判断上下的标志位
			{
				value2 = 0; //清零定时时间
				flag_stop = 1; //到达相应楼层,停止,标志位置1
			}
			key_with();		
		}  
		tiandi_shang_xia();	  //当电梯不动时、判断是向上、还是向下

		P0 = smg_du[dt_value];	  //显示
		if(flag_100ms  == 1)//100ms就就行一次判断
		{
			flag_100ms = 0;
			td_dis();		 //电梯处理函数
		}
	}
}

/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{	
	static uchar value;
	TH0 = 0x3c;
	TL0 = 0xb0;     // 50ms
	value ++;
	if(value % 2 == 0)
	{
		flag_100ms = 1 ;
	}
}



单片机嵌入式资源(51单片机3层电梯控制C源码附仿真电路图)网址:https://www.08i8.com/ttkfzy/detail83386.html;转载请注明!


提示:
1、资源共享网(www.08i8.com)单片机嵌入式C源码《51单片机3层电梯控制C源码附仿真电路图》仅供研究学习请勿商用!
2、如果发现本资源违法或侵权请【报告管理员】
3、您所看到的所有资源都是网友分享,资源共享网(www.08i8.com)无法保证都能正常下载使用,
4、如果您发现资源无法下载或无法使用请【报告管理员】,管理员会联系资源发布者补充新资源!
5、如果暂时无法补充新资源,【只退积分!不退款!
6、关注微信公众号:《国资互联联盟》 不迷路!

与《51单片机3层电梯控制C源码附仿真电路图》相关的《完整源码》


  • 嵌入式智能环境监测控制系统全套资源(设计说明书、PPT、C源码)

    嵌入式智能环境监测控制系统全套资源(设计说明书、PPT、C源码)

    智能环境监测控制系统,以嵌入式技术为支撑,以住宅仓库等为平台。采用STC89C52芯片作为控制核心,通过DHT11温湿度传感器和火焰传感器等多种传感器实现对周围环境的监测。通过L298N电机驱动模块实现直流电机对风扇的驱动,如果湿度达到限定值将启动风扇并使用了蜂鸣器实现了对部分环境因素的监测及控制功能,完成了发生火灾时响铃以及湿度过高风扇自转除湿机制,提升了生活生产的安全性。并通过OLED显示屏实...

    10 58665  0

  • 小车调速控制C语言源码(可通过串口发送指令控制,基于STM32F103C8T6 HAL库)

    小车调速控制C语言源码(可通过串口发送指令控制,基于STM32F103C8T6 HAL库)

    基于STM32F103C8T6 HAL库 配置的L298N电机驱动模块进行小车调速控制(可通过串口发送指令控制)

    5 13325  0


  • C51单片机C语言源码(液晶TFT180).rar

    C51单片机C语言源码(液晶TFT180).rar

    ColorTest_SoftSPI(简单刷屏)PictureTest_SoftSPI(图片显示)STC_ISP程序下载软件STC_SoftSPI_CNCode(模拟SPI中文显示)STC_SoftSPI_ENCode(模拟SPI英文显示)

    5 20845  0

  • gc0308调试单片机C语言源码、嵌入式STM32-F3、F4、F7、H7

    gc0308调试单片机C语言源码、嵌入式STM32-F3、F4、F7、H7

    实验器材: 探索者STM32F4开发板 实验目的: 学习STM32F4的DCMI接口和OV2640摄像头模块的使用. 硬件资源: 1,DS0(连接在PF9) 2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面) 3,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD片选/A6接RS) 4,按键KEY0(...

    10 78573  0

  • 嵌入式智能医药箱系统源码(设计说明书、PPT、C源码)

    嵌入式智能医药箱系统源码(设计说明书、PPT、C源码)

    本系统主要以STM32F103C8T6作为主控的控制板,使用MLX90614非接触红外温度检测模块、DY-SV17F 语音模块、MAX30102心率监测模块、DHT11温湿度传感器、ESP8266 WIFI模块、AMS1117稳压模块和舵机输送装置等组成。总体设计图如图2.1所示。智能家用医药箱控制系统以STM32单片机为控制核心,通过外接测量设备、显示设备、机械设备和通信设备等来实现相应功能。设...

    10 58926  0


  • 合泰单片机无线充电方案(附汇编源码)

    合泰单片机无线充电方案(附汇编源码)

    采用合泰单片机实现无线充电15w,过冲过放保护,电流保护等有汇编语言开发源码

    5 59616  0

  • 基于51单片机的数字电子钟源码(c语言)

    基于51单片机的数字电子钟源码(c语言)

    电子时钟是一种广泛应用于现代社会的计时工具,它可以对年、月、日、时、分和秒等多个时间信息进行计时,并且越来越受到欢迎。采用1602液晶可以使数字电子时钟直观地显示时间信息,包括年、月、日、时、分、秒等,并且具有时间设置等功能。本设计是基于51系列单片机进行的电子时钟设计,具有显示时间、星期和时间设置等功能,同时采用1602液晶显示。在硬件制作和软件编程方面进行同步设计,其中硬件部分包括STC89C...

    5 19127  0

  • 50个常用单片机c语言源码

    50个常用单片机c语言源码

    1-IO输出-点亮1个LED灯方法110-LED循环左移11-LED循环右移12-查表显示LED灯13-双灯左移右移闪烁14-花样灯15-PWM调光16-共阳数码管静态显示17-1个共阳数码管显示变化数字18-单个数码管模拟水流19-按键控制单个数码管显示2-IO输出-点亮1个LED灯方法220-单个数码管指示逻辑电平21-8位数码管显示其中之一22-8位数码管静态显示其中之二23-8位数码管动态...

    5 45705  0

  • zgwxw
    zgwxw Rank: 16

    0

    0

    0

    ( 此人很懒并没有留下什么~~ )
    img

    51单片机3层电梯控制C源码附仿真电路图

    下载积分 钻石会员
    10 免费
    请您 登录后 下载 !
    说明

    您下载所消耗的积分将转交上传作者。上传资源,免费获取积分!


    首页

    栏目

    搜索

    会员