📄 dvs-funset.c
字号:
//dvs-funset.C
#include "DVS-V1.0.H"
#include "dvs_our_remaddr.h"
bit guc_BitList = 0 ; //现场监听标致位
//=========================================== 函数定义 =======================================
void In_Fun_SET(); //扫描功能设置
void Fun_SET(); //功能设置
unsigned char DTMF(); //DTMF解码
void GreekVoice(); //远程控制时成功提示音
void Greek_Listen_Ctrl(); //现场监听
//============================================================================================
//========================================== 外部定义 ========================================
//变量
extern unsigned int data guc_Timer0; //拔号按键定时
extern unsigned char data guc_RFReadHAddr; //r315取读的高地址
extern unsigned char data guc_RFReadLAddr; //r315取读的低落地址
extern unsigned char bdata guc_74HC164LED; //指示灯
//位
extern bit guc_Bit_BuChe; //布撤防:1为布,0为撤
extern bit guc_bitbhOF; //拔号开关
extern bit guc_bit_Alar_led; //防区指示灯闪烁开关
extern bit guc_bit_RemCom; //2272解码时为1
extern bit POW_GlimmLEDOF; //电源指示灯闪烁开关
extern bit guc_bit_AlLedOF; //报警指示闪烁灯关
extern bit guc_bitLineOFAlar; //断线报警开关
extern bit guc_bitPhSet; //是否在远程控制
//函数
extern void DispAlarLED(); //防区指示灯
extern void SaveInit(); //保存初始化的值
extern void ClearRem(); //清除2272解码后的数据
extern void SuccBuzzer(); //设置成功时发出的声音
extern void FailBuzzer(); //设置失败时发出的声音
extern void RemIn(); //315解码
extern void StarSetFun(); //开始设置各种功能
extern void OverSetFun(); //结束设置各种功能
extern void BuFanDis(); //布防处理
extern void CheFanDis(); //撤防处理
extern void Delay1Ms(unsigned int auc_time); //延时1MS
extern void SendDTMEDat(unsigned char auc_data); //DTMF拔号
extern void SetWordDisp(); //各种设置时各LED指示
extern void WrEEPROM(unsigned char address,unsigned char indata); //写EEPROM
extern unsigned char RdEEPROM(unsigned char address); //读EEPROM
extern void judgeRAYTC(unsigned char auc_Command,unsigned char auc_Send_Len,unsigned char *pDst);
extern void SendASC(unsigned char ASC) ; //发送-个ASCII
//extern void SendToData(unsigned char *p,unsigned char Long); //发送命令
//数组
extern unsigned char data guc_PassBuf[4]; //本机密码
extern unsigned char data guc_R315Buf[3]; //315解码后的数据
extern unsigned char idata RsBuf[32]; //接收缓冲区
//============================================================================================
//============================================================================================
//语法格式: unsigned char DTMF()
//实现功能: DTMF解码
//参数: 无
//返回: DTMF解码后的数据
//创建时间:2008-11-30 修改时间:
//创建人员: 修改人员:
//============================================================================================
unsigned char DTMF()
{
unsigned char luc_data;
if(DTMF_Valid)
{
while(DTMF_Valid) //等待按键松开
{
SUN_LED = SUN_LED_ON;
//ClearWatchDog(); //清看门狗
if(Listen_CTRL) guc_Timer0 = 32 * 30; //如果是现场监听,定时30秒
else guc_Timer0 = SET_REM_TIM; //否则定时6秒
luc_data = P0&0x0f;
}
SUN_LED = SUN_LED_OFF;
return luc_data;
}
else return 0;
}
//============================================================================================
//语法格式: GreekVoice()
//实现功能: 远程控制时成功提示音
//参数: 无
//返回: 无
//创建时间:2008-12-29 修改时间:
//创建人员: 修改人员:
//============================================================================================
void GreekVoice()
{
Delay1Ms(300);
SendDTMEDat(0x09);
Delay1Ms(100);
}
//============================================================================================
//语法格式: SavePhontCode()
//实现功能: 设置电话号码
//参数: 无
//返回: 无
//创建时间:2008-11-30 修改时间:
//创建人员: 修改人员:
//============================================================================================
void SavePhontCode()
{
unsigned char data luc_i;
unsigned char data luc_data; //DTMF解码数据
unsigned char data luc_temp;
unsigned char data luc_DataLen = 0; //DTMF解码数据长度
unsigned char data luc_KeyCnt = 0; //按键计数器
unsigned char data luc_Buf[20]='F';
unsigned char data Del_TAB[1];
bit luc_tempdata = 0;
while(1)
{
if(guc_Timer0 == 0) break;
luc_data = DTMF();
if(luc_data==0x0c)
{
SuccBuzzer(); //设置成功时发出的声音
while(1)
{
if(guc_Timer0 == 0) break;
luc_data = DTMF();
if((luc_data!=0x0c)&&(luc_data!=0x00))
{
if((luc_data<=9)&&(luc_data>=1))
{
luc_KeyCnt ++;
luc_tempdata = 1;
luc_temp = luc_data; //读取是第几组电话
SuccBuzzer(); //设置成功时发出的声音
}
else FailBuzzer(); //设置失败时发出的声音
}
if(luc_KeyCnt>=2)
{
luc_KeyCnt = 0;
FailBuzzer(); //设置失败时发出的声音
}
if(luc_data==0x0c)
{
SuccBuzzer(); //设置成功时发出的声音
while(1)
{
luc_data = DTMF();
if(guc_Timer0 == 0) break; //如果按键长时间没有按,则退出函数
if((0<luc_data)&&(luc_data<=11))
{
if(luc_data==10)luc_data = 0;
luc_Buf[1+luc_DataLen++] = luc_data;
SuccBuzzer(); //设置成功时发出的声音
}
if((luc_data==0x0b)&&(luc_tempdata == 0)) //"*"键,再按"#"删除所有电话号码
{
SuccBuzzer(); //设置成功时发出的声音
while(1)
{
luc_data = DTMF();
if(guc_Timer0 == 0) break; //如果按键长时间没有按,则退出函数
if(luc_data==0x0c) //删除所以电话号码
{
for(luc_i = 0; luc_i < 9; luc_i ++)
{
WrEEPROM(luc_i*PH_CODE_LEN+STER_ADDR,0xff); //保存0xff则删除电话号码
Del_TAB[0]=luc_i;
judgeRAYTC(SET_COM_PHONE,1,Del_TAB) ; //返回删除号码协议
}
SuccBuzzer(); //设置成功时发出的声音
return;
}
else if(luc_data!=0) FailBuzzer(); //设置失败时发出的声音
}
}
if(luc_data==0x0c) //以"#"键确定
{
if(luc_DataLen == 0) //如果没有按电话号码。则删除电话号码
{
for(luc_i = 0 ; luc_i < PH_CODE_LEN ; luc_i++)
{
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_temp-1)+luc_i,0xff);//保存0xff则删除电话号码
}
Del_TAB[0]=(luc_temp-1);
judgeRAYTC(SET_COM_PHONE,1,Del_TAB); //返回删除号码协议
SuccBuzzer(); //设置成功时发出的声音
}
else
{
for(luc_i = luc_DataLen; luc_i < PH_CODE_LEN ; luc_i++)//不满20位的加0xFF
{
luc_Buf[2+luc_DataLen] = 0xff;
}
for(luc_i = 0 ; luc_i < PH_CODE_LEN ; luc_i++)
{
WrEEPROM(STER_ADDR+PH_CODE_LEN*(luc_temp-1)+luc_i,luc_Buf[luc_i]);//保存电话号码
}
luc_Buf[0]=luc_temp-1;
judgeRAYTC(SET_COM_PHONE,luc_DataLen+1,luc_Buf); //返回设置号码协议
SuccBuzzer(); //设置成功时发出的声音
}
break;
}
}
break;
}
}
break;
}
else if(luc_data!=0) FailBuzzer(); //设置失败时发出的声音
}
}
//============================================================================================
//语法格式:SecondPass()
//实现功能:设置第2次密码
//参数: 第1次密码内容
//返回值: 无
//创建时间:2008-11-30 修改时间:
//创建人员: 修改人员:
//============================================================================================
void SecondPass(unsigned char *p_Pass)
{
unsigned char data luc_i;
unsigned char data luc_data; //DTMF解码数据
unsigned char data luc_DataLen = 0; //DTMF解码数据长度
unsigned char data luc_Buf[5];
bit bit_ok;
luc_Buf[4] = 'O';
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;
SuccBuzzer(); //设置成功时发出的声音
}
if((4<luc_DataLen)&&(luc_data!=0))
{
luc_DataLen = 0; //重新输入
FailBuzzer(); //设置失败时发出的声音
}
if(luc_data==0x0b)
{
SuccBuzzer(); //设置成功时发出的声音
luc_DataLen = 0; //"*"键重新输入
}
if(luc_data==0x0c) //以"#"键确定
{
for(luc_i = 0 ; luc_i < 4 ; luc_i++)
{
if(luc_Buf[luc_i] == *p_Pass++) bit_ok = 1;
else
{
bit_ok = 0;
break;
}
}
if(bit_ok) //如果两次密码相等,则保存
{
SuccBuzzer(); //设置成功时发出的声音
for(luc_i = 0 ; luc_i < 5 ; luc_i++)
{
WrEEPROM(luc_i+2,luc_Buf[luc_i]); //保存新密码
guc_PassBuf[luc_i] = luc_Buf[luc_i];
}
}
else FailBuzzer(); //设置失败时发出的声音
break;
}
}
}
//============================================================================================
//语法格式:SetPass_NEW()
//实现功能:设置密码
//参数: 无
//返回值: 无
//创建时间:2008-11-30 修改时间:
//创建人员: 修改人员:
//============================================================================================
void SetPass_NEW()
{
unsigned char data luc_data; //DTMF解码数据
unsigned char data luc_DataLen = 0; //DTMF解码数据长度
unsigned char data luc_Buf[4];
SuccBuzzer(); //设置成功时发出的声音
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;
SuccBuzzer(); //设置成功时发出的声音
}
if((4<luc_DataLen)&&(luc_data!=0))
{
luc_DataLen = 0; //重新输入
FailBuzzer(); //设置失败时发出的声音
}
if(luc_data==0x0b)
{
SuccBuzzer(); //设置成功时发出的声音
luc_DataLen = 0; //"*"键重新输入
}
if(luc_data==0x0c)
{
if(luc_DataLen==4)
{
SuccBuzzer(); //设置成功时发出的声音
SecondPass(luc_Buf); //以"#"键确定
}
else FailBuzzer(); //设置失败时发出的声音
break;
}
}
}
//============================================================================================
//语法格式:SetPass()
//实现功能:设置密码
//参数: 无
//返回值: 无
//创建时间:2009-02-17 修改时间:
//创建人员: 修改人员:
//============================================================================================
void SetPass()
{
unsigned char idata luc_data,luc_i; //DTMF解码数据
unsigned char idata luc_DataLen = 0; //DTMF解码数据长度
unsigned char idata luc_Buf[4];
bit bit_ok;
while(1)
{
if(guc_Timer0 == 0) break;
luc_data = DTMF();
if(luc_data==0x0c)
{
SuccBuzzer(); //设置成功时发出的声音
while(1)
{
luc_data = DTMF();
if(guc_Timer0 == 0) break; //如果按键长时间没有按,则退出函数
if((luc_DataLen<=4)&&(0<luc_data)&&(luc_data<=10))
{
if(luc_data==10)luc_data = 0;
luc_Buf[luc_DataLen++] = luc_data;
SuccBuzzer(); //设置成功时发出的声音
}
if(luc_data==0x0b)
{
SuccBuzzer();
luc_DataLen = 0 ; //"*"键重新输入
}
if(luc_data==0x0c) //以"#"键确定,比较密码
{
for(luc_i = 0 ; luc_i < 4 ; luc_i ++)
{
if(guc_PassBuf[luc_i] == luc_Buf[luc_i]) bit_ok = 1;//如果密码相等处理,否则退出
else
{
bit_ok = 0;
break;
}
}
if(bit_ok) SetPass_NEW();
else if(luc_data!=0) FailBuzzer(); //设置失败时发出的声音
break;
}
}
break;
}
else if(luc_data!=0) FailBuzzer(); //设置失败时发出的声音
}
}
//============================================================================================
//语法格式:SetTiGoge()
//实现功能:设置共同的时间次数
//参数: 无
//返回值: 电话拔出的结果
//创建时间:2008-11-30 修改时间:
//创建人员: 修改人员:
//============================================================================================
unsigned char SetTiGoge()
{
unsigned char data luc_SData;
unsigned char data luc_data; //DTMF解码数据
unsigned char data luc_DataLen = 0; //DTMF解码数据长度
unsigned char data luc_Buf[3];
for(luc_data = 0; luc_data < 3 ; luc_data ++)
{
luc_Buf[luc_data]=0;
}
while(1)
{
if(guc_Timer0 == 0) break;
luc_data = DTMF();
if(luc_data==0x0c)
{
SuccBuzzer(); //设置成功时发出的声音
while(1)
{
luc_data = DTMF();
if(guc_Timer0 == 0) break; //如果按键长时间没有按,则退出函数
if((0<luc_data)&&(luc_data<=10))
{
if(luc_data==10)luc_data = 0; //DTMF用10表示0
luc_Buf[luc_DataLen++]= luc_data;
SuccBuzzer(); //设置成功时发出的声音
}
if((2<luc_DataLen)&&(luc_data!=0))
{
luc_DataLen = 0; //重新输入
FailBuzzer(); //设置失败时发出的声音
}
if(luc_data==0x0b)
{
SuccBuzzer(); //设置成功时发出的声音
luc_DataLen = 0; //"*"键重新输入
}
if(luc_data==0x0c)
{
switch(luc_DataLen) //转为10进制
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -