⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jihaitang.c

📁 加工中心面板检测程序。用步进电机移动机构按下相应按钮
💻 C
📖 第 1 页 / 共 2 页
字号:

/*===================================================================
 函数类型:void
 功能说明:按下复位键,主函函数调用此复位函数,
 电机不断转动,使机构回原点
 函数参数:无
=======================================================================*/

	void RST(void)				
{

	dirx=0;							   								//X轴步进电机反转
	diry=0;							   								//Y轴步进电机反转
	Fx=1;							   								//中断标志	
	Fy=1;
	
	TMOD=0x10;						  							 	//定时器1方式1
	TH1=0xf6;
	TL1=0x3c;
	EA=1;
	ET1=1;
	TR1=1;
	while(Fx!=0 || Fy!=0)
	{
	Write_String(kff);
	Delay(400);
	Write_String(kfe);
	Delay(400);
	}
	TR1=0;
}

/*==========================================================
 函数类型:void	
 功能说明:用于廷时器time()中断
		  用于复位函数中,不断向步进电机发送脉冲
 函数参数:无
=============================================================*/
	
	void time3()interrupt 3
	{
		TH1=0xf6;
		TL1=0x3c;
		
		
		if(tg==1)												//条件满足,定时器time()引起的中断
			ch++;

		else
		{
				if(Fx==1)										//X轴步进电动机传感器产生的中断
			{
			XPulse_Sent=~XPulse_Sent;
			
			}
		if(Fy==1)			 									//Y轴步进电动机传感器产生的中断
			{
				YPulse_Sent=~YPulse_Sent;
			
			}
		}	  
		TF0=0;
	}

/*=============================================
 函数类型:void
 功能说明:缸伸出压下按键,廷时后缩回
 函数参数:x
================================================*/

   	
		void Dic(uchar x)	
		{
			if(x==1)
				{
					time(100);   	 							//廷时
					Relay=1;	    	 						//伸出
					time(100);		 							//廷时
				}
			else 
				{
					time(100);
					Relay=0;		     						//缩回
					time(100);
					Select(4);
					P0=0x00;
					P2=0xf9;
					Select(5);									 //缩回后工作灯灭
					P0=0x00;
					P2=0xf9;
				}
		}
		
/*===========================================================================
  
  函数类型:void 
  功能说明:用于片选
  函数参数:x
===============================================================================*/

		void Select(uchar x)									//片选
	{	
	
		switch(x)			  
		
	 
	 	{	
			case 1:		
				P2=0xd8;   										//x9-16
				break;
		  	case 2:
				P2=0xe8;   										//x1-8
				break;
			case 3:
				P2=0xf0;   										//x17-21
				break;
			case 4:
				P2=0xfb;   										//y9-16
				break;
			case 5:
				P2=0xfa;   										//y1-8
				break;
		
		 }


	 }

	 /*==================================================================
	函数类型:void	
	功能说明:调用片选函数,依交读取P0口上的数据并存诸在数组上
	函数参数:无

	 ==================================================================*/
		
		 void Read(void)			          
	{ 										
		  P0=0xff;												//清零
		  Select(1);											//片选
		  data1=P0;												//读取16-9位
		  P2=0xf9;
		  Select(2);											//片选
		  data2=P0;				            					//读取0-8位
		  P2=0xf9;
		  data1=data1/16*16*16*16+data1%16*16*16+data2/16*16+data2%16;
		  data3=data1  & 0xf000;    	
          data1= data1 & 0x0fff;								//屏蔽低12位
		  Select(3);											//片选
		  data2=P0;												//读取P0口上的五位
		  P2=0xf9;
		  data2=data3/(16*16*16)*16*16+data2/16*16+data2%16;

	}


	/*===================================================================
	 函数类型:int 
	 功能说明:从P0口读取的数据与数据库中的数据比较,若数据存在则说明按键
	 		  是可用,反之,则是不可用
	 函数参数:无
	======================================================================*/

		
		int Checkout(void)				       
	{
	
		uchar tl,sl;
		uchar i;
		
	
			 if(data1==data4)									//若等于上次的数据,则按键不可用
			 	tl=0;
			else

				for(i=0;i<23;i++)					   			//循环查找数据库中是否存在这样的编码,若有则说明按键可用
		   {
		   		if(data1==keylist[i])
					{
					
						tl=1;
						break;								//存在编码,跳出循环
					 }	
				else							   			//不存在,tl=0
					tl=0;
		   }
		   	
				data4=data1;
			if(data2==data5)
				sl=0;
			else
			for(i=0;i<9;i++)
			{
				if(data2==keylist1)				   			//循环查找数据库中是否存在这样的编码,若有则说明按键可用
												   
					{

						sl=1;
						break;					  			//存在编码,跳出循环
					}
				 else
				 	sl=0;						  			//不存在,sl=0


			} 
			data5=data2;
			data1=0x0000;						  			//清零
			data2=0x0000;
			data3=0x0000;
			if(tl==1||sl==1)					  			//函数返回值
				return 1;
			else 
				return 0;
		 
	 

	}
	/*============================================================
	  函数类型:void
	  功能说明:LCD输出
	  函数参数:无
	=============================================================*/
	
	
	/*	void Output0(uchar x)		                   
		{
			
			Write_String (ii[x]);
		//	time(100);
		
		}*/

	/*=================键盘灯显示==============================*/
		void Output1(uchar i)
		{
			Select(4);
			P0=xx[i]&0xff00;
			P2=0xf9;
		    Select(5);
			P0=xx[i]&0x00ff;
			P2=0xf9;
			
		}


	/*=============================================================
	 函数类型:void
	 功能说明:数据处理,把位移转化为脉冲个数重新赋给原数组
	 函数参数:无
	===============================================================*/


		 void Culculate(uchar x,uchar y)
		 {
		 	
												   
				
		      MM= x/(19.10*Pi)*400;
		      MN=y/(19.10*Pi)*400;

					 
				
		 }

 void Check_Busy()
	{
    	LCD_Data_Port=0xff;
		RS=0; //选择指令寄存器
		RW=1; //选读模式
		ENABLE=1;		
	 	while (1==Busy);
		ENABLE=0;
		//Delay_ms(10);
	}

//=============写指令========================
void Write_Command (unsigned char Command)
	{
		Check_Busy();// 检测是否忙
		//ENABLE=0;//不
		RS=0;       //选指令寄存器
		RW=0;       //写          
		ENABLE=1;
		LCD_Data_Port=Command;
		ENABLE=0;
		
	}
	
//=============写数据 ========================
void Write_Data (unsigned char Data)
	{
		Check_Busy();// 检测是否忙 
		//ENABLE=0;//不
		
		RS=1;        //选数据寄存器 
		RW=0;	       //写
			ENABLE=1;// 使能	
		LCD_Data_Port=Data;
	
		_nop_();
		ENABLE=0;
		//P1=0xff;
	}

//============= 初始化设置===================
void LCD_Initial()
	{
	
		Write_Command (0x01); //清屏
		Write_Command (0x0c); //显示开关控制    ;设置显示开,光标关,闪烁关
		Write_Command (0x06); //Write_Command (0x06);每次将数据输入DDRAM以后,AC自动增1;数据读写操作,画面不动
		//Write_Command (0x38); //8 位数据接口,两行显示,5X7点阵
	
	
	}
	
//===============写字符串到LCD===============
void Write_String (uchar *String)
	{
	  data	unsigned char i;
	  LCD_Initial();
	  for (i=0;i<=strlen(String)-1;i++)
			{
			//	if (8==i) 
			//	Write_Command (0xc0); //第8个数据换行(设置DDRAM为第二行)		
				Write_Data(String[i]);
  		}
	}

 
	
	





















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -