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

📄 dvs-v1.0.c

📁 电话报警主机AT89S52单片机并带有网络模块通信协议
💻 C
📖 第 1 页 / 共 3 页
字号:
			{
				RemIn();							//不断扫描是否解码
				if(guc_Timer0==0)
				{
					guc_74HC164LED = 0;
					SUN_LED = SUN_LED_OFF;	
					DispAlarLED();
					guc_bit_Alar_led = 1;
					break;
				}
				if(guc_bit_RemCom==1)									//有传感器来
				{
					guc_Timer0 = SET_REM_TIM;							//定时器定时
					luc_temp = JudgeDupAddr(guc_R315Buf);
					if(luc_temp==0)										//如果没有相同的编码则保存存
					{
						SaveRFAdd(luc_SectorCnt,guc_R315Buf,1);			//保存信息
						guc_74HC164LED = 0;
						SUN_LED = SUN_LED_ON;	
						SuccBuzzer();									//设置成功时发出的声音
					}
					else if(luc_SectorCnt!=(luc_temp-1))FailBuzzer();	//设置失败时发出的声音
					ClearRem();											//清除解码后的数据
				}
				if(COOD==0)
				{
					Delay1Ms(30);										//延时,防止误按
					if(COOD==0)									
					{
						guc_SetAddrTi = KEY_TIME;						//按键盘定时
						while(COOD==0)									//等待按键松开
						{			
							//ClearWatchDog();
							if(guc_SetAddrTi == 0) 
							{
								SaveRFAdd(luc_SectorCnt,DelRFAdd,0);	//保存信息
								SuccBuzzer();							//设置成功时发出的声音
								continue;
							}
						}
						SUN_LED = SUN_LED_OFF;
						guc_Timer0 = SET_REM_TIM;						//定时器定时
						guc_74HC164LED = 0;
						luc_SectorCnt++;
						FlickerOut(luc_SectorCnt) ;
					}
				}
				if(luc_SectorCnt == 8 )
				{
					guc_74HC164LED = 0;
					SUN_LED = SUN_LED_OFF;
					DispAlarLED();
					guc_bit_Alar_led = 1;
					break;
				}
			}
//			guc_bitAlarPul2 = 0;										//表示已经报过警了
			guc_Timer0 = 0;
		}
	}
}




//===============================================================================================
//语法格式:	HC164Shif()
//实现功能:74hc164输出
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void HC164Shif()
{
	unsigned char data luc_i;
	unsigned char data luc_temp;
	luc_temp = guc_74HC164LED;
	for(luc_i = 0 ; luc_i < 8 ; luc_i ++)
	{
		//ClearWatchDog();
		LED_CLK	= 0;												//LED位
		LED_DATA=luc_temp&0x80;										//LED输出一位
		luc_temp=luc_temp<<1; 
		LED_CLK	=1;
	}
}


//===============================================================================================
//语法格式:SetWordDisp()
//实现功能:各种设置时各LED指示
//参数:	无
//返回值:	无
//创建时间:2008-11-30          修改时间:
//创建人员:                    修改人员:
//===============================================================================================
void SetWordDisp()
{
	if(guc_bit_Alar_led)guc_74HC164LED = 0;							//如果以前没有报过警关闭所有防区灯
	guc_bit_Alar_led = 0 ;											//防区指示灯闪烁关
	guc_bit_AlLedOF = 1	;											//报警指示闪烁灯开
	POW_GlimmLEDOF = 0 ;											//电源指示灯闪烁关
	SUN_LED = SUN_LED_OFF;											//关闭电源指示灯
	guc_bitLedDispPul = 1;											//设置时各指示灯只点亮一次标致
	
}

