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

📄 alarm-v3.c

📁 本程序为检测16路输入45~65HZ的信号
💻 C
📖 第 1 页 / 共 4 页
字号:
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[5]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b5 = 0;			//更新第6路输出状态为低电平
			if(InFlag.oneBit.b5)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b5 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[5]>200)
		{
			if(!RelayFlag.oneBit.b5)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b5 = 1;			//更新第6路输出状态为高电平	
			if(!InFlag.oneBit.b5)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b5 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[6]>=45 && FRE_CONT[6]<=65)
	{
		if(!RelayFlag.oneBit.b6)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b6 = 1;				//更新第7路输出状态为高电平	
		if(!InFlag.oneBit.b6)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b6 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[6]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b6 = 0;			//更新第7路输出状态为低电平
			if(InFlag.oneBit.b6)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b6 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[6]>200)
		{
			if(!RelayFlag.oneBit.b6)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b6 = 1;			//更新第7路输出状态为高电平	
			if(!InFlag.oneBit.b6)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b6 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[7]>=45 && FRE_CONT[7]<=65)
	{
		if(!RelayFlag.oneBit.b7)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b7 = 1;				//更新第8路输出状态为高电平	
		if(!InFlag.oneBit.b7)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b7 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[7]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b7 = 0;			//更新第8路输出状态为低电平
			if(InFlag.oneBit.b7)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b7 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[7]>200)
		{
			if(!RelayFlag.oneBit.b7)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b7 = 1;			//更新第8路输出状态为高电平	
			if(!InFlag.oneBit.b7)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b7 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[8]>=45 && FRE_CONT[8]<=65)
	{
		if(!RelayFlag.oneBit.b8)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b8 = 1;				//更新第9路输出状态为高电平	
		if(!InFlag.oneBit.b8)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b8 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[8]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b8 = 0;			//更新第9路输出状态为低电平
			if(InFlag.oneBit.b8)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b8 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[8]>200)
		{
			if(!RelayFlag.oneBit.b8)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b8 = 1;			//更新第9路输出状态为高电平	
			if(!InFlag.oneBit.b8)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b8 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[9]>=45 && FRE_CONT[9]<=65)
	{
		if(!RelayFlag.oneBit.b9)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b9 = 1;				//更新第10路输出状态为高电平	
		if(!InFlag.oneBit.b9)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b9 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第9路为“0”
	{
		if(HI_TIME[9]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b9 = 0;			//更新第10路输出状态为低电平
			if(InFlag.oneBit.b9)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b9 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[9]>200)
		{
			if(!RelayFlag.oneBit.b9)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b9 = 1;			//更新第10路输出状态为高电平	
			if(!InFlag.oneBit.b9)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b9 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[10]>=45 && FRE_CONT[10]<=65)
	{
		if(!RelayFlag.oneBit.b10)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b10 = 1;				//更新第11路输出状态为高电平	
		if(!InFlag.oneBit.b10)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b10 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第11路为“0”
	{
		if(HI_TIME[10]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b10 = 0;			//更新第11路输出状态为低电平
			if(InFlag.oneBit.b10)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b10 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[10]>200)
		{
			if(!RelayFlag.oneBit.b10)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b10 = 1;			//更新第11路输出状态为高电平	
			if(!InFlag.oneBit.b10)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b10 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[11]>=45 && FRE_CONT[11]<=65)
	{
		if(!RelayFlag.oneBit.b11)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b11 = 1;				//更新第12路输出状态为高电平	
		if(!InFlag.oneBit.b11)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b11 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[11]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b11 = 0;			//更新第12路输出状态为低电平
			if(InFlag.oneBit.b11)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b11 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[11]>200)
		{
			if(!RelayFlag.oneBit.b11)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b11 = 1;			//更新第12路输出状态为高电平	
			if(!InFlag.oneBit.b11)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b11 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[12]>=45 && FRE_CONT[12]<=65)
	{
		if(!RelayFlag.oneBit.b12)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b12 = 1;				//更新第13路输出状态为高电平	
		if(!InFlag.oneBit.b12)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b12 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[12]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b12 = 0;			//更新第13路输出状态为低电平
			if(InFlag.oneBit.b12)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b12 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[12]>200)
		{
			if(!RelayFlag.oneBit.b12)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b12 = 1;			//更新第13路输出状态为高电平	
			if(!InFlag.oneBit.b12)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b12 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[13]>=45 && FRE_CONT[13]<=65)
	{
		if(!RelayFlag.oneBit.b13)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b13 = 1;				//更新第14路输出状态为高电平	
		if(!InFlag.oneBit.b13)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b13 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[13]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b13 = 0;			//更新第14路输出状态为低电平
			if(InFlag.oneBit.b13)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b13 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[13]>200)
		{
			if(!RelayFlag.oneBit.b13)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b13 = 1;			//更新第14路输出状态为高电平	
			if(!InFlag.oneBit.b13)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b13 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[14]>=45 && FRE_CONT[14]<=65)
	{
		if(!RelayFlag.oneBit.b14)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b14 = 1;				//更新第15路输出状态为高电平	
		if(!InFlag.oneBit.b14)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b14 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[14]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b14 = 0;			//更新第15路输出状态为低电平
			if(InFlag.oneBit.b14)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b14 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[14]>200)
		{
			if(!RelayFlag.oneBit.b14)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b14 = 1;			//更新第15路输出状态为高电平	
			if(!InFlag.oneBit.b14)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b14 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	if(FRE_CONT[15]>=45 && FRE_CONT[15]<=65)
	{
		if(!RelayFlag.oneBit.b15)
		{
			Flag.oneBit.b0 = 1;					//开启声音报警
		}
		RelayFlag.oneBit.b15 = 1;				//更新第16路输出状态为高电平	
		if(!InFlag.oneBit.b15)					//如果为0,则为第一次报警
		{
			InFlag.oneBit.b15 = 1;				//置“1”,表示已经报警一次						
		}		
	}
	else										//如果检测到第1路为“0”
	{
		if(HI_TIME[15]>200)						//保持高电平400MS以上
		{
			RelayFlag.oneBit.b15 = 0;			//更新第16路输出状态为低电平
			if(InFlag.oneBit.b15)				//断电后如再变为50~60HZ信号,则黄灯开
			{
				YellowLed.oneBit.b15 = 1;		//输入信号由高变为低时,黄灯亮
			}
		}
		if(LOW_TIME[15]>200)
		{
			if(!RelayFlag.oneBit.b15)
			{
				Flag.oneBit.b0 = 1;				//开启声音报警
			}
			RelayFlag.oneBit.b15 = 1;			//更新第16路输出状态为高电平	
			if(!InFlag.oneBit.b15)				//如果为0,则为第一次报警
			{
				InFlag.oneBit.b15 = 1;			//置“1”,表示已经报警一次						
			}	
		}								
	}	
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	for(q0=0;q0<16;q0++)
	{
		FRE_CONT[q0] = 0x00;
		HI_TIME[q0] = 0x00;
		LOW_TIME[q0] = 0x00;
	}
}

/*****************************************************************************
功能:从74LS166读取8位数据
用法:
执行时间:Cycles:156   		Time:156us
******************************************************************************/
unsigned int LS166_Write(void)
{
	unsigned char loop;
	unsigned char INPUT0,INPUT1;
	unsigned int temp;
	CLK=0;
	CLKINH=0;
	SH=1;
	SH=0;
	CLKINH=1;
	SH=1;							//载入数据
	CLKINH=0;
	INPUT0=0X00;
	INPUT1=0X00;
	temp = 0;
	for(loop=8;loop>0;loop--)
	{
		CLK=0;
		INPUT0<<=1;					//左移一位
		INPUT1<<=1;
		SEROUT0_DIR = 1;
		if(SEROUT_0)
		{
		INPUT0=INPUT0|0x01;			//输入1
		}
		if(SEROUT_1)
		{
		INPUT1=INPUT1|0x01;			//输入1
		}
		CLK=1;
	}
	temp = temp|INPUT0;
	temp <<= 8;						//左右8位
	temp = temp|INPUT1;				//将两个8位合并成16位
	return temp;

⌨️ 快捷键说明

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