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

📄 dvs-v1.0.c

📁 电话报警主机AT89S52单片机并带有网络模块通信协议
💻 C
📖 第 1 页 / 共 3 页
字号:
//返回:		无  
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void ClearRem()
{
	unsigned char data luc_i ;
	for(luc_i = 0 ; luc_i < 3; luc_i++)
	{
		guc_R315Buf[luc_i]=0;
	}
	guc_bit_RemCom = 0;
}



//===============================================================================================
//语法格式:	BuzzerOut()	
//实现功能:	发出蜂鸣声
//参数:		进入声音的长度1表示1MS
//返回:		无  
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void BuzzerOut(unsigned int auc_Time)
{
	BZZER = 1;
	Delay1Ms(auc_Time);
	BZZER = 0;
}


//===============================================================================================
//语法格式:	SuccBuzze()	
//实现功能:	设置成功时发出的声音
//参数:		无
//返回:		无  
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void SuccBuzzer()
{
	if(guc_bitPhSet) GreekVoice();							//远程控制时成功提示音
	else BuzzerOut(300);
}


//===============================================================================================
//语法格式:	FailBuzzer	
//实现功能:	设置失败时发出的声音
//参数:		无
//返回:		无 
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员: 
//===============================================================================================
void FailBuzzer()
{
	unsigned char data luc_i;
	if(guc_bitPhSet)
	{
		Delay1Ms(300);
		SendDTMEDat(0x01);										//远程控制时成功提示音
		Delay1Ms(100);
		SendDTMEDat(0x09);										//远程控制时成功提示音
		Delay1Ms(100);
	}
	else 
	{
		for(luc_i = 0; luc_i < 5; luc_i ++)
		{
			BuzzerOut(100);										//发出蜂鸣声
			Delay1Ms(100);
		} 
	}
}



//===============================================================================================
//语法格式:	FlickerOut()	
//实现功能:	点亮LED防区指示
//参数:		需要点亮第几区(0-7)表示1-8路
//返回:		无  
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void FlickerOut(unsigned char auc_data)
{
	unsigned char data luc_temp = 1;
	if(0<auc_data)	luc_temp = luc_temp << auc_data;
	guc_74HC164LED = luc_temp;
} 




//===============================================================================================
//语法格式:JudgeDupAddr()
//实现功能:判断是否有重复的地址
//参数:	送来要判断的数据
//返回值:	返回相等时的地址 ,否则返回0
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
unsigned char JudgeDupAddr(unsigned char *p_PDst)
{
	unsigned char idata luc_i,luc_j;
	bit bit_ok;
	for(luc_j = 0; luc_j < 12 ; luc_j ++)
	{
		for(luc_i = 0; luc_i < 3 ; luc_i ++)
		{
			if(*(p_PDst+luc_i) == RdEEPROM(R315_STAR_ADDR+3*luc_j+luc_i)) bit_ok =1;
			else
			{
				bit_ok = 0;
				break;
			}
		}
		if(bit_ok==1)	break;
	}
	if(bit_ok==1) 	return luc_j+1;
	else return 0 ;
}



//===============================================================================================
//语法格式:DispAlarLED()
//实现功能:防区指示灯控制
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void DispAlarLED()
{
	unsigned char data luc_i;
	guc_LED = 0;
	for(luc_i = 0 ; luc_i < 8 ; luc_i++)
	{
		if(RdEEPROM(Alar_Star_Addr+luc_i)=='O')
		{
			guc_LED = guc_LED >> 1; 
			guc_LED = guc_LED + 0x80;						//保存 1
		}
		else guc_LED = guc_LED >> 1; 
	}
}



//===============================================================================================
//语法格式:SaveRFAdd()
//实现功能:保存设置解码地址
//参数:	要存入的位置,和数据
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void SaveRFAdd(unsigned char auc_sea,unsigned char *p_data,bit SD)
{
	unsigned char data luc_i;
	for(luc_i = 0; luc_i < 3 ; luc_i ++)
	{
		WrEEPROM(R315_STAR_ADDR+3*auc_sea+luc_i,*(p_data+luc_i));	
	}
	if(SD==1) 	WrEEPROM(Alar_Star_Addr+auc_sea,'O');					//保存解码数据
	else		WrEEPROM(Alar_Star_Addr+auc_sea,'C');					//删除解码数据
}



//===============================================================================================
//语法格式:SetRemAddr()
//实现功能:设置遥控地址并保存
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void SetRemAddr()															//设置地址
{
	unsigned char data luc_i,luc_j;
	ClearRem();																//清除解码后的数据
	SuccBuzzer();															//设置成功时发出的声音
	while(1)
	{
		if(guc_Timer0 == 0) break;											//如果按键长时间没有按,则退出函数
		RemIn();															//不断扫描是否解码
		if(guc_bit_RemCom==1)												//有传感器来
		{
			for(luc_j = 0; luc_j < 4 ; luc_j ++)
			{
				for(luc_i = 0; luc_i < 2 ; luc_i ++)
				{
					WrEEPROM(REM_STAR_ADDR+3*luc_j+luc_i,guc_R315Buf[luc_i]);//保存地址
				}
				WrEEPROM(REM_STAR_ADDR+3*luc_j+2,RemDataTab[luc_j]);		//保存数据
			}
			SuccBuzzer();													//设置成功时发出的声音
			ClearRem();	
			break;
		}
	}
}



//===============================================================================================
//语法格式:StarSetFun()
//实现功能:开始设置各种功能
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void StarSetFun()
{
	HANDUP = 1;											//摘机
	if(guc_bitPhSet)SET = 0;							//如果是远程控不用打开继电器
	else	SET = 1;									//继电器打开
	guc_Timer0 = SET_REM_TIM;							//按键定时
}



//===============================================================================================
//语法格式:OverSetFun()
//实现功能:结束设置各种功能
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void OverSetFun()
{
	guc_Timer0 = 0;										//计数器清0
//	guc_bitAlarPul2 = 0;								//表示已经报过警了
	HANDUP = 0;											//挂机
	SET = 0;											//继电器打开
	Delay1Ms(60);										//等待继电器延时,防止干扰断线报警
}


//===============================================================================================
//语法格式:SetRemotAddr()
//实现功能:设置遥控地址
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void SetRemotAddr()
{
	unsigned char data luc_i;
	unsigned char data luc_data;									//DTMF解码数据	
	unsigned char data luc_DataLen = 0;								//DTMF解码数据长度	
	unsigned char data luc_Buf[4];
	bit bit_ok;
	StarSetFun();													//开始设置各种功能
	while(1)
	{
		if(guc_Timer0 == 0) break;
		luc_data = DTMF();
		if(luc_data==0x0c)
		{
			FailBuzzer();											//设置失败时发出的声音
			ALARM_LED = 1;
			while(1)
			{
				luc_data = DTMF();
				if(guc_Timer0 == 0) break;							//如果按键长时间没有按,则退出函数
				if((0<luc_data)&&(luc_data<=10))
				{
					if(luc_data==10)luc_data = 0;
					luc_Buf[luc_DataLen++] = luc_data;
				}
				if((4<luc_DataLen)&&(luc_data!=0))
				{
					luc_DataLen = 0;								//重新输入
			 		FailBuzzer();									//设置失败时发出的声音
			 	}
				if(luc_data==0x0b)
				{
					SuccBuzzer();									//设置成功时发出的声音
					luc_DataLen = 0;								//"*"键重新输入
				}
				if(luc_data==0x0c)
				{
					guc_Timer0 = 800;
					for(luc_i = 0 ; luc_i < 4 ; luc_i ++)
					{
						if(luc_Buf[luc_i] ==  RemotNubTab[luc_i]) bit_ok = 1;
						else 
						{
							bit_ok = 0;
							break;
						}
					}
					if(bit_ok == 1)SetRemAddr();				//设置地址
					else 	FailBuzzer();						//设置失败时发出的声音
					break;
				}
			}	
			break;		
		}
		else if(luc_data!=0) FailBuzzer();						//设置失败时发出的声音
	}
	OverSetFun();												//结束设置各种功能
}




//===============================================================================================
//语法格式:ScanSetRFAddr()
//实现功能:设置解码地址
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
unsigned char code DelRFAdd[3]={0xff,0xff,0xff};
void ScanSetRFAddr()
{

	unsigned char data luc_SectorCnt = 0;
	unsigned char data luc_temp;
	if(COOD==0)										//如果有按键按下
	{
		Delay1Ms(30);								//延时,防止误按
		if(COOD==0)									
		{
			guc_SetAddrTi = 5*KEY_TIME;				//按键盘定时
			SetWordDisp();			
			guc_bit_AlLedOF = 0	;					//报警指示闪烁灯关
			SUN_LED = SUN_LED_ON;					//撤防时电源指示点亮
			while(COOD==0)							//等待按键松开
			{
				//ClearWatchDog();
				if(guc_SetAddrTi == 0) 
				{
					FailBuzzer();					//设置失败时发出的声音,其实是正确设置以误导用户不能私自设置
					guc_Timer0 = 0;
//					guc_bitAlarPul2 = 0;			//表示已经报过警了
					SetRemotAddr();
					return;
				}
			}
			ClearRem();								//清除解码后的数据
			POW_GlimmLEDOF = 0;						//电源指示灯闪烁关闭
			SUN_LED = SUN_LED_OFF;					//关闭电源指示灯
			guc_bit_Alar_led = 0;
			guc_Timer0 = SET_REM_TIM;
			guc_74HC164LED = 0;
			FlickerOut(luc_SectorCnt) ;
			SuccBuzzer();							//设置成功时发出的声音
			while(1)

⌨️ 快捷键说明

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