//===============================================================================================
// 语法格式:LedWorkDisp()
// 实现功能:正常工作LED指示
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void LedWorkDisp()
{
	if(guc_bitLedDispPul)											//设置时各指示灯只点亮一次标致
	{
		if((guc_KATime == 0)&&(!guc_bit_SenAlar)&&(guc_Bit_BuChe)&&(guc_Timer0==0))	
		{
			guc_74HC164LED = 0;										//统一点亮
			guc_bitLedDispPul = 0;									//设置时各指示灯只点亮一次标致	
			guc_bit_Alar_led = 1 ;									//防区指示灯闪烁开
			guc_bit_AlLedOF = 0	;									//报警指示闪烁灯关
			POW_GlimmLEDOF = 1 ;									//电源指示灯闪烁开
			SUN_LED = SUN_LED_OFF;									//关闭电源指示灯
			ALARM_LED  = 1;											//关报警指示灯  
			DispAlarLED();											//防区指示正常工作
			//ClearWatchDog();
		}
	}
}



//===============================================================================================
// 语法格式:ONAlarSoun()
// 实现功能:打开警号声
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void ONAlarSoun()
{
	KALARM = KALARON;												//打开警号声
	guc_KATime = ALARSOUREARTIME*RdEEPROM(Alar_TI_Addr);			//警号输了定时
	SetWordDisp();													//报警时各LED指示
	ALARM_LED  = 0;													//打开报警指示灯  	
}
//===============================================================================================
// 语法格式:OFFAlarSoun()
// 实现功能:关闭警号声
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void OFFAlarSoun()
{
	guc_KATime = 0;													//计数器清0关闭警号
}



//===============================================================================================
// 语法格式:ScanAlarOut()
// 实现功能:扫描警号输出
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void ScanAlarOut()
{
	if(guc_KATime==0)
	{
	 	KALARM = KALAROFF;											//关闭警号声
	}
}

//===============================================================================================
// 语法格式:ScanLineAlar()
// 实现功能:扫描断线报警
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void ScanLineAlar()
{
	if(guc_bitLineOFAlar)											//断线报警开关
	{
		if((!ONLINE)&&(guc_bitARPul))
		{
			guc_bitARPul = 0;										//只判断一次
			guc_bitAlaSounPul = 1;									//只报一次
		}
		if(ONLINE) 
		{
			if((guc_bitAlaSounPul)&&(guc_Bit_BuChe))
			{						
				ONAlarSoun();										//警号声
				guc_bitAlaSounPul = 0;								//只报一次
				guc_bitARPul = 1;									//只判断一次
			}
		}
	}
}
//===============================================================================================
// 语法格式:Time0
// 实现功能:定时中断  定时约35ms
// 输入参数:无
// 返回参数:无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void it_timer2(void) interrupt 5
{
	TR2=0;
	TF2 = 0;
	HC164Shif() ;
	guc_TI--;
	//ClearWatchDog();
	if(guc_TI==0)
	{
		guc_TI = TWINLEDTIME;									//防区灯闪烁定时计数器
		if(guc_bit_AlLedOF)ALARM_LED = !ALARM_LED;
		if(POW_GlimmLEDOF) SUN_LED = !SUN_LED;
		if(guc_bit_Alar_led)
		{
			if(guc_bit_led1==1) led1 =!led1;
			else led1 = 0;
			if(guc_bit_led2==1) led2 =!led2;
			else led2 = 0;
			if(guc_bit_led3==1) led3 =!led3;
			else led3 = 0;
			if(guc_bit_led4==1) led4 =!led4;
			else led4 = 0;
			if(guc_bit_led5==1) led5 =!led5;
			else led5 = 0;
			if(guc_bit_led6==1) led6 =!led6;
			else led6 = 0;
			if(guc_bit_led7==1) led7 =!led7;
			else led7 = 0;
			if(guc_bit_led8==1) led8 =!led8;
			else led8 = 0;
		}
	}
	if(guc_Timer0 > 0)		guc_Timer0-- ;					// 拔号定时退出循环
	if(guc_Timer2 > 0)		guc_Timer2-- ;					// 中断接收标致清0
	if(guc_AlarTi > 0)		guc_AlarTi--;					// 警笛声音定时
	if(guc_KATime > 0)		guc_KATime --;
	if(guc_SetAddrTi > 0)	guc_SetAddrTi -- ;
	if(guc_REM_TI > 0)		guc_REM_TI -- ;
	if((guc_ERCTI > 0)&&(guc_bit_ERC))guc_ERCTI --;
	if(guc_ENCD_TI > 0)		guc_ENCD_TI -- ;
	TR2=1;
}

//===============================================================================================
// 语法格式:	void Rs_Do(void) interrupt 4 using 1	
// 实现功能:	接收中断
// 输入参数:	无
// 返回参数:	无
// 创建时间:2008-11-30          修改时间:
// 创建人员:                    修改人员:
//===============================================================================================
void Rs_Do(void) interrupt 4 using 1				// 通讯中断接收程序
{
	unsigned char data luc_Len;
	TR1 = 0;										// 关闭定时器1
	if(RI==1)										// 等接收完毕
	{
		guc_Timer2 = 30;
		RI=0;
		RsBuf[guc_RsPoint++] = SBUF;
		if(RsBuf[0]==0xfe)
		{
			if(guc_RsPoint >= 5) luc_Len = RsBuf[4];
			if((guc_RsPoint >= (luc_Len+6))||(guc_RsPoint >= 30))
			{
				guc_RsPoint=0;	
				guc_bitRsCom = 1 ;
			}
		}
		else guc_RsPoint=0;
	}
	TR1 = 1;
}


//===============================================================================================
// 语法格式:main()
// 实现功能:扫描各函数
// 输入参数: 无
// 返回参数: 无
// 创建时间:2008-11-30          修改时间:2008-12-03
// 创建人员:                    修改人员:
//===============================================================================================
void main()
{
//定时器2的设置
	RCAP2H = 0x0B;											// 定时约35ms
	RCAP2L = 0xDC;
	ET2 = 1;												// 允许T2定时器中断
	TR2 =  1;												// 启动定时器2
//普通定时器的设置
	TMOD=0x21;												// 定时器0为通信,定时器T1为模式2
	TL1=BANDRATE;											// 设置波特率
	TH1=BANDRATE;
	PCON=0x00;
	SCON=0x50;												// 串行口方式1,10位送接方式
	TR1 = 1; TR0 = 0;										// 定时器0解码,(关闭);定时器1通信,(开启)
	ES=1;EA=1; 												// 接收中断,总中断打开	
	PS=1;													// 串口接收中断优先级高
	PT0=0;													// 定时T0中断优先级低
//	Buf[0] = luc_i ;
//	luc_i = 0xfe^0x86^0x00^0x01^0x01^0x00;
	Init();													// 开机标致
	SuccBuzzer();											// 设置成功时发出的声音
	//ClearWatchDog();
	while(1)
	{
		if(guc_bitRsCom)
		{
			ScanComProtoc();								// 扫描串口协议
			guc_bitRsCom = 0;
		}
		else
		{
		//ClearWatchDog();
			if(guc_bit_ERC)	
			{
				if(guc_ERCTI==0)							// 放音旋环放音
				{
					Play_Snd = 1;							// 产生跳动信号
					Play_Snd = 0;
					guc_ERCTI = REC_PLAY_TIME;				// 放音重新定时10秒
				}
			}
			else Play_Snd = 1;								// 关闭放音	
			if(guc_Timer2==0)guc_RsPoint = 0;				// 中断接收时间没有接收到结束标致清0
			ScanRemDis();									// 扫描遥控并处理
			ScanSetRFAddr();								// 扫描是否设置解码地址
			ScanRing();										// 扫描振铃	
			ScanLineAlar();									// 扫描有线报警
			ScanAlarOut();									// 扫描警号声
			AlarOut();										// 传感器报警输出
			LedWorkDisp();									// 正常工作LED指示
		//ClearWatchDog();
		}
	}
}

⌨️ 快捷键说明

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