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

📄 dvs-v1.0.c

📁 电话报警主机AT89S52单片机并带有网络模块通信协议
💻 C
📖 第 1 页 / 共 3 页
字号:
//DVS-V1.0.C
//=============================================================================================
// 模块名称:视频服务器DVS-V1.0
// 芯片型号:
// 晶振频率:22.1184MHz
// CPU型号: AT89S52
//
// 版权所有:深圳市至安科技开发有限公司
//
// 创建日期/时间:2008-11-20     修改日期/时间:
// 创建人员:                    修改人员:
//==============================================================================================
#include "DVS-V1.0.H"
#include "remctrl.H"
//======================================== 全局变量 ============================================
//位
bit guc_Bit_BuChe;													//布撤防:1为布,0为撤
bit guc_bitbhOF;													//拔号开关
//指示灯
bit	guc_bit_AlLedOF;												//报警指示灯闪烁开关
bit	POW_GlimmLEDOF;													//电源指示灯闪烁开关
bit guc_bit_Alar_led;												//防区指示灯闪烁开关
//
bit guc_bitLedDispPul;												//设置时各指示灯只点亮一次标致
//bit guc_bitAlarPul2;												//报警标致,1为已经报警
bit guc_bit_ERC = 0 ;												//放音开关
bit guc_bit_RemCom;													//有解码信号
bit guc_bit_SenAlar = 0;											//传感器报警
//bit	guc_bit_AlarPul;												//拔号报警标致
bit	guc_bitAlaSounPul;												//断线报警只报一次标致
bit guc_bitLineOFAlar;												//断线报警开关
bit guc_bitARPul ;													//只判断一次
bit guc_bitPhSet;													//远程设置标致
bit guc_bitRsCom;													//中断接收完毕
bit guc_bitENCD;													//现场听
//变量
unsigned int  data 	guc_Timer0;										//拔号按键定时计数器
unsigned int  data  guc_KATime;										//警响声定时计数器
unsigned int  data  guc_AlarTi;										//报警时间计数器
unsigned char data  guc_Timer2;										//中断接收结束等待清0定时
unsigned int  data  guc_SetAddrTi;									//长时间按对码键,则删除对码
unsigned int  data  guc_ERCTI;										//放音触出定时
unsigned char data  guc_AlarCnt;									//拔号时计算器
unsigned char data  guc_TI;											//防区灯闪烁定时计数器
unsigned char idata guc_REM_TI;										//315解码时间计数器
unsigned char idata guc_REM_Temp;									//解码接收临时变量
unsigned int idata 	guc_ENCD_TI;									//报警后开始放音,放到一定时间后开始打开现场听
unsigned char data  guc_RsPoint;									//接收长度
//位定义
unsigned char bdata	guc_LED;	
sbit	guc_bit_led1 = guc_LED^0 ;									//第1路防区指示灯点亮
sbit	guc_bit_led2 = guc_LED^1;									//第2路防区指示灯点亮
sbit	guc_bit_led3 = guc_LED^2;									//第3路防区指示灯点亮
sbit	guc_bit_led4 = guc_LED^3;									//第4路防区指示灯点亮
sbit	guc_bit_led5 = guc_LED^4;									//第5路防区指示灯点亮
sbit	guc_bit_led6 = guc_LED^5;									//第6路防区指示灯点亮
sbit	guc_bit_led7 = guc_LED^6;									//第7路防区指示灯点亮
sbit	guc_bit_led8 = guc_LED^7;									//第8路防区指示灯点亮
unsigned char bdata	guc_74HC164LED;									//指示灯
sbit led1 = guc_74HC164LED^0;										//第1防区指示灯
sbit led2 = guc_74HC164LED^1;										//第2防区指示灯
sbit led3 = guc_74HC164LED^2;										//第3防区指示灯
sbit led4 = guc_74HC164LED^3;										//第4防区指示灯
sbit led5 = guc_74HC164LED^4;										//第5防区指示灯
sbit led6 = guc_74HC164LED^5;										//第6防区指示灯
sbit led7 = guc_74HC164LED^6;										//第7防区指示灯
sbit led8 = guc_74HC164LED^7;										//第8防区指示灯
//数组
unsigned char data guc_PassBuf[4];									//本机密码
unsigned char data guc_R315Buf[3];									//315解码后的数据
unsigned char idata RsBuf[32];										//接收缓冲区
//============================================================================================

//============================================================================================
unsigned char JudgeDupAddr(unsigned char *p_PDst);					//判断是否有重复的地址
void SendToData(unsigned char *p,unsigned char Long);				//发送命令
void SendDTMEDat(unsigned char auc_data);							//DTMF拔号
void FlickerOut(unsigned char auc_data);							//防区指示灯
void SendASC(unsigned char ASC)	;									//发送-个ASCII
void SuccBuzzer();													//设置成功时发出的声音
void FailBuzzer();													//设置失败时发出的声音
void DispAlarLED();													//防区指示灯
void SaveInit();													//保存初始化的值
void ClearRem();													//清除2272解码后的数据 
void HC164Shif();													//74hc164输出
void ScanRemDis();													//扫描遥控并处理	
void RemIn();														//315解码
void StarSetFun();													//开始设置各种功能
void OverSetFun();													//结束设置各种功能
void ONAlarSoun();													//打开警号声
void OFFAlarSoun();													//关闭警号声
void SetWordDisp();													//焊髦稚柚檬备鱈ED指示
//============================================================================================



//=========================================== 外部定义 ======================================
extern void Delay1Ms(unsigned int auc_time);						//延时1MS
extern void WrEEPROM(unsigned char address,unsigned char indata);	//写EEPROM
extern unsigned char RdEEPROM(unsigned char address);				//读EEPROM
extern unsigned char DTMF();										//DTMF解码 
extern void AlarOut();												//传感器报警输出
extern void ScanRing();												//扫描振铃	
extern void BHStopAlar();											//在拔号时用户想停止报警
extern void ScanComProtoc();										//扫描串口协议
extern void GreekVoice();											//远程控制时成功提示音
extern void UntoDisLister() ;										//现场监听时间到达
//============================================================================================



//============================================================================================
//语法格式:		void SendASC(unsigned char ASC)
//实现功能:		单独发送一个数据
//参数:			需要发送的数据
//返回:			无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//============================================================================================
void SendASC(unsigned char ASC)							//发送-个ASCII
{
	bit bit_es;
	bit_es = ES;
	ET2=0; 
	ES=0;          										//关闭中断
	TI=0;
	SBUF=ASC;
	while(!TI);
	TI=0;
	ES = bit_es;
	ET2=1; 							
}
//===============================================================================================
//语法格式:		void SendToData(unsigned char *p,unsigned char Long)
//实现功能:		把数组发送出去
//参数:			数组与数组的长度
//返回:			无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void SendToData(unsigned char *p,unsigned char Long)	//发送命令
{
	while(Long--)
	{
    	SendASC(*p++);
  	}		
}


//===============================================================================================
//语法格式:		SendDTMFByte
//实现功能:		拔打电话
//参数:			需要拔出去的号码
//返回:			无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void SendDTMFByte(unsigned char auc_data)
{
	unsigned char data luc_i;
	for(luc_i = 0 ;luc_i < 5 ; luc_i ++)
	{
		HT9200_DATA = auc_data&0x01 ;
		HT9200_CLK = 0 ;
		auc_data=auc_data>>1;
		HT9200_CLK = 1 ;
	}	
}
//===============================================================================================
//语法格式:		SendDTMEDat(unsigned char auc_data)
//实现功能:		拔打电话
//参数:			需要拔出去的号码
//返回:			无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void SendDTMEDat(unsigned char auc_data)
{
	unsigned char data luc_temp;
	Delay1Ms(100);							//延时 100 ms
	SUN_LED = SUN_LED_ON;
	if(auc_data == 0)	luc_temp = 10;		//DTMF编码中的'0'是'10'
	else	luc_temp = auc_data;
	HT9200_CE1 = 0 ;
	HT9200_CLK = 1 ;
	Delay1Ms(10);	 						//延时 10 ms
	EA = 0 ;
	SendDTMFByte(luc_temp) ;
	EA = 1 ;
	Delay1Ms(100); 							//延时 100 ms
	HT9200_CE1 = 1;
	SUN_LED = SUN_LED_OFF;
}


//===============================================================================================
//语法格式:SaveInit()
//实现功能:保存初始化的数据
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
unsigned char code Init_Tab[6]={0x31,0x32,0x01,0x02,0x03,0x04};
void SaveInit()
{
	unsigned char data luc_i;
	for(luc_i = 0 ; luc_i < 6 ; luc_i++)
	{
		WrEEPROM(luc_i,Init_Tab[luc_i]);								//保存初始化的值
	}
	PassSafeDefau;														//默认密码保护
	WrEEPROM(Alar_TI_Addr,ALARSOURTIME);								//默认警笛时间为15秒钟
	WrEEPROM(Ring_Cnt_Addr,RING_TACTI_CNT);								//振铃次数
}




//===============================================================================================
//语法格式:Init()
//实现功能:开机初始化
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void Init()
{
	unsigned char data luc_i,luc_j;
	bit bit_ok;
	guc_bitbhOF = 1;										//打开拔号开关					
	POW_GlimmLEDOF = 1;										//电源指示灯闪烁打开
//	guc_bit_AlarPul = 1;									//拔号报警标致
	guc_bitAlaSounPul = 0;									//断线报警只报一次标致
	guc_bit_AlLedOF = 0;									//报警指示灯关闭闪烁
	guc_bit_Alar_led = 1;									//防区指示灯闪烁开关
	guc_bitARPul = 1;										//断线报警只判断一次
	guc_Bit_BuChe = 1;										//默认为布防
	guc_bit_RemCom = 0;										//2272解码清0
//	guc_bit_SenAlar = 0;									//传感器报警
	guc_bitLineOFAlar = 1;									//断线报警开关
	BZZER = 0;												//蜂响声
	Listen_CTRL = 0;										//关闭现场监听
	SET = 0;												//继电器
	HANDUP = 0;												//摘机
	guc_REM_TI = 0;											//315解码定时器
	guc_AlarCnt = 0;										//拔号计算器清0
	guc_KATime = 0;											//警响声计数器清0
//	guc_bit_ERC = 0;										//放音开闭
	guc_TI = TWINLEDTIME;									//防区灯闪烁定时计数器
	guc_bitPhSet = 0;										//电话设置蜂鸣声开关
	guc_bitENCD =  0;										//现场听标致
	guc_74HC164LED = 0;
	DispAlarLED();
	for(luc_j = 0 ; luc_j < 3 ; luc_j ++)					//读3次开机标致位,只要有一次成功退出
	{
		for(luc_i = 0 ; luc_i < 2 ; luc_i++)				//读取开机标致
		{
			if(RdEEPROM(luc_i) == Init_Tab[luc_i]) bit_ok = 1;
			else
	 		{
				bit_ok = 0;
				break;
			}
		}
		if(bit_ok == 1) break;
	}
	if(bit_ok == 0)	SaveInit();								//没有开机初始化,则初始化													
	for(luc_i = 0 ; luc_i < 4 ; luc_i++)
	{
		guc_PassBuf[luc_i] = RdEEPROM(2+luc_i);				//读取密码
	}
}




//===============================================================================================
//语法格式:SetBuChe()
//实现功能:设置布撤防
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================	
void RemIn()
{  

	unsigned char data A[3];                     			//存放解码的数据
	unsigned char data luc_i,luc_j;
	unsigned int data  luc_temp; 
	unsigned char data luc_Cnt;
	if(!REM_DATA)
	{ 
		//ClearWatchDog();
		for(luc_Cnt = 0; luc_Cnt < 2 ; luc_Cnt++)			//连续解码两次,防止误码解码
		{
			TH0=0; TL0=0;		 							//清定时器的计数器	
			while (!REM_DATA);                            	//等待高电平 
			TR0=1;                                    	 	//启动定时器0
			while(REM_DATA);                            	//等待低电平    
			if (TF0==1)  goto RemExit;                		//超时就退出
			TR0 = 0;  
			luc_temp=TH0;    
			luc_temp=(luc_temp<<8)+TL0;  
			if (SynchHard)									//判断同步码的宽度,同步码5ms--6ms
			{       
				luc_temp=0; 
				goto RemExit;  
			}												//同步码第一次检测成功 
			for (luc_i=0; luc_i<3; luc_i++)					//解 3*8=24 位码  
			{  
				for (luc_j=0; luc_j<8; luc_j++)    
				{       
					while (!REM_DATA);						//等待高电平  
					TH0=0;  TL0=0;							//清定时器的计数器		 
					TR0=1;
					while (REM_DATA);						//等待低电平        
					if (TF0==1) goto RemExit;				//超时就退出 
					TR0=0;     
					luc_temp=TH0;    
					luc_temp=(luc_temp<<8)+TL0;   
					if (WideSing)							//宽取0.4ms--0.5ms
					{   
						A[luc_i]=A[luc_i]<<1;				//保存0  
					}        
					else if (NarrowSing)					//窄取0.1ms--0.2ms
					{  
			 			A[luc_i]=A[luc_i]<<1; 
						A[luc_i]=A[luc_i]+1;				//保存 1 
					}          
					else goto RemExit;  
				}   
				luc_temp=0;
			} 
		}
		for (luc_i=0; luc_i<3; luc_i++)						//接收的数据放在guc_R315Buf里
        {
			guc_R315Buf[luc_i] = A[luc_i];
		}
		guc_bit_RemCom = 1;  								//表示已经正确解码到数据
		RemExit:											//退出
		{  
			TR0=0;  
			REM_DATA = 1;   
			TF0=0; 
			return;    
		}
	}
} 




//===============================================================================================
//语法格式:	ClearRem()	
//实现功能:	处理清除2272解码后的数据 
//参数:		无

⌨️ 快捷键说明

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