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