?? 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 + -