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

📄 pwm v30.c

📁 用STC单片机开发的简单脉冲发生器,用来测试步进驱动器.
💻 C
📖 第 1 页 / 共 5 页
字号:
/**************************************************************文件  名 : KS-2002功能描述 : 两门控制器创建  人 : John修改  人 : Mavinger日    期 :Apr-2004版    本 :V1.0硬件说明 :一.硬件描述 1. MCU采用W78E52B/54B,分别有8K/16KFlash EPROM程序存储器。内置WatchDog 计时器。            2. 采用22.1184MHZ 时钟.             3. 采用RS485通讯接口, 波特率9600,8位数据位,1位停止位,无校验位.            4. 实时时钟为 DS1307.            5. 外部存储器 SRAM 采用两片62256,共64K.            6. 实现两门独立单向检测控制,各有独立出门开关,门磁检测,消防报警功能. 另加防拆报警,防盗报警            7. 实现单门双向检测控制,有出门开关,门磁检测,消防报警,防拆报警,防盗报警功能,其余输入点作为扩充功能使用.(V1.0未能实现)二.驱动描述 1. 电锁和报警继电器  =1 开 =0 关            2. 地址错误/通讯指示灯 =1 灭 =0 亮            3. 蜂鸣器/读卡器指示灯 =1 启动 =0 关闭            4. 功能输入            =0 开启 =1 闭合三.指示说明 1.地址错误指示灯: "亮"表示控制器请求初始化,设置相关参数.或者内部受破坏,需要检测            2.通讯指示灯: "灭"表示与电脑间通讯未连接,"闪烁"表示与电脑间通讯成功,但不能判断是否正常通讯.  四.通讯说明 1.   RxTx端加一个反相器      RxTx=1 接收     RxTx=0  发送五.连接说明 1.两门控制器实现单个门的单向检测	    2.每门各有一出门按钮开关,门磁检测,火警输入二组三类开关点输入	    3.防拆报警与防盗报警开关点输入	    4.每门各有一韦根数据连接端口,正常电压由跳线选择+12v/+5V六。修改说明1.2004-09-22 <Mavinger> 修改通讯协议2.2004-09-24 <Mavinger> 修改/调试单门/双门工作模式选择功能3.2004-09-29 <Mavinger> 增加通过键盘读卡器发卡功能(设计中) SRAM定义:=================================	0x005E	        Limit Type	        限制类型	0x005F	        Software protect	软件保护	0x0060	        TrigerTime1	        门1开门触发时间	Ox0061		TrigerTime2	        门2开门触发时间	Ox0062		ShuntTime1		门1 门开超时时间	Ox0063		ShuntTime2		门2门开超时时间	0x0064-0x0065	MaxCount		最大登录数计数	0x0066-0x0067	Entry1Count		门1登录计数	0x0068-0x0069	Entry2Count		门2登录计数	0x006A-0x006B	DuressPIN0		胁持密码1(4位BCD)	0x006C-0x006D	DuressPIN1		胁持密码1(4位BCD)(备用)	0x006E-0x006F	RecordCP		卡记录计数	0x0070-0x0071	RecordLP		卡记录当前指针	0x0072-0x0073	CardEventFP		卡事件首指针	0x0074-0x0075	CardEventCP		卡事件指针计数	0x0076-0x0077	CardEventLP		卡事件尾指针	0x0078-0x0079	AlarmEventFP		报警事件首指针	0x007A-0x007B	AlarmEventCP		报警事件当前指针	0x007C-0x007D	AlarmEventLP		报警事件尾指针	0x007E		DelayTimer		等待密码输入延时	0x007F		SlaveAddress		从机地址	0x0080		SlaveCheckSum		从机地址校验	0x0081		DoorAntiStatus		非法进出(双向检测)	0x0082		Door2AntiStatus		非法进出  (不用)	0x0083-0x0088	OFFset_BackupRD0ID	门1读卡器卡号与密码 返回	0x0089-0x008E	OFFset_BackupRD1ID	门2读卡器卡号与密码 返回	0x008F		BackupStatus            门状态返回控制标志 	0x0090-0x00BF	OFFSET_Holiday	        假 日	0x00C0-0x012B   BackUP                  保留备用区	0x012C-0x0133   OFFSET_Serial	        控制器序列号与版本号		0x0134-0x01F3	OFFSET_TimeZone	        时区 	               Door1: 0x0134 - 0x0193	               Door2: 0x0194 - 0x01F3--------------------------------------------------------------------	0x01F4-0x09C3	OFFSET_AlarmEvent	报警事件记录,9 bytes,250条	0x733C-0x7357		保留区    (未用)	---------------持卡人:3500 卡事件:2040------------------------------	0x09C4-0xA027	OFFSET_CardEvent	卡片数据库, 11 bytes,3500条	0xA028-0xFFF7	OFFSET_CardEvent	卡事件记录,12 bytes,2040条      修改记录 : 2004-10-11 <Mavinger>     增加   ROSSLARE_AY_DR19W 密码键盘读卡器 2004-10-14 <Mavinger> 200102V1.11  修改持卡人: 3500        卡事件: 2040 2004-11-27 <Mavinger> 200102V1.12  修改假日错误。 现象:能被8整除的天数单天设置后无效,修改CheckHoliday() 2004-2-23 <Mavinger> 原Winbond W78E54E 转型为STC89C54RD+.修改的部分为: 	1.看门狗功能 	2.P4附加I/O口地址  3.焊去连接MCU第15脚(PLCC封装)晶振电容CB   4.由于扩展RAM与外部RAM地址相同,需禁止扩展RAM功能   2005-02-25 <Mavinger> 增加ISP/IAP功能函数IAPFunction(),可通过 www.mcu-memory.com提供的ISP软件在线下载. 硬件电路需作相应的改动.  2005-02-27 <Mavinger>	修改密码功能,同时支持HID-5355K(四位数字密码)和ROSSLARE(格式1,格式2)三种格式	的密码键盘读卡器. 	默认情况下,支持HID及ROSSLARE(格式1,Rosslare自有格式) 两种	可通过上电时触发P4.1=0 (RxLED指示灯负端)激活 ROSSLARE (格式2),同时关闭支持格式1	HID格式支持保留。	激活后,将记录标志(KeyFlag)保存在外部存储器中,如果被内存清除,需重新设置。		 2005-02-28 <Mavinger> 增加GetActivityCount(),GetCardEventCount(),ReadTimeTranPC()函数.原功能函数屏蔽.	 2005-03-01 <Mavinger> 	修改卡加密码方式操作错误时误事件记录,即卡加密码时,如果先按"#",再刷卡加密码输入,最后#结束,这样 	会误判断为"密码开门",原因是按"#"开始,密码开门标志位 UPINOPEN_PINFLAG=1,后面的操作会误判定为 	密码开门.   	修改位置: 在刷卡输入对卡号进行校验通过后,将标志位设为 UPINOPEN_PINFLAG=0  2005-03-02 <Mavinger>  增加两条指令:IAPFunction() ---ISP/IAP功能函数,ToReset() ---在线冷复位函数  =========================  Function Code: 0x60  CMD:IAPFunction  Format:    Function Code: 0x61  CMD:ToReset  Format:  ========================= 2005-03-20 <Mavinger> 修改持卡人双向检测重复登录状态,包括的函数:ID_CompareDoor1(),ID_CompareDoor2(),SetCardStatus()  2005-03-20 <Mavinger> 增加 "门开时间长报警"函数LongToAlarm();,代码0x59  **********************************************************************/#define STC 1#define STCTest 1 #if STC#define STCMCU        //STC89C54RD+#define STCIAP	#include <reg54STC.h>	sfr WDTCR=0xe1;     // 看门狗#else	#define W78E54B      //Winbond78E54B	#include <reg54.h>		#define	ENW			0x80	   	#define	CLRW		0x40	       	#define	W_2S		0x07	  #endif#include <absacc.h>#include <INTRINS.h>#include "klas_comii.h"#include "iic.h"/*---------------I/0端口连接----------------*/sbit ADR_LED=P4^0;     /*错误指示灯 =0亮 =1灭*/sbit RxLED=P4^1;       /*通讯指示灯 =0亮 =1灭*/sbit DoorSel = P4^2;   /*选择单门或两门工作*/sbit MemClear = P4^3;  /*清除数据存储器数据*//* IAP 功能寄存器定义 */#ifdef STCIAP	sfr ISP_DATA = 0x0E2;   /* ISP/IAP Flash区数据操作时的数据寄存器*/	sfr ISP_ADDRH = 0x0E3;	/* ISP/IAP Flash区读出/写入数据的高8位地址*/	sfr ISP_ADDRL = 0x0E4;	/* ISP/IAP Flash区读出/写入数据的低8位地址*/	sfr ISP_CMD = 0x0E5;		/* ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效*/	sfr ISP_TRIGE = 0x0E6;	/* ISP/IAP 操作时的命令触发寄存器*/	sfr ISP_CONTR = 0x0E7;	/* ISP/IAP 控制寄存器*//* ISP功能操作 *//*------ ISP_CMD -------*/#define Standby     0x00#define ReadData 		0x01  #define WriteData 	0x02#define EraseData   0x03/*------ISP_TRIGE-------*/#define Triger1 0x46#define Triger2 0x0B9      /* 在 ISP_CONTR.7=1时,输入Triger1和Triger2,ISP/IAP生效*/ /*---B7-----B6----B5----B4---B3---B2---B1---B0--------ISPEN--SWBS--SWRST- - - - ----WT2--WT1--WT0-----ISPEN: ISP/IAP功能允许位, =1 允许编程改变Flash,=0,禁止SWBS: =0,从用户主程序区启动 =1,从ISP程序区启动SWRST: =0,不操作 =1,产生软件系统复位,硬件自动清零*//*------ISP_CONTR WaitTime--------*/#define Time5M 0x03            /* ISP_CONTR.2/.1/.0 -->WT2/WT1/WT0      */#define Time10M 0x02           /* 根据不同时钟频率设置CPU的操作等待时间*/#define Time20M 0x01           /* 涉及的操作包括Read/Program/Sector Erase */#define Time40M 0x00/*------ISP_CONTR -----------*/#define ResetToISP   0x60    /* MCU 软复位至ISP程序区*/#define AllowFlash   0x80    /*允许ISP/IAP操作*/#define StartAtISP   0x40  #define OnReset      0x20#endif/*-------------单门/两门模式定义-------*/#define Doorselect        1     // =0 单门模式  =1 单/两门选择模式/*--------------通讯控制代码定义-----------------*/#define STX  0x02	/*开始*/#define ETX  0x03	/*结束*/#define ACK  0x06	/*应答*/#define DLE  0x10	/*下一字符不是通讯字符*/#define NAK  0x15	/*无应答*/#define SYN  0x16	/*同步*//*--------------外部存储器地址定义-----------------*/#define KlasCommandByte   XBYTE[0x005F]#define KlasCommandLimit  XBYTE[0x005E]#define TrigerTime1       XBYTE[0x0060]    /*门1开门时间*/#define TrigerTime2       XBYTE[0x0061]    /*门2开门时间*/#define ShuntTime1        XBYTE[0x0062]    /*门1开门超时时间*/#define ShuntTime2	     XBYTE[0x0063]    /*门2开门超时时间*/#define Entry1Count       XWORD[0x0033]    /*门1进门登录计数*/#define Entry1MSB         XBYTE[0x0066]#define Entry1LSB         XBYTE[0x0067]#define Entry2Count       XWORD[0x0034]#define Entry2MSB         XBYTE[0x0068]    /*门2进门登录计数*/#define Entry2LSB         XBYTE[0x0069]#define DuressPIN0_MSB    XBYTE[0x006A]     /*四位胁持密码,共2个字节*/#define DuressPIN0_LSB    XBYTE[0x006B]#define DuressPIN1_MSB    XBYTE[0x006C]     /*胁持密码,保留*/#define DuressPIN1_LSB    XBYTE[0x006D]#define BackPIN0_MSB      XBYTE[0x0087]     /*READER0所读卡片的卡密码*/#define BackPIN0_LSB      XBYTE[0x0088]     #define BackPIN1_MSB      XBYTE[0x008D]	    /*READER1所读卡片的卡密码*/#define BackPIN1_LSB      XBYTE[0x008E]#define KeyFlag           XBYTE[0x00F0]     /*ROSSLARE键盘类型标志位,=0格式1,=1格式2*/#define LongToAlarm1      XBYTE[0x00F1] #define LongToAlarm2      XBYTE[0x00F2] /**************持卡人记录指针**************/#define RecordCP          XWORD[0x0037]     /*0x006E 卡记录当前指针*/#define RecordLP          XWORD[0x0038]     /*0x0070 尾指针*/#define RecordLP_MSB      XBYTE[0x0070]     /*0x0070 尾指针高位*/#define RecordLP_LSB      XBYTE[0x0071]     /*0x0071 尾指针低位*//**************卡事件指针**************/#define CardEventFP       XWORD[0x0039]     /*0x0072 首指针*/#define CardEventCP       XWORD[0x003A]     /*0x0074 当前指针*/#define CardEventLP       XWORD[0x003B]     /*0x0076 尾指针*//*用于内存存储方式修改*/#define CardEventLP_MSB   XBYTE[0x0076]     /*尾指针高位*/#define CardEventLP_LSB   XBYTE[0x0077]     /*尾指针低位*/#define AlarmEventLP_MSB      XBYTE[0x007C]#define AlarmEventLP_LSB      XBYTE[0x007D] /**************报警事件指针**************/#define AlarmEventFP      XWORD[0x003C]     /*0x0078-0x0079 报警事件首指针*/#define AlarmEventMSB     XBYTE[0x0078]     /*报警事件首记录高位*/#define AlarmEventLSB     XBYTE[0x0079]#define AlarmEventCP      XWORD[0x003D]     /*0x007A-0x007B 报警事件当前指针*/#define AlarmEventLP      XWORD[0x003E]     /*0x007C-0x007D 报警事件尾指针*/#define DelayTimer        XBYTE[0x007E]#define SlaveAddress      XBYTE[0x007F]     /*控制器地址*/#define SlaveCheckSum     XBYTE[0x0080]     /*地址校验*/#define AntiStatus        XBYTE[0x0081]     /*非法进出状态*/#define BackupStatus      XBYTE[0x008F]/****************控制器序列号与版本号地址定义//Code//**************/#define SerialNo              0x0208    /*控制器序列号与版本号,存于CODE中*/                                 #define VersionNo	      0x020E /****************存储空间地址定义**************/#define OFFSET_Holiday        0x0090    /*假期表首地址*/#define OFFSET_RecordMSB      0x09      /*卡片数据库高位地址*/#define OFFSET_RecordLSB      0x0C4#define OFFSET_Record         0x09C4//#define OFFSET_CardEventMSB   0x73       /*卡事件数据库高位地址*///#define OFFSET_CardEventLSB   0x58   //#define OFFSET_CardEvent      0x7358    #define OFFSET_CardEventMSB   0x0A0       /*卡事件数据库高位地址*/#define OFFSET_CardEventLSB   0x28   #define OFFSET_CardEvent      0x0A028 #define OFFSET_ALARMEvent     0x01F4     /*报警事件数据库首地址*/#define OFFSET_AlarmEventMSB  0x01       #define OFFSET_AlarmEventLSB  0x0F4#define OFFSET_AlarmEvent     0x01F4#define OFFset_BackupRD0ID    0x0083     /*READER0(Door1) 返回信息*/#define OFFset_RD0ID_MSB      0x083#define OFFset_BackupRD1ID    0x0089     /*READER1(Door2) 返回信息*/#define OFFset_RD1ID_MSB      0x089#define OFFSET_TimeZone       0x0134     /*时区表首地址*/ #define OFFSET_TimeZoneMSB    0x01       /*时区表地址高位*/#define OFFSET_TimeZoneLSB    0x34       /*时区表地址低位*/#define OFFSET_Serial         0x012C	/*---------------控制器参数----------------*/#define MaxDoor            2               /*最大门数为2门*/#define MaxCard            3500            /*最大存储持卡人数*/#define MaxCardEvent       2040           /*最大卡事件数2040*/#define MaxAlarmEvent      250             /*最大报警事件数*/#define SizeCardEvent				12#define SizeAlarmEvent     8#define RecordSize 		   	11/*--------------控制事件信息代码-----------------*/#define mgCardOnly              0x00#define mgInvalidCard           0x01#define mgNotTimeZoneValid      0x02#define mgInvalidTimeZone       0x03#define mgPIN_Err               0x04#define mgDualCardErr           0x05#define mgEntryErr              0x06#define mgExitErr               0x07#define mgCardExit              0x0A#define mgCardEntry             0x0B#define mgCard_PIN              0x0C#define mgDualCard              0x0D#define mgPIN_Only              0x0E#define mgFreeAccess            0x0F#define mgTamperAlarm				0x30#define mgDuressAlarm			0x31#define mgBatteryFlat	        0x32#define mgPowerFail					0x33#define mgRTC_Fail				0x34#define mgHard_Err				0x35#define mgLostConnect			0x36#define mgDoor_Alarm			0x38#define mgDoor_tLong		  0x39#define mgDoor_unlock			0x3A#define mgDoor_Release		0x3B#define mgReadCard	      0x47#define mgFireAlarm				0x48#define mgStealAlarm      0x50 #define mgDisableDoor     0x60             /*当某持卡人允许登录及禁止登录未设有效,为此门禁开*//*---------------内部函数-----------------*/#ifdef STCMCUvoid WD_Reset(void);#endif#ifdef W78E54Bvoid WD_Reset(void);#endifvoid Initial(void);                       /*系统初始化*/void ReadTime(void);      byte WriteTime(void);void ReadTimeTranPC(void);void ResetSystems(void);bit ClearCardholderTZ(void);//bit GetCardholderValidTZ(void);bit SetCardholderValidTZ(void);bit AddCardholder(void);bit DelCardholder(void);void SortCardholder(void);void ResetCardholder(void);void SetPIN(void);//void GetPIN(void);void ResetPIN(void);void SetDuressPIN(void);void ResetDuressPIN(void);void GetDuressPIN(void);void SetForgive(void);void ClearForgive(void);void reader(void);void Voice(void);void Output(void);void SetEntry(void);void SetExit(void);void GetOpenTime(void);void GetShuntTime(void);void GetRecordSize(void);void GetSerialNo(void);void Timer2(void);void SetSlaveAddress(void);void GetAddress(void);byte CompareSerialNum(void);void AddHoliday(void);void DelHoliday(void);void SetHoliday(void);void ResetHoliday(void);bit SearchCardFunc(void);/*return =0 the card present; 1= not this card*/void SetTimezone(void);void ClearTimezone(void);void ResetTimezone(void);void CheckCardEventCNT(byte message); /*message is messageID */void CheckEventCNT(byte message,byte Door);void CheckAlarmEventCNT(byte door,byte message); /* parameter is message ID *///void CheckAlarmEventCNT(byte message);void ErrorEventVoice(void);   /*when message error call this buzer will on */void TriggerOpenDoor1(void);     /*When open door call this to open door */void TriggerOpenDoor2(void);void OK_Voice(void);bit SetCardholderTZ(void);//void GetFristCardholder(void);//void GetNextCardholder(void);//void GetLastCardholder(void);void SetAnitPassback(void);void ClearAnitPassback(void);void SetOpenTime(void);void SetShuntTime(void);void OpenDoor(void);void OpenDoorForever(void);void CloseDoor(void);void GetFirstCardEvent(void);void GetNextCardEvent(void);void GetPrevCardEvent(void);void GetCurCardEvent(void);void GetLastCardEvent(void);void ClearCardEvent(void);void StartGetCardID(void);//void GetCardID(void);void EndGetCardID(void);void GetActivityCount(void);void GetCardEventCount(void);void GetFirstActivity(void);void GetNextActivity(void);void GetPrevActivity(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -