📄 dvs-v1.0.c
字号:
//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 + -