在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 电梯(入门级实例代码)

电梯(入门级实例代码)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:8.37KB
  • 下载次数:6
  • 浏览次数:88
  • 发布时间:2021-10-07
  • 实例类别:嵌入式开发
  • 发 布 人:陈笑天
  • 文件格式:.c
  • 所需积分:2
 相关标签:

实例介绍

【实例简介】
【实例截图】

【核心代码】

#include<reg52.h>
sbit LED=P2^0;
void delay(int i)
{
	while(i--);
}

int shu=99;
int anxia[7]={0,0,0,0,0,0,0};
int time=0;
int times=0;
	int zhuangtai=0;//电梯停滞状态
	int dangqianlouceng=1;
	int i=0,max=0,jixu=0;
	int jishu;
	int k;
	int flag=0;
char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void dingshi()                 //开启定时
{
	EA=1;
	TR0=1;
	TMOD|=0X01;
	TH0=0XFC;
	TL0=0X18;
	ET0=1;
}

void dings() interrupt 1
{
	TH0=0XFC;
	TL0=0X18;
	time  ;
	if(time>1000)
	{
		time=0;
		times  ;
	}
}
	
void anjianjiance()
  {
	  int i;
      int a=0;
      P1=0x0f;
	  if(P1!=0x0f)
	   {
	   	 delay(100);
		 if(P1!=0x0f)
		 {
		 	P1=0x0f;
			switch(P1)
			{
			  case 0x07:shu=0;break;
			  case 0x0b:shu=1;break;
			  case 0x0d:shu=2;break;
			  case 0x0e:shu=3;break;
			}
			P1=0xf0;
			switch(P1)
			{
			  case 0x70:shu=shu;break;
			  case 0xb0:shu=shu 4;break;
			  case 0xd0:shu=shu 8;break;
			  case 0xe0:shu=shu 12;break;
			}
//			while((a<50)&&(P1!=0xf0))
//			 {
//			   delay(1000);
//			   a  ;
//			 }
			while(P1!=0xf0)
			 {
				P2=0;
				P0=smgduan[dangqianlouceng];
				delay(30);
				P2=4;
				P0=0;
				P0=smgduan[zhuangtai];
				delay(30);
				P0=0;
				 for(i=0;i<6;i  )//按键检测判断修改数组
				{
					if(shu==i&&shu<6)
					{
						shu=99;
						if(anxia[i 1]==0)
						{
							anxia[i 1]=1;
						}
						else
						{
							for(k=1;k<=6;k  )
							{
								if(anxia[k]==1)
									jishu  ;
							}
							if(jishu>1)
							{
								anxia[i 1]=0;
							}
						}
						jishu=0;
					}
				}
				 for(i=1;i<7;i  )//数码管显示
				{
					P2=(7-i 1)*4;
					if(anxia[i]==1)
					{
						P0=0X00;
						P0=smgduan[i];
						delay(30);
						P0=0;
					}
					else
					{
						P0=0X00;
					}
					delay(30);
				}
				
				
				
				if(zhuangtai==0)//电梯停止时
		{
			
			TR0=0;
			times=0;
			time=0;
			if(flag==0)//每一次状态改变都要把按键清零
			{
				for(i=1;i<7;i  )
				{
					anxia[i]=0;
				}
				flag=1;
			}
				for(i=1;i<7;i  )//检测第一个按下的按键,给对应的状态
				{
					if(anxia[i]==1)
					{
						if(i>dangqianlouceng)
							zhuangtai=1;
						if(i<dangqianlouceng)
							zhuangtai=7;
						flag=0;
					}
				}
				anxia[dangqianlouceng]=0;
			
		}
		if(zhuangtai==1)//上升状态中
		{
			if(anxia[dangqianlouceng]==1)
			{	
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				for(i=6;i>dangqianlouceng;i--)
				{
					if(anxia[i]==1)
					{
						jixu=1;
						break;
					}
				}
				if(jixu==1)
				{
					dingshi();
					jixu=0;
					if(times>=3)
					{
						times=0;
						dangqianlouceng  ;
						if(dangqianlouceng==6)
							for(i=1;i<=6;i  )
							{
								anxia[i]=0;
							}
					}
				}
				else
				{
					if(dangqianlouceng==6)//到顶清零
					{
						for(i=1;i<=6;i  )
								{
									anxia[i]=0;
								}
					}
					zhuangtai=0;
				}
			}
		if(anxia[dangqianlouceng]==0)//路过未按下楼层
			{
				dingshi();
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				dingshi();
				if(times>=2)
				{
					times=0;
					dangqianlouceng  ;
				}
			}
		}
		if(zhuangtai==7)//电梯下降状态
		{
			if(anxia[dangqianlouceng]==1)
			{	
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				for(i=1;i<dangqianlouceng;i  )
				{
					if(anxia[i]==1)
					{
						jixu=1;
						break;
					}
				}
				if(jixu==1)
				{
					dingshi();
					jixu=0;
					if(times>=3)
					{
						times=0;
						dangqianlouceng--;
						if(dangqianlouceng==1)
							for(i=1;i<=6;i  )
								{
									anxia[i]=0;
								}
					}
				}
				else
				{
					if(dangqianlouceng==1)
						{
							for(i=1;i<=6;i  )
									{
										anxia[i]=0;
									}
						}
					zhuangtai=0;
				}
			}
		if(anxia[dangqianlouceng]==0)//下降中遇到没有按下的楼层
			{
				dingshi();
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				dingshi();
				if(times>=2)
				{
					times=0;
					dangqianlouceng--;
				}
			}
		}
		if(zhuangtai==1)
		{
			for(i=dangqianlouceng;i<=6;i  )
			{
				if(anxia[i]==1)
				{
					jishu  ;
				}
					
			}
			if(jishu==0)
			{
				zhuangtai=0;
				TR0=0;
				time=0;
				times=0;
			}
			jishu=0;
		}
		if(zhuangtai==7)
		{
			for(i=dangqianlouceng;i>=1;i--)
			{
				if(anxia[i]==1)
				{
					jishu  ;
				}
					
			}
			if(jishu==0)
			{
				zhuangtai=0;
				TR0=0;
				time=0;
				times=0;
			}
			jishu=0;
		}
				
				
				
				
				
				
				
				
			 }
		 }
	   }
  
  }

void main()
{
	//  1  上升  7  下降   0停止
	while(1)
	{
		P0=0;
		P2=0;
		P0=smgduan[dangqianlouceng];
		delay(30);
		P2=4;
		P0=0;
		P0=smgduan[zhuangtai];
		delay(30);
		P0=0;
		anjianjiance();
		if(dangqianlouceng<1||dangqianlouceng>6)//防止飞天遁地
		{
			if(dangqianlouceng>6)
				dangqianlouceng=6;
			if(dangqianlouceng<1)
				dangqianlouceng=1;
		}
		for(i=0;i<6;i  )//按键检测判断修改数组
		{
			if(shu==i&&shu<6)
			{
				shu=99;
				if(anxia[i 1]==0)
				{
					anxia[i 1]=1;
				}
				else
				{
					for(k=1;k<=6;k  )
					{
						if(anxia[k]==1)
							jishu  ;
					}
					if(jishu>1)
					{
						anxia[i 1]=0;
					}
				}
				jishu=0;
			}
		}
		for(i=1;i<7;i  )//数码管显示
		{
			P2=(7-i 1)*4;
			if(anxia[i]==1)
			{
				P0=0X00;
				P0=smgduan[i];
				delay(30);
				P0=0;
			}
			else
			{
				P0=0X00;
			}
			delay(30);
		}
		if(zhuangtai==0)//电梯停止时
		{
			
			TR0=0;
			times=0;
			time=0;
			if(flag==0)//每一次状态改变都要把按键清零
			{
				for(i=1;i<7;i  )
				{
					anxia[i]=0;
				}
				flag=1;
			}
				for(i=1;i<7;i  )//检测第一个按下的按键,给对应的状态
				{
					if(anxia[i]==1)
					{
						if(i>dangqianlouceng)
							zhuangtai=1;
						if(i<dangqianlouceng)
							zhuangtai=7;
						flag=0;
					}
				}
				anxia[dangqianlouceng]=0;
			
		}
		if(zhuangtai==1)//上升状态中
		{
			if(anxia[dangqianlouceng]==1)
			{	
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				for(i=6;i>dangqianlouceng;i--)
				{
					if(anxia[i]==1)
					{
						jixu=1;
						break;
					}
				}
				if(jixu==1)
				{
					dingshi();
					jixu=0;
					if(times>=3)
					{
						times=0;
						dangqianlouceng  ;
						if(dangqianlouceng==6)
							for(i=1;i<=6;i  )
							{
								anxia[i]=0;
							}
					}
				}
				else
				{
					if(dangqianlouceng==6)//到顶清零
					{
						for(i=1;i<=6;i  )
								{
									anxia[i]=0;
								}
					}
					zhuangtai=0;
				}
			}
		if(anxia[dangqianlouceng]==0)//路过未按下楼层
			{
				dingshi();
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				dingshi();
				if(times>=2)
				{
					times=0;
					dangqianlouceng  ;
				}
			}
		}
		if(zhuangtai==7)//电梯下降状态
		{
			if(anxia[dangqianlouceng]==1)
			{	
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				for(i=1;i<dangqianlouceng;i  )
				{
					if(anxia[i]==1)
					{
						jixu=1;
						break;
					}
				}
				if(jixu==1)
				{
					dingshi();
					jixu=0;
					if(times>=3)
					{
						times=0;
						dangqianlouceng--;
						if(dangqianlouceng==1)
							for(i=1;i<=6;i  )
								{
									anxia[i]=0;
								}
					}
				}
				else
				{
					if(dangqianlouceng==1)
						{
							for(i=1;i<=6;i  )
									{
										anxia[i]=0;
									}
						}
					zhuangtai=0;
				}
			}
		if(anxia[dangqianlouceng]==0)//下降中遇到没有按下的楼层
			{
				dingshi();
				P2=(7-dangqianlouceng 1)*4;
				P0=0X00;
				anxia[dangqianlouceng]=0;
				dingshi();
				if(times>=2)
				{
					times=0;
					dangqianlouceng--;
				}
			}
		}
		if(zhuangtai==1)
		{
			for(i=dangqianlouceng;i<=6;i  )
			{
				if(anxia[i]==1)
				{
					jishu  ;
				}
					
			}
			if(jishu==0)
			{
				zhuangtai=0;
				TR0=0;
				time=0;
				times=0;
			}
			jishu=0;
		}
		if(zhuangtai==7)
		{
			for(i=dangqianlouceng;i>=1;i--)
			{
				if(anxia[i]==1)
				{
					jishu  ;
				}
					
			}
			if(jishu==0)
			{
				zhuangtai=0;
				TR0=0;
				time=0;
				times=0;
			}
			jishu=0;
		}
	}
}
	

标签:

实例下载地址

电梯(入门级实例代码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警