⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm v30.c

📁 用STC单片机开发的简单脉冲发生器,用来测试步进驱动器.
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -