?? dvs-v1.0.c
字號:
{
RemIn(); //不斷掃描是否解碼
if(guc_Timer0==0)
{
guc_74HC164LED = 0;
SUN_LED = SUN_LED_OFF;
DispAlarLED();
guc_bit_Alar_led = 1;
break;
}
if(guc_bit_RemCom==1) //有傳感器來
{
guc_Timer0 = SET_REM_TIM; //定時(shí)器定時(shí)
luc_temp = JudgeDupAddr(guc_R315Buf);
if(luc_temp==0) //如果沒有相同的編碼則保存存
{
SaveRFAdd(luc_SectorCnt,guc_R315Buf,1); //保存信息
guc_74HC164LED = 0;
SUN_LED = SUN_LED_ON;
SuccBuzzer(); //設(shè)置成功時(shí)發(fā)出的聲音
}
else if(luc_SectorCnt!=(luc_temp-1))FailBuzzer(); //設(shè)置失敗時(shí)發(fā)出的聲音
ClearRem(); //清除解碼后的數(shù)據(jù)
}
if(COOD==0)
{
Delay1Ms(30); //延時(shí),防止誤按
if(COOD==0)
{
guc_SetAddrTi = KEY_TIME; //按鍵盤定時(shí)
while(COOD==0) //等待按鍵松開
{
//ClearWatchDog();
if(guc_SetAddrTi == 0)
{
SaveRFAdd(luc_SectorCnt,DelRFAdd,0); //保存信息
SuccBuzzer(); //設(shè)置成功時(shí)發(fā)出的聲音
continue;
}
}
SUN_LED = SUN_LED_OFF;
guc_Timer0 = SET_REM_TIM; //定時(shí)器定時(shí)
guc_74HC164LED = 0;
luc_SectorCnt++;
FlickerOut(luc_SectorCnt) ;
}
}
if(luc_SectorCnt == 8 )
{
guc_74HC164LED = 0;
SUN_LED = SUN_LED_OFF;
DispAlarLED();
guc_bit_Alar_led = 1;
break;
}
}
// guc_bitAlarPul2 = 0; //表示已經(jīng)報(bào)過警了
guc_Timer0 = 0;
}
}
}
//===============================================================================================
//語法格式: HC164Shif()
//實(shí)現(xiàn)功能:74hc164輸出
//參數(shù): 無
//返回值: 無
//創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
void HC164Shif()
{
unsigned char data luc_i;
unsigned char data luc_temp;
luc_temp = guc_74HC164LED;
for(luc_i = 0 ; luc_i < 8 ; luc_i ++)
{
//ClearWatchDog();
LED_CLK = 0; //LED位
LED_DATA=luc_temp&0x80; //LED輸出一位
luc_temp=luc_temp<<1;
LED_CLK =1;
}
}
//===============================================================================================
//語法格式:SetWordDisp()
//實(shí)現(xiàn)功能:各種設(shè)置時(shí)各LED指示
//參數(shù): 無
//返回值: 無
//創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
//創(chuàng)建人員: 修改人員:
//===============================================================================================
void SetWordDisp()
{
if(guc_bit_Alar_led)guc_74HC164LED = 0; //如果以前沒有報(bào)過警關(guān)閉所有防區(qū)燈
guc_bit_Alar_led = 0 ; //防區(qū)指示燈閃爍關(guān)
guc_bit_AlLedOF = 1 ; //報(bào)警指示閃爍燈開
POW_GlimmLEDOF = 0 ; //電源指示燈閃爍關(guān)
SUN_LED = SUN_LED_OFF; //關(guān)閉電源指示燈
guc_bitLedDispPul = 1; //設(shè)置時(shí)各指示燈只點(diǎn)亮一次標(biāo)致
}
//===============================================================================================
// 語法格式:LedWorkDisp()
// 實(shí)現(xiàn)功能:正常工作LED指示
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void LedWorkDisp()
{
if(guc_bitLedDispPul) //設(shè)置時(shí)各指示燈只點(diǎn)亮一次標(biāo)致
{
if((guc_KATime == 0)&&(!guc_bit_SenAlar)&&(guc_Bit_BuChe)&&(guc_Timer0==0))
{
guc_74HC164LED = 0; //統(tǒng)一點(diǎn)亮
guc_bitLedDispPul = 0; //設(shè)置時(shí)各指示燈只點(diǎn)亮一次標(biāo)致
guc_bit_Alar_led = 1 ; //防區(qū)指示燈閃爍開
guc_bit_AlLedOF = 0 ; //報(bào)警指示閃爍燈關(guān)
POW_GlimmLEDOF = 1 ; //電源指示燈閃爍開
SUN_LED = SUN_LED_OFF; //關(guān)閉電源指示燈
ALARM_LED = 1; //關(guān)報(bào)警指示燈
DispAlarLED(); //防區(qū)指示正常工作
//ClearWatchDog();
}
}
}
//===============================================================================================
// 語法格式:ONAlarSoun()
// 實(shí)現(xiàn)功能:打開警號聲
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void ONAlarSoun()
{
KALARM = KALARON; //打開警號聲
guc_KATime = ALARSOUREARTIME*RdEEPROM(Alar_TI_Addr); //警號輸了定時(shí)
SetWordDisp(); //報(bào)警時(shí)各LED指示
ALARM_LED = 0; //打開報(bào)警指示燈
}
//===============================================================================================
// 語法格式:OFFAlarSoun()
// 實(shí)現(xiàn)功能:關(guān)閉警號聲
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void OFFAlarSoun()
{
guc_KATime = 0; //計(jì)數(shù)器清0關(guān)閉警號
}
//===============================================================================================
// 語法格式:ScanAlarOut()
// 實(shí)現(xiàn)功能:掃描警號輸出
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void ScanAlarOut()
{
if(guc_KATime==0)
{
KALARM = KALAROFF; //關(guān)閉警號聲
}
}
//===============================================================================================
// 語法格式:ScanLineAlar()
// 實(shí)現(xiàn)功能:掃描斷線報(bào)警
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void ScanLineAlar()
{
if(guc_bitLineOFAlar) //斷線報(bào)警開關(guān)
{
if((!ONLINE)&&(guc_bitARPul))
{
guc_bitARPul = 0; //只判斷一次
guc_bitAlaSounPul = 1; //只報(bào)一次
}
if(ONLINE)
{
if((guc_bitAlaSounPul)&&(guc_Bit_BuChe))
{
ONAlarSoun(); //警號聲
guc_bitAlaSounPul = 0; //只報(bào)一次
guc_bitARPul = 1; //只判斷一次
}
}
}
}
//===============================================================================================
// 語法格式:Time0
// 實(shí)現(xiàn)功能:定時(shí)中斷 定時(shí)約35ms
// 輸入?yún)?shù):無
// 返回參數(shù):無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void it_timer2(void) interrupt 5
{
TR2=0;
TF2 = 0;
HC164Shif() ;
guc_TI--;
//ClearWatchDog();
if(guc_TI==0)
{
guc_TI = TWINLEDTIME; //防區(qū)燈閃爍定時(shí)計(jì)數(shù)器
if(guc_bit_AlLedOF)ALARM_LED = !ALARM_LED;
if(POW_GlimmLEDOF) SUN_LED = !SUN_LED;
if(guc_bit_Alar_led)
{
if(guc_bit_led1==1) led1 =!led1;
else led1 = 0;
if(guc_bit_led2==1) led2 =!led2;
else led2 = 0;
if(guc_bit_led3==1) led3 =!led3;
else led3 = 0;
if(guc_bit_led4==1) led4 =!led4;
else led4 = 0;
if(guc_bit_led5==1) led5 =!led5;
else led5 = 0;
if(guc_bit_led6==1) led6 =!led6;
else led6 = 0;
if(guc_bit_led7==1) led7 =!led7;
else led7 = 0;
if(guc_bit_led8==1) led8 =!led8;
else led8 = 0;
}
}
if(guc_Timer0 > 0) guc_Timer0-- ; // 拔號定時(shí)退出循環(huán)
if(guc_Timer2 > 0) guc_Timer2-- ; // 中斷接收標(biāo)致清0
if(guc_AlarTi > 0) guc_AlarTi--; // 警笛聲音定時(shí)
if(guc_KATime > 0) guc_KATime --;
if(guc_SetAddrTi > 0) guc_SetAddrTi -- ;
if(guc_REM_TI > 0) guc_REM_TI -- ;
if((guc_ERCTI > 0)&&(guc_bit_ERC))guc_ERCTI --;
if(guc_ENCD_TI > 0) guc_ENCD_TI -- ;
TR2=1;
}
//===============================================================================================
// 語法格式: void Rs_Do(void) interrupt 4 using 1
// 實(shí)現(xiàn)功能: 接收中斷
// 輸入?yún)?shù): 無
// 返回參數(shù): 無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void Rs_Do(void) interrupt 4 using 1 // 通訊中斷接收程序
{
unsigned char data luc_Len;
TR1 = 0; // 關(guān)閉定時(shí)器1
if(RI==1) // 等接收完畢
{
guc_Timer2 = 30;
RI=0;
RsBuf[guc_RsPoint++] = SBUF;
if(RsBuf[0]==0xfe)
{
if(guc_RsPoint >= 5) luc_Len = RsBuf[4];
if((guc_RsPoint >= (luc_Len+6))||(guc_RsPoint >= 30))
{
guc_RsPoint=0;
guc_bitRsCom = 1 ;
}
}
else guc_RsPoint=0;
}
TR1 = 1;
}
//===============================================================================================
// 語法格式:main()
// 實(shí)現(xiàn)功能:掃描各函數(shù)
// 輸入?yún)?shù): 無
// 返回參數(shù): 無
// 創(chuàng)建時(shí)間:2008-11-30 修改時(shí)間:2008-12-03
// 創(chuàng)建人員: 修改人員:
//===============================================================================================
void main()
{
//定時(shí)器2的設(shè)置
RCAP2H = 0x0B; // 定時(shí)約35ms
RCAP2L = 0xDC;
ET2 = 1; // 允許T2定時(shí)器中斷
TR2 = 1; // 啟動定時(shí)器2
//普通定時(shí)器的設(shè)置
TMOD=0x21; // 定時(shí)器0為通信,定時(shí)器T1為模式2
TL1=BANDRATE; // 設(shè)置波特率
TH1=BANDRATE;
PCON=0x00;
SCON=0x50; // 串行口方式1,10位送接方式
TR1 = 1; TR0 = 0; // 定時(shí)器0解碼,(關(guān)閉);定時(shí)器1通信,(開啟)
ES=1;EA=1; // 接收中斷,總中斷打開
PS=1; // 串口接收中斷優(yōu)先級高
PT0=0; // 定時(shí)T0中斷優(yōu)先級低
// Buf[0] = luc_i ;
// luc_i = 0xfe^0x86^0x00^0x01^0x01^0x00;
Init(); // 開機(jī)標(biāo)致
SuccBuzzer(); // 設(shè)置成功時(shí)發(fā)出的聲音
//ClearWatchDog();
while(1)
{
if(guc_bitRsCom)
{
ScanComProtoc(); // 掃描串口協(xié)議
guc_bitRsCom = 0;
}
else
{
//ClearWatchDog();
if(guc_bit_ERC)
{
if(guc_ERCTI==0) // 放音旋環(huán)放音
{
Play_Snd = 1; // 產(chǎn)生跳動信號
Play_Snd = 0;
guc_ERCTI = REC_PLAY_TIME; // 放音重新定時(shí)10秒
}
}
else Play_Snd = 1; // 關(guān)閉放音
if(guc_Timer2==0)guc_RsPoint = 0; // 中斷接收時(shí)間沒有接收到結(jié)束標(biāo)致清0
ScanRemDis(); // 掃描遙控并處理
ScanSetRFAddr(); // 掃描是否設(shè)置解碼地址
ScanRing(); // 掃描振鈴
ScanLineAlar(); // 掃描有線報(bào)警
ScanAlarOut(); // 掃描警號聲
AlarOut(); // 傳感器報(bào)警輸出
LedWorkDisp(); // 正常工作LED指示
//ClearWatchDog();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -