📄 dvs-v1.0.c
字号:
//返回: 无
//创建时间: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 + -