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

📄 main_h2s_3.c

📁 就是一个模拟量检测并在超过危险界时报警的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
}
//获取模拟电压
//计划不转换成电压,使用转换成的满量程的百分比参与运算,简化运算。
float agetm(uint8 idd)
{
  uint16 ib16;
  float f2in;

  ib16=agetx(idd);
  f2in=3300.0 * (ib16*1.0)/4095.0;
  
  return(f2in);
}

//P34操作(蜂鸣器)
void SOut(uint8 ikk)
{
  COut(28,ikk);

}

void ssFlash(void)
{
  static uint8 iskk_2=0;

  if(iskk_2==0)
  	iskk_2=1;
  else
  	iskk_2=0;

  SOut(iskk_2);


}

void RKg(uint8 ikk)
{
  

}

//P36、P37、P40操作
//LED0/LED1/LED2操作
//IEE为操作LED号,IEE为0xFF全部操作
//IKK为亮、灭标志,如果为1则亮否则灭
void LKg(uint8 iEE,uint8 ikk)
{
  uint8 iLL;
  iLL=ikk;
  
  switch(iEE)
  	{
  	  case 0:
                     COut(30,iLL);
			break;

  	  case 1:
                     COut(31,iLL);
			break;

  	  case 2:
                     COut(32,iLL);
			break;

  	  case 0xFF:				//P3口第0/1/2位置1
                     COut(30,iLL);
                     COut(31,iLL);
                     COut(32,iLL);					 
			break;
			
         default:
		 	break;
  	}
  
}


void j_Debug(void)
{
  return;

}

void j_Debug2(void)
{
    return;
}
//igs初始化
void InitData(void)
{
  uint8 i;

  for(i=0;i<4;i++)
  	{
         igS[i][0]=0;
         igS[i][1]=0;
  	}

  
}


void Lstatus(uint8 iss,uint8 iLLF)
{

  LKg(0,iLLF);

  switch(iss)
  	{
  	  case 0:
	  	       LKg(1,0);
			LKg(2,0);   
			break;
			
  	  case 1:
	  	       LKg(1,1);
			LKg(2,0);   
			break;

  	  case 2:
	  	       LKg(1,1);
			LKg(2,1);   
			break;

  	  default:
			break;


  	}
  	

}
//	idd 探头号
//	iss	报警等级
//	iLFF 探头健康状态
void CxLstatus(uint8 idd,uint8 iss,uint8 iLLF)
{
  static uint8 i_static2[4]={0,0,0,0};
  
  if(i_static2[idd]==0)
    i_static2[idd]=1;
  else
    i_static2[idd]=0;
	//显示探头健康状态:(LED_Failure故障则闪烁,正常则亮)
  if(iLLF==1)		
  {	
    CXLkg(idd,0,i_static2[idd]);
  }
  else
  {
    CXLkg(idd,0,1); 
  }
  	//报警等级
  switch(iss)
	  	{	//正常则红绿都灭
	  	  case 0:
		  	       CXLkg(idd,1,0);
				CXLkg(idd,2,0);   
				break;
			//报警则红绿都闪烁
	  	  case 1:
		  	       CXLkg(idd,1,i_static2[idd]);
				CXLkg(idd,2,i_static2[idd]);   
				break;
			//危险则红绿都亮
	  	  case 2:
		  	       CXLkg(idd,1,1);
				CXLkg(idd,2,1);   
				break;
				
	  	  default:
				break;

	  	}
}

//转换一个传感器的信号
//如果每个传感器的第一路电压或者第二路电压大于危险电压则igS[idd][0]=2(报警级别:危险)
//如果每个传感器的第一路电压或者第二路电压大于告警电压则igS[idd][0]=1(报警级别:警告)
//否则igS[idd][0]=0(报警级别:正常)

//如果第一路第二路电压压差大于1V则igS[idd][1]=1(探头健康状态:故障)否则igS[idd][1]=0(探头健康状态:正常)

void CxSin(uint8 idd)
{
  float fS0,fS1;
  
  float fValue1,fValue2;

  uint8 iSS_s2=0;
  uint8 iSS_s3=0;
  
  switch(idd)
  	{
  	  case 0:
	  	    fS0=agetm(0);
			fS1=agetm(1);
                        
                        fValue1=fSWarnVoltage0;
                        fValue2=fSDangerVoltage0;
			break;
			
  	  case 1:
	  	       fS0=agetm(2);
			fS1=agetm(3);
                        
                        fValue1=fSWarnVoltage1;
                        fValue2=fSDangerVoltage1;
			break;

  	  case 2:
	  	       fS0=agetm(4);
			fS1=agetm(5);
                        
                        fValue1=fSWarnVoltage2;
                        fValue2=fSDangerVoltage2;
			break;

  	  case 3:
	  	       fS0=agetm(6);
			fS1=agetm(7);
                        
                        fValue1=fSWarnVoltage3;
                        fValue2=fSDangerVoltage3;
			break;

         default:
		 	break;

  	}


  iSS_s2=0;

  if( (fS0>fValue2) ||(fS1>fValue2) )
  	{
  	  iSS_s2=2;

  	}
  else
  	{
  	  if( (fS0>fValue1) ||(fS1>fValue1) )
	  	iSS_s2=1;
  	}

  iSS_s3=0;
  if( jp_AbsF(fS0-fS1)>1000)
  	iSS_s3=1;

  igS[idd][0]=iSS_s2;
  igS[idd][1]=iSS_s3;
  
  	
  
}

//Sensor_Ext指示灯控制
void CXLkg(uint8 idd,uint8 iLL3,uint8 ikk)
{
  uint8 iLL;
  iLL=ikk;
  
  if(idd==0)	//Sensor_Ext指示灯
  	{
	  	       switch(iLL3)
	  	       	{
	  	       	  case 10:
				  	        COut(33,iLL);//P41	//LED_sensor in Sensor_Ext
             			               break;
									   
	  	       	  case 0:
				  	        COut(27,iLL);//P33	//LED_Failure in Sensor_Ext
             			               break;
	  	       	  case 1:
				  	        COut(26,iLL);//P32	//LED_Yellow in Sensor_Ext
             			               break;
	  	       	  case 2:
				  	        COut(25,iLL);//P31	//LED_Red in Sensor_Ext
             			               break;

				  default:
 				  	        break;

	  	       	}
			   
			   return;
			   	
  	}

  if(idd==1)//Sensor_Ext1指示灯
  	{

	  	       switch(iLL3)
	  	       	{
	  	       	  case 10:
				  	        COut(34,iLL);//LED_sensor in Sensor_Ext1
             			               break;
									   
	  	       	  case 0:
				  	        COut(24,iLL);//LED_Failure in Sensor_Ext1
             			               break;
	  	       	  case 1:
				  	        COut(23,iLL);//LED_Yellow in Sensor_Ext1
             			               break;
	  	       	  case 2:
				  	        COut(22,iLL);//LED_Red in Sensor_Ext1
             			               break;

				  default:
 				  	        break;

	  	       	}
			   return;
			   	
  	}


  if(idd==2)//Sensor_Ext2指示灯
  	{

	  	       switch(iLL3)
	  	       	{
	  	       	  case 10:
				  	        COut(35,iLL);//LED_sensor in Sensor_Ext2
             			               break;
									   
	  	       	  case 0:
				  	        COut(21,iLL);//LED_Failure in Sensor_Ext2
             			               break;
	  	       	  case 1:
				  	        COut(20,iLL);//LED_Yellow in Sensor_Ext2
             			               break;
	  	       	  case 2:
				  	        COut(15,iLL);//LED_Red in Sensor_Ext2
             			               break;

				  default:
 				  	        break;

	  	       	}
			   return;
			   	
  	}
			   

  if(idd==3)//Sensor_Ext3指示灯
  	{

	  	       switch(iLL3)
	  	       	{
	  	       	  case 10:
				  	        COut(36,iLL);
             			               break;
									   
	  	       	  case 0:
				  	        COut(14,iLL);//LED_Failure in Sensor_Ext3
             			               break;
	  	       	  case 1:
				  	        COut(13,iLL);//LED_Yellow in Sensor_Ext3
             			               break;
	  	       	  case 2:
				  	        COut(12,iLL);//LED_Red in Sensor_Ext3
             			               break;

				  default:
 				  	        break;

	  	       	}

			   return;
			   	
  	}

  if(idd==0xFF)//
  	{

                     COut(33,iLL);//P41	//LED_sensor in Sensor_Ext
                     COut(34,iLL);//P42	//LED_sensor in Sensor_Ext1
                     COut(35,iLL);//P43	//LED_sensor in Sensor_Ext2
                     COut(36,iLL);//P44	//未定义

                     COut(27,iLL);//P33	//Sensor_Ext指示灯				 
                     COut(26,iLL);//P32					 
                     COut(25,iLL);//P31					 

                     COut(24,iLL);//P30	//Sensor_Ext1指示灯				 					 
                     COut(23,iLL);//P27					 
                     COut(22,iLL);//P26					 

                     COut(21,iLL);//P25	//Sensor_Ext2指示灯				 
                     COut(20,iLL);//P24					 					 
                     COut(15,iLL);//P17					 

                     COut(14,iLL);//P16	//Sensor_Ext3指示灯				 
                     COut(13,iLL);//P15					 
                     COut(12,iLL);//P14					 					 
					 
			return;
			   	
  	}

}

float jp_AbsF(float fIn)
{
  if(fIn>=0)
  	return(fIn);
  else
  	return(fIn*(-1.0));

  
}

void Delay100mS(uint16 iDelay)
{
 uint16 i;
 uint8 i2;
 for(i=0;i<iDelay;i++)
   {
     for(i2=0;i2<138;i2++)
       ;
   }
}
//如果iskk为1,则蜂鸣器响10s
//否则不响
//所有指示灯闪烁30次
void Pkg(uint16 iFF2,uint8 isKK)
{
  uint16 i;


  LKg(0xFF,1);
  CXLkg(0xFF,0,1);

  if(isKK==1)
  	{
  	  SOut(1);
         Delay100mS(10);
  	}
  
  LKg(0xFF,0);
  CXLkg(0xFF,0,0);
  SOut(0);  

  for(i=0;i<60;i++)
  	{
         LKg(0xFF,1);
         CXLkg(0xFF,0,1);
         Delay100mS(10);
         LKg(0xFF,0);
         CXLkg(0xFF,0,0);
  	}
}
 
	

⌨️ 快捷键说明

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