📄 pwm v30.c
字号:
} } else if((RD0_CNT!=6) && (RD0_CNT!=8)) { if (! CheckParity((byte)RD0,RD0_CNT)) /*校验数据位是否26/34*/ { ReadTime(); DecodeMessage(ID_CompareDoor1((byte)RD0_LSB)); UPINOPEN_PINFLAG = 0; /*防止在卡加密码方式下, 输入#,再刷卡,输入密码,#确定后事件误判断为"密码开门“*/ } } break; case 1: /*键盘输入*/ OutputWaittingSignal(); if(RD0_CNT==4) { FourBit0(); } if(RD0_CNT==6) { if(ROS_Flag) SixBit0(); else RosslareOpen0(); } break; case 2: /*双卡识别*/ OutputWaittingSignal(); if(! CheckParity((byte)RD0,RD0_CNT)) CompareDualCard(); break; case 3: /*获取卡ID */ { if(! CheckParity((byte)RD0,RD0_CNT)) { OutputWaittingSignal(); CheckCardEventCNT(mgReadCard); Entry1Count++; XBYTE[OFFset_BackupRD0ID]=RD0_No[1]; XBYTE[OFFset_BackupRD0ID+1]=RD0_No[2]; XBYTE[OFFset_BackupRD0ID+2]=RD0_No[3]; XBYTE[OFFset_BackupRD0ID+3]=RD0_No[4]; } } break; } RD0_CNT=0; RD0_Flag=0; EX0=1; } } /*门2 读卡器*/ if(RD1_Flag) /*读卡器读取数据标志*/ { RD1_Delay--; if(RD1_Delay == 0) { EX1=0; switch(Rd1Select) { case 0: /* 单卡识别 */ if(RD1_CNT==4) { HID_OPEN(); /*HID 数据格式使用四位二进制*/ } else if(RD1_CNT==6) { if(ROS_Flag) HID_Six(); else { if(!CheckParity((byte)RD1,RD1_CNT)) UPINOPEN(); } } else if((RD1_CNT!=6) && (RD1_CNT!=8)) { if (! CheckParity((byte)RD1,RD1_CNT)) { UPINOPEN_PINFLAG = 0; ReadTime(); if(DoorFlag) DecodeMessage(ID_CompareDoor1((byte)RD1_LSB)); else DecodeMessage(ID_CompareDoor2((byte)RD1_LSB)); } } break; case 1: /* 键盘输入 */ OutputWaittingSignal(); if(RD1_CNT==4) { FourBit1(); } if(RD1_CNT==6) { if(ROS_Flag) SixBit1(); else RosslareOpen1(); } break; case 2: /*双卡识别 */ OutputWaittingSignal(); if(! CheckParity((byte)RD1,RD1_CNT)) CompareDualCard(); break; case 3: /*获取卡ID */ if(! CheckParity((byte)RD1,RD1_CNT)) { OutputWaittingSignal(); CheckCardEventCNT(mgReadCard); Entry2Count++; XBYTE[OFFset_BackupRD1ID]=RD1_No[1]; XBYTE[OFFset_BackupRD1ID+1]=RD1_No[2]; XBYTE[OFFset_BackupRD1ID+2]=RD1_No[3]; XBYTE[OFFset_BackupRD1ID+3]=RD1_No[4]; } } RD1_CNT=0; RD1_Flag=0; EX1=1; } }/*---------通讯指示灯闪烁判断---------*/ if(ReceivLED) { RxTx_CNT--; if(RxTx_CNT==0) { RxLED =~RxLED; RxTx_CNT=15; if(!RxLED)RxTx_CNT=3; } } else RxLED = 1; Output(); /*输入功能判断与动作*/ Voice(); /*声音与指示灯*/}/************************************功能描述:T2中断函数函数组成:全局变量:输入:返回:说明: T2 中断查询************************************/void Timer2(void) interrupt 5 using 2{ bit Door1IsFreeAccess; bit Door2IsFreeAccess; TF2=0; SecCNT--; if(SecCNT == 0) /*秒计算*/ { CheckHoliday(); Door1IsFreeAccess = Door1_FreeEgress; Door2IsFreeAccess = Door2_FreeEgress; Door1CheckFreeEgress(); Door2CheckFreeEgress(); if(Door1IsFreeAccess && !Door1_FreeEgress) { Door1_LOCK=0; RD0_LED=0; RD0_BEEP=0; Door1_CloseFlag=0; Door1StatusTime=1; } if(Door2IsFreeAccess && !Door2_FreeEgress) { Door2_LOCK=0; RD0_LED=0; RD1_LED=0; RD0_BEEP=0; RD1_BEEP=0; Door2_CloseFlag=0; Door2StatusTime=1; } ReadTime(); LEDSecCNT--; MinuteCNT--; MinuteUnitCNT--; SecCNT=28; if(LEDSecCNT == 0) { ReceivLED=0; } if(MinuteUnitCNT == 0) { MinuteCNT=60; MinuteUnitCNT=60; HourUnitCNT--; /*分计算*/ if (HourUnitCNT==0) { HourUnitCNT = 60; DayUnitCNT--; if (DayUnitCNT==0) { DayUnitCNT = 24; } } } }}/************************************功能描述:读取时钟芯片内部实时时间函数组成:全局变量:输入:返回:************************************/#pragma noaregsvoid ReadTime(void){ if (!Start(0xd0,0)) { Write(00); Start(0xd0,1); Time[0]=Read(); /*second BCD format */ ACKbit(); Time[1]=Read(); /*minute BCD format*/ ACKbit(); Time[2]=Read(); /*hours BCD format*/ ACKbit(); Time[3]=Read(); /*day BCD format*/ ACKbit(); Time[4]=Read(); /*date BCD format*/ ACKbit(); Time[5]=Read(); /*month BCD format*/ ACKbit(); Time[6]=Read(); /*year BCD format*/ } else RTC_Err=1; Stop();}/************************************功能描述:写时间至实时时钟DS1307函数组成:全局变量:输入:返回:************************************/byte WriteTime(void){ byte i=0xff; if (!Start(0xd0,0)) { Write(00); for(i=0;i<7;i++) Write(RxBuffer[RXB_DATAOFFSET + i]); Stop(); return(0); } Stop(); RTC_Err = 1; return(0xFF);}/************************************功能描述:读取控制器实时时钟并返回电脑函数组成:全局变量:输入:返回:************************************/void ReadTimeTranPC(void){ KSNET_Start(SlaveADR, RxBuffer[RXB_CMD]); KSNET_Putc(Time[0]); KSNET_Putc(Time[1]); KSNET_Putc(Time[2]); KSNET_Putc(Time[3]); KSNET_Putc(Time[4]); KSNET_Putc(Time[5]); KSNET_Putc(Time[6]); KSNET_End();}/*************************************************功能描述:门1门2-- 电锁和报警检测函数组成:全局变量:输入:状态说明: 断开时 =0 闭合时=1硬件说明: LOCK =1 启动 =0 停止 ALARM =1 启动 =0 停止 *************************************************/void Output(void){ inputStatus |= 0xFF ; inputStatus &=ReadSwitch(0x07); /*读取八位输入数据*/ Exit(); if(OutputStatus != OutData) { OutputInterFace(OutData); OutputStatus=OutData; } Tamper(); Fire(); Door1Sec(); Door2Sec(); }void Tamper(void){ if (!SaveTamper1 && !Tamper1_Switch) { CheckAlarmEventCNT(1,mgTamperAlarm); CheckAlarmEventCNT(2,mgTamperAlarm); SaveTamper1=1; } if ((!SaveTamper2 && !Tamper2_Switch)&& !DoorFlag) { CheckAlarmEventCNT(1,mgStealAlarm); CheckAlarmEventCNT(2,mgStealAlarm); SaveTamper2=1; }}void Fire(void){ if (!Fire1_Alarm && !SaveFire1) { Door1_ALARM =1; Door1_LOCK =1; CheckAlarmEventCNT(1,mgFireAlarm); SaveFire1=1; } if((!Fire2_Alarm && !SaveFire2) && !DoorFlag) { Door2_ALARM =1; Door2_LOCK =1; CheckAlarmEventCNT(2,mgFireAlarm); SaveFire2=1; }}void Exit(void){ if(!Door1_LOCK && Door1_Switch) { if (BackupLock1Status == 0) { Door1_LOCK=1; Lock1Time=TrigerTime1; CheckAlarmEventCNT(1,mgDoor_Release); } } else if(!DoorFlag && (!Door2_LOCK && Door2_Switch)) { if (BackupLock2Status == 0) { Door2_LOCK=1; Lock2Time=TrigerTime2; CheckAlarmEventCNT(2,mgDoor_Release); } } BackupLock1Status = Door1_Switch; BackupLock2Status = Door2_Switch;}void Door1Sec(void){ if(!(Door1_FreeEgress || Door1_SetFreeEgress)&& !SaveFire1 ) { if(Door1_LOCK) { OneSecondCount1--; if(OneSecondCount1 == 00) { OneSecondCount1=66; Lock1Time--; if(Lock1Time == 0) { Door1_LOCK=0; RD0_LED=0; RD0_BEEP=0; Door1_CloseFlag=0; Door1StatusTime=ShuntTime1; } } } else if(Door1_CloseFlag & !Door1Status) { Door1_ALARM =1; CheckAlarmEventCNT(1,mgDoor_Alarm); Door1_CloseFlag=0; } else if(!Door1Status) { OneSecondCount1--; if(OneSecondCount1 == 00) { Door1StatusTime--; OneSecondCount1=66; if(Door1StatusTime == 00) { if(!SaveOutOpenDoor1) { CheckAlarmEventCNT(1,mgDoor_tLong); SaveOutOpenDoor1=1; if(Door1_LongToAlarm) Door1_ALARM =1; } } } } else { Door1_CloseFlag =1; //关门 } } else if(SaveFire1) { Door1_LOCK=1; Door1_ALARM=1; } else Door1_LOCK=1;}void Door2Sec(void){ if(!(Door2_FreeEgress || Door2_SetFreeEgress)&& !SaveFire2) { if(Door2_LOCK) { OneSecondCount2--; if(OneSecondCount2 == 00) { OneSecondCount2=66; Lock2Time--; if(Lock2Time == 0) { Door2_LOCK=0; RD1_LED=0; RD1_BEEP=0; Door2_CloseFlag=0; Door2StatusTime=ShuntTime2; } } } else if((Door2_CloseFlag & !Door2Status) && !DoorFlag) { Door2_ALARM =1; CheckAlarmEventCNT(2,mgDoor_Alarm); Door2_CloseFlag=0; } else if(!Door2Status) { OneSecondCount2--; if(OneSecondCount2 == 00) { Door2StatusTime--; OneSecondCount2=66; if(Door2StatusTime == 00) { if((!SaveOutOpenDoor2) && (!DoorFlag)) { CheckAlarmEventCNT(2,mgDoor_tLong); SaveOutOpenDoor2=1; if(Door2_LongToAlarm) Door2_ALARM =1; } } } } else { Door2_CloseFlag =1; } } else if(SaveFire2) { Door2_LOCK=1; Door2_ALARM=1; } else { if(!DoorFlag) Door2_LOCK = 1; else Door2_LOCK = 0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -