📄 pwm v30.c
字号:
void GetCurActivity(void);void GetLastActivity(void);void ClearActivity(void);void GetStatus(void);void InitialSystems(void);void DecodeMessage(byte value);void ComparePIN(void);void CompareDualCard(void);void OutputWaittingSignal(void);void StartWaitNextCard(byte select);void StartWaitReaderInput(byte select);/*parameter 0=reader 0, 1=reader 1 */void ResetAllAlarm(void);void ResetAlarm(void);void ResetDoorAlarm(void);void LongToAlarm(void);void ClearMem(void); /*清除内存空间数据*/void HID_OPEN(void); /*HID密码校验*/void UPINOPEN(void);void HID_Six(void); /*Rosslare 6位密码(含校验位)*/void FourBit0(void);void FourBit1(void);void SixBit0(void);void SixBit1(void);void RosslareOpen0(void);void RosslareOpen1(void);void Tamper(void);void Fire(void);void Exit(void);void Door1Sec(void);void Door2Sec(void);void txCardEvent(unsigned int cp);void txCardholderRecord(unsigned int cp);void txAlarmEvent(unsigned int cp);/*----STC89CXX--*/#ifdef STCIAPvoid IAPFunction(void); /* IAP 功能函数*/void ToReset(void); /* 控制器冷复位,硬件清零 */#endif/*---------------外部函数-----------------*/extern void SetCardPIN(void);extern bit SearchCard(void); extern byte ID_CompareDoor1(byte SelectRD); //Door1 ID Compareextern byte ID_CompareDoor2(byte SelectRD); //Door2 ID Compareextern bit TimeZone(word Address);extern bit CheckParity(byte SelectRD,byte BitCNT);extern void Reader0(void);extern void Reader1(void);extern void OutputInterFace(byte buffer);extern byte ReadSwitch(byte select);extern void CardEvent(byte door,byte value);extern void DeleteCardEvent(void);extern void DeleteAlarmEvent(void); extern void SaveAlarmEvent(byte value,byte door);extern void Door1CheckFreeEgress(void);extern void Door2CheckFreeEgress(void);extern void CheckHoliday(void);extern bit UpdateRecord(word pRecordCNT);extern void SetCardTimeZone(byte value,byte door);extern void DelCardFromRAM(void);extern void SetForgiveCard(byte value);extern void ClearCardTimeZone(byte value,byte door);extern void AddCardToRAM(void); extern void SetCardStatus(byte value);extern void SetCardTimeZoneValid(void);extern byte SendBackCount(byte value);/*---------------变量定义-----------------*/byte RD0_CNT,RD1_CNT;byte RD0_Delay,RD1_Delay;byte Time[7];byte ReceivCNT,RxTx_CNT;byte Lock1Time,Lock2Time;byte BeepTime0,BeepTime1;byte RD0_BeepCNT,RD1_BeepCNT;bit RD0_Flag,RD1_Flag,Holiday;bit Door1_CloseFlag,Door2_CloseFlag;bit SaveOutOpenDoor1;bit SaveOutOpenDoor2;bit SaveTamper1,SaveTamper2;bit SaveFire1,SaveFire2;bit RD0_BeepON,RD1_BeepON;byte SlaveADR;byte OutputStatus,OneSecondCount1,OneSecondCount2,SecCNT,MinuteUnitCNT;byte idata Door1StatusTime,Door2StatusTime;byte HourUnitCNT,DayUnitCNT;byte MinuteCNT;byte Rd0Select,Rd1Select;byte idata OnBeepTime0,OnBeepTime1,OFF_BeepTime0,OFF_BeepTime1;byte idata RosslareKeyEntry[2],RosslareKeyExit[2];bit BackupLock1Status,BackupLock2Status;bit UPINOPEN_PINFLAG;byte data ROS_Flag;bit TestFlag;bit DoorFlag;bit SecFlag; /* 通用秘密标识位 */bit DuressFlag;bit PIN_OnlyFlag;bit Card_PINFlag;bit Door1_LongToAlarm;bit Door2_LongToAlarm;byte KeyCNT;byte idata UPINOPEN_PINCNT;byte idata UPINOPEN_PIN[4];/*---------------Reader 数据缓冲区-----------------*/byte data RD0_No[5]; /*数据缓冲区共四个字节. [1]~[4], [1]保存高位数据,不足补0, [4]保存低位数据.*/byte data RD1_No[5]; /*可保存26/34位数据*/#define RD0 &RD0_No[4]#define RD1 &RD1_No[4]#define RD0_LSB &RD0_No[1]#define RD1_LSB &RD1_No[1]/*---------------状态函数-----------------*/byte bdata OutData,Status,inputStatus,FunctionStatus; sbit RD1_LED=OutData^0; /*Reader2 批示灯*/sbit RD0_LED=OutData^1; /*Reader1 指示灯*/sbit Door2_ALARM =OutData^2; /*门2报警输出*/ sbit Door1_ALARM=OutData^3; /*门1报警输出*/sbit RD1_BEEP=OutData^4; /*Reader1 蜂鸣器*/sbit RD0_BEEP=OutData^5; /*Reader2 蜂鸣器*/sbit Door2_LOCK=OutData^6; /*门2电锁输出*/ sbit Door1_LOCK=OutData^7; /*门1电锁输出*/sbit CardHolderFull=Status^0; /*持卡人数据库满量标志位*/sbit CardEventFull=Status^1; /*卡事件数据库满量标志位*/sbit AlarmEventFull=Status^2; /*报警事件数据库满量标志位*/sbit CardActivity=Status^3; /*卡事件动作标志位*/sbit AlarmActivity=Status^4; /*报警事件动作标志位*/sbit Hardware_Err=Status^5; /*硬件错误标志位*/sbit CardEventFlag=Status^6; /*卡事件循环记录标志位*/sbit AlarmEventFlag=Status^7; /*报警事件循环记录标志位*/sbit Door1_Switch=inputStatus^0; /**/sbit Door1Status=inputStatus^1; /**/sbit Tamper1_Switch=inputStatus^2; /**/sbit Fire1_Alarm=inputStatus^3; /**/sbit Door2_Switch=inputStatus^4; /**/sbit Door2Status=inputStatus^5; /**/sbit Tamper2_Switch=inputStatus^6; /**/sbit Fire2_Alarm=inputStatus^7; /**/sbit Door1_FreeEgress=FunctionStatus^0 ; /**/sbit Door1_SetFreeEgress=FunctionStatus^1 ; /**/sbit Door2_FreeEgress=FunctionStatus^2 ; /**/sbit Door2_SetFreeEgress=FunctionStatus^3 ; /**/sbit WaitInputPIN_Flag=FunctionStatus^4; /**/sbit GetCardFlag=FunctionStatus^5; /**/sbit RTC_Err=FunctionStatus^6; /**/void delay(byte value) /*1ms基本延时*/{byte i,j;for(i=0;i<value;i++) for(j=0;j<218;j++) ;}void main(void){ bit Door1IsFreeAccess,Door2IsFreeAccess; MemClear=1;#if Doorselect DoorSel=1;#else DoorSel=0;#endif if(!DoorSel) { DoorFlag=1; /* =1 单门 =0 两门*/ } delay(100); Initial(); /*初始化系统*/ if(!MemClear) { delay(100); if(!MemClear) { ClearMem(); if(TestFlag) { while(1) { ADR_LED=0; RxLED=0; } } } } KSNET_Init(4800); /*9600 Baurate for 22.1184MHz 4800*/ MemClear=0; /* 通讯数据接收/发送控制选通端 */ //DoorFlag=1; //Mavinger RxLED=1; if(!RxLED && !ROS_Flag) { ROS_Flag=1; KeyFlag=1; } ADR_LED=0; /*错误指示灯*/ RxLED=0; OutputStatus=OutData=0xFF; OutputInterFace(OutData); /*设输出端初始状态.继电器关闭,蜂鸣器和发光灯关闭*/ delay(100); RxLED=1; OutputStatus=OutData=0x00; OutputInterFace(OutData); while(!SlaveADR) /*设置控制器地址*/ { #ifdef STCMCU WD_Reset(); /*喂狗*/ #endif #ifdef W78E54B WD_Reset(); #endif ADR_LED=0; if(DecodeFlag) { ES=0; /*串行口中断禁止*/ if(RxBuffer[RXB_CMD]== 1 ) SetSlaveAddress(); else if(RxBuffer[RXB_ADDR] == 0 && RxBuffer[RXB_CMD] == 0) GetSerialNo(); ES=1; /*串行口中断允许*/ DecodeFlag=0; } } ADR_LED=1; /*错误指示灯"灭"*/ TR2=1; /*启动T2*/ while(1) { #ifdef STCMCU WD_Reset(); /*喂狗*/ #endif #ifdef W78E54B WD_Reset(); #endif if(DecodeFlag) { ES=0; /*串行口中断禁止*/ if(RxBuffer[RXB_CMD] == 0x01) SetSlaveAddress(); else if(RxBuffer[RXB_ADDR] == SlaveADR ) { switch(RxBuffer[RXB_CMD]) { case 0: if(RxBuffer[RXB_COUNT] == 0) GetSerialNo(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 4: if(RxBuffer[RXB_COUNT] == 0) ResetSystems(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 7: if(RxBuffer[RXB_COUNT] == 7) { TR2=0; RTC_Err=0; if(WriteTime() != 0xff) { KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } Door1IsFreeAccess = Door1_FreeEgress; /*门1*/ Door2IsFreeAccess = Door2_FreeEgress; /*门2*/ Door1CheckFreeEgress(); Door2CheckFreeEgress(); if(Door1IsFreeAccess && !Door1_FreeEgress) { /*检查是否为无限制进出,不是则关门*/ Door1_LOCK=1; RD0_LED=0; RD0_BEEP=0; Door1_CloseFlag=0; Door1StatusTime=1; } if(Door2IsFreeAccess && !Door2_FreeEgress) { Door2_LOCK=1; RD1_LED=0; RD1_BEEP=0; Door2_CloseFlag=0; Door2StatusTime=1; } TR2=1; CheckHoliday(); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 8: if(RxBuffer[RXB_COUNT] == 0) ReadTimeTranPC(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 9: if(RxBuffer[RXB_COUNT] == 2) AddHoliday(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; /*case 0x0a: if(RxBuffer[RXB_COUNT] == 0) SetHoliday(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; */ case 0x0b: if(RxBuffer[RXB_COUNT] == 2) DelHoliday(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X0C: if(RxBuffer[RXB_COUNT] == 0) ResetHoliday(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X0D: if(RxBuffer[RXB_COUNT] == 8) SetTimezone(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X0E: if(RxBuffer[RXB_COUNT] == 2) ClearTimezone(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X0F: if(RxBuffer[RXB_COUNT] == 1) ResetTimezone(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X11: if(RxBuffer[RXB_COUNT] == 6) { SetCardholderTZ(); KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X12: if(RxBuffer[RXB_COUNT] == 6) { ClearCardholderTZ(); KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; /*case 0x13: GetCardholderValidTZ(); KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); break; */ case 0X14: if(RxBuffer[RXB_COUNT] == 7) { SetCardholderValidTZ(); KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X15: if(RxBuffer[RXB_COUNT] == 6) { ES=0; AddCardholder(); ES=1; KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X16: if(RxBuffer[RXB_COUNT] == 4) { ES=0; DelCardholder(); ES=1; KSNET_ACK(SlaveADR,RxBuffer[RXB_CMD]); } else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X17: if(RxBuffer[RXB_COUNT] == 0) ResetCardholder(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; /*case 0X18: if(RxBuffer[RXB_COUNT] == 0) GetFristCardholder(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X19: if(RxBuffer[RXB_COUNT] == 0) GetNextCardholder(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0X1A: if(RxBuffer[RXB_COUNT] == 0) GetLastCardholder(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; */ /*case 0X1B: if(RxBuffer[RXB_COUNT] == 0) SortCardholder(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; */ case 0X1C: if(RxBuffer[RXB_COUNT] == 6) SetPIN(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; /*case 0X1D: GetPIN(); break; */ case 0x1E: if(RxBuffer[RXB_COUNT] == 6) ResetPIN(); else KSNET_NAK(SlaveADR,RxBuffer[RXB_CMD]); break; case 0x1F: if(RxBuffer[RXB_COUNT] == 2) SetDuressPIN(); else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -