视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于单片机的门禁系统设计
2025-10-05 18:04:49 责编:小OO
文档
基于单片机的门禁设计

摘 要

本门禁系统设计的前端信息采集以非接触式IC卡形式,有接触式IC卡、磁卡等其它卡不可比拟的优势,采用RS232/485通信方式接受数据和发送数据,实现了权限管理、实时监控、存储、异常报警、出入记录查询等功能,能够存储2000个用户信息。运用模块化的设计思路,用芯片U2270B采集外部IC卡号,并通过STC12C5A60S2主控芯片解析IC卡号,它的读和写卡距离在300—400mm范围内。实现刷卡模块;检测按钮与单片机的引脚电平,引脚电平连续两次处于低电平则按钮按下实现按钮模块;既没有刷卡又没有按钮,门打开则实现机械开门模块;驱动电机采用四个NPN三极管组成的电路,输出电平的高低来实现电机的正转,反转功能,从而实现电机驱动模块; 

本文设计的门禁控制器,电路简单, 使用方便,可靠性高、反应灵敏,系统维护方便、适用范围广且价格低廉,应用范围广泛,能够在大多数场合代替接触式IC卡的使用。

同时可以与上位机联结组成一种联网式门禁系统,由于计算机网络的发展,通过中心或通过一个端点就能对设备进行监控与维护。通过局域网对本地区的设备进行集中监控与维护,可提高系统的可靠性,减少故障的发生率和处理时间等。

关键词:非接触式IC卡 STC12C5A60S2单片机 模块化设计 门禁控制器

绪  论

本设计以STC系列单片机12A5A60S2作为微控制器。具有无法解密,采用宏晶最新第六代加密技术;超强抗干扰,整机轻松过2万伏静电测试;速度快,1个时钟/机器周期,可用低频晶振,大幅度降低EMI;支持掉电唤醒;超低功耗;输入/输出口多,最多有44个I/O口,A/D做按键可以节省很多I/O口;在系统可编程,无需编程器,无需仿真器,可远程升级;内部集成高可靠复位,外部复位电路可彻底省掉,也可继续使用外部复位电路

在IC卡应用日益广泛的今天,IC卡门禁系统以其管理的安全、可靠、高效、灵活和方便逐步取代其它现有各类门锁成为目前门禁系统的主流方式。门禁安全管理系统是一种新型智能化的安全管理系统,它集自动识别技术和现代安全管理措施为一体,涉及电子、机械、光学、计算机技术和通讯技术等诸多方面。它是解决重要部门出入口便捷控制和实现安全防范管理的有效措施。适用各种机要部门,如银行、宾馆、机房、办公大楼、智能化小区、工厂、军械库、机要室等。在数字技术和网络技术飞速发展的今天,门禁系统也得到了迅猛发展。门禁系统已由早期单纯的门道及钥匙管理,发展为一套完整的出入管理系统,并且通过采用先进的网络技术,使整套系统的操作和自身资源的使用不再受时间和地域的。非接触式IC卡门禁管理系统读卡器是以非接触IC卡射频识别技术为核心,使用户使用方便和管理方便为目的,具有高安全性、高可靠性的管理系统。当要开门时,只要将IC卡在读卡器前一划,读写器就会识别出该卡是否对应此门,当密码正确则打开门,并自动准确记录下卡号和开门时间等信息,如果系统允许,一卡还可以对应多个门。

第一章 基于STC12C5A60S2单片机门禁系统概述

1.1 STC12C5A60S2/AD/PWM系列功能简介

该单片机属于STC系类新型增强型单片机,功能强大。高速:1个时钟/机器周期,增强型8051 内核,速度比普通8051快8~12倍;宽电压:5.5~3.3V,2.2~3.6V;增加第二复位功能(高可靠复位,可调整复位门槛电压,频率<12MHz时,无需此功能);增加外不掉电检测电路,可在掉电时,及时将数据保存进EEPROM,正常工作时无需操作EEPROM;低功耗设计:空闲模式,(可任意一个中断唤醒)掉电模式(可由外部中断唤醒),可支持下降沿/上升沿和远程唤醒;工作频率:0~35MHz,相当于普通8051:0~420MHz;时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置;8/16/20/32/40/48/52/60/62K字节片内Flash程序存储器,擦写次数10万次以上;1280字节片内RAM数据存储器;芯片内EEPROM功能,擦写次数10万次以上;ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器;8通道,10位该素ADC,速度可达25万次/秒,2路PCA还可当2路D/A使用;2通道捕获/比较单元(PWA/PCA/CCP),也可以用来在实现2个定时器或2个外部中断(支持上升沿/下降沿中断);4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器;可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟;硬件看门狗(WDT);高速SPI串行通信端口;全双工异步串行(UART),兼容8051的串口;先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令;通用I/O口(36/40/44),复位后为:准双向口/弱上拉(普通8051传统i/0口)可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均达到20mA,但是整个芯片最大不得超过100mA;复位脚:烧录程序时如设置I/O口,可当I/O口使用;EX_LVD:是外部低压检测中断/比较器;不用的I/O口:浮空即可;使用LQFP48/PDIP48封装是,最大有44个I/O口;使用LQFP44封装时,最多有40个I/O口;使用PDIP40封装时,做多有36个I/0口。

1.2 门禁系统简介

  1.2.1 门禁系统的组成及工作原理

门禁系统即出入口控制系统,其基本组成是由前端信息采集部分、传输部分、识别处理与控制三个部分组成。

1、前端信息采集部分

前端信息采集部分[1]一般有卡片读出式、密码输入和生物特征提取三大类:

(1)卡片式(即刷卡部分)

依卡片工作方式有接触式和感应式两类:接触式卡片有磁条卡、条码卡、红外线卡、铁码卡、集成电路智能卡(也成IC卡)等;感应卡由一片编程的特殊芯片和一组天线组成。天线用来发射和接受电磁波,芯片是感应卡的核心元件。感应卡具有防水、防污、能用与潮湿恶劣的环境等优点,刷卡时非常方便;感应速度快,节省时间,并且应具备隔感应特性,因此有隐秘性。目前多用于REID射频卡。

(2)密码输入式

密码输入式有电话面板固定式键盘和乱序键盘两种。电话面板固定式键盘的0~9在键盘的位置是固定不变的,因此,在输入密码是,易于被人记住仿冒,现仅用于与刷卡机配套使用。乱序键盘亦即0~9共10个数字在显示键盘上的排列方式不是固定式,而是随机的,每次使用时显示数字的顺序都是不同,这样就避免了被人窥视而泄露密码之可能。所以多被这种方式采用。

(3)人体生物特征提取式

由于生物特征有着“人各有志、终身不变”和“随身携带”的特点,因此具有无法仿冒与借用、不怕遗失、不用携带、不会遗忘,具有独特性、唯一性、安全性,适用于高机密性场所及电脑中心的信息安全保护。目前一般有声音、签字、眼虹膜、掌形、指纹与面像等特征提取式,但现在比较成熟与使用最多的是指纹图像的采集处理与识别的门禁系统。并且,为缩短辨识时间,通常需配合按键输入ID(输入者编码)。

 2、信息传输部分

信息传输部分有有线与无线传输之分。

(1)有线传输

门禁有联网型和非联网型(式),其有线传输多采用双绞线、电话线、电缆、光缆等。

(2)无线传输

无线传输采用微波、红外光波或移动通信网络等

 3、识别处理与控制部分

识别处理与控制部分一般用微机识别处理所采集的特征信号,以控制门禁装置(控制执行机构动作)的开或关。

主控制器由计算机硬件与软件组成,安装于控制室。其中包含各种控制扩展板(控制执行机构动作)的开或关。

从控制器是门禁机(读卡器或生物采集设备)和门禁主机的连接设备,根据需要从控制器可连一、二、四、八个门禁机。单独的门禁控制器可控制1个门或几个门。个门以内的群控系统,实行分级管理,可有效防止无关人员通过。所有门禁控制装置均连网运行,此时系统覆盖的面积较大,应妥善规划门禁控制器的数量及安装位置,施工要规范,操作系统软件以Windows NT实用性最强。

经常有人工作的库房,除门禁控制设备外,还可以同时安装对讲或可视对讲装置,先通过声音或图片决定开门与否,以防万一。门禁控制设备与体系结构相关连。

实际上,门禁系统主要由被控制的门、控制器、门磁锁、读卡器及卡片、手动按钮、钥匙、指示灯、上位机通讯的线缆、上位机PC机、专用软件等组成。对需控制的出入口,安装受控电锁装置和感应器(如:电子密码键盘、读卡器、指纹阅览器等)控制的电控门。授权人员持有有效证卡,或密码和自己的指纹,就可以开启电控门。所有出入资料都被后台计算机记录在案,通过后台计算机可以随时修改授权人员的进出权限。此外,门禁系统还可以加入考勤系统等功能。

1.2.2 门禁系统的功能及需求发展方向

1、门禁系统的功能

对通道进出权限的管理主要有以下几个方面:对人员出入权限设置、更改、取恢复等。

(1)对通道的权限:即对每个通道设置哪些人可以进出,哪些人不能进出等。

(2)进出通道的方式:即对可以进出该通道的人进行方式的授权,进出方式通常有密码、读卡(生物识别)、读卡(生物识别)+密码三种方式等。

(3)进出通道的时段:即设置该通道的人可以在什么时候范围内可以进出等。

实时监控与存储功能

系统管理人员可以通过微机实时查看每个门区人员的进出情况(同时有照片显示)、每个门区的状态(包括门的开关,各种非正常状态报警等);也可以在紧急状态打开或关闭所有的门区。

系统可存储人员出入的日期、时间、卡号、是否非法等相关信息。即存储所有的进出记录、状态记录等。

异常报警功能

在异常情况下,系统可以实现微机报警或报警器报警。如非法侵入、门超时未关等异常报警;非法闯入、门锁被破坏等情况出现时,系统会发出实时报警信息并传输到管理中心。

 集中管理与出入记录查询功能

后动态管理工作站可建立用户资料库,定期或实时采集每个出入的进出资料,同时可按各用户进行汇总、查询、分类、打印等。并且,还可按不同的查询条件进行出入记录查询;如配备相应考勤软件也可实现考勤、门禁一卡通等。

 网络设置管理监控功能

  大多数门禁系统只能用一台微机管理,而技术先进的系统则可以在网络上任何一个授权的位置对整个系统进行设置监控查询管理,也可以通过INTERNET网上进行异地设置管理监控查询。

 消防报警监控联动功能

  可实现消防联动,当出现火警等情况时,由中心统一开启出入通道,门禁系统可以自动打开所有电子锁,以使里面的人随时逃生,并且,可启动CCTV实现联动实时监控。

  与监控联动,通常是指监控系统自动将有人刷卡时(有效/无效)的情况下,同时也将门禁系统出现警报时的情况录下来。

2、门禁系统的需求与发展方向

门禁系统现状

目前,门禁市场经过十多年的发展已开始进入成熟期,产品设计与新技术应用已呈多元化、集成化发展,针对门禁功能的应用已不再局限于单一门禁控制应用的需求。由于国内市场的不断发展变化,[6]从2008年的安博会上可以看出,门禁技术的发展出现呈二条主线模式发展:一条是以国外门禁厂商以技术领先引导的综合性门禁集安防控制的技术路线,另一条是以国内以卡技术应用为主的一卡通平台模式发展的路线,它结合了符合中国国内用户需求的应用特点,把门禁管理融合到一卡通整体平台管理中体系中,实现了门禁、巡更、电梯、考勤、消费、停车场、会议签到等方面的综合应用。

门禁系统的趋势

2008年,门禁一卡通平台的开发给门禁系统的多元化应用扩展了空间。作为门禁一卡通智能识别系统的前端,目前国内外研制和使用的门禁系统主要集中在感应门禁系统和生物识别门禁系统。根据主流市场的分类,它又可分为以非接触式IC卡主的产业链和以指纹门禁为主的辅助产业链。它们均以提供完善门禁一卡通应用解决方案提供服务。

在生物识别的门禁系统的单个产业链中,生物识别技术的应用主要限于门禁及考勤,指纹识别产品仍然占据主导地位,其他如人脸识别、虹膜识别、掌形识别、声纹识别以及最新的DNA识别,仍处于推广阶段。由于指纹门禁产品核心部件指纹读头使用次数(寿命)的问题,已大大阻碍了其市场推广因素。简单计算:一台门禁机器假如以500个人单位规模的企业每天进出门最少4次计算,每天就有1000—2000次,每个月就有3—6万多次,那每年将会有近36—72万次,如此高的使用频率在一个不到4平方厘米的表面上磨放,该部件如果不是用特殊、专用材料制作就达不到上千万次表面上磨放,很难满足企业长期的应用。而RFID门禁产品的只读特点几乎可以达到无限次(读写到十万次),二者的市场推广根本无法相比。由此可见,RFID门禁产品依然会占据很大的市场份额。

随着安防设备网络化的演变,门禁系统与视频监控、和防盗报警功能将进一步的融合,其集成化的门禁系统解决方案,集成了防盗报警设备及CCTV监控系统、联动空调灯光控制,进一步体现门禁从一个单纯的身份识别系统,实现对智能化管理系统中的节能服务管理,它必将成为未来门禁一卡通产品的发展趋势。

门禁技术应用的展望

随着国内用户对门禁系统需求的成熟,用户也逐渐表现出对门禁产品的差异性要求。一部分客户单纯以低价格为采购导向,主要用作单一的用途,催生了大批小型门禁企业。另外一部分客户则具备相当的购买能力,希望能采购到具备国外产品稳定,又具备多种应用功能、性能,价格又相对便宜的门禁产品。这使得门禁系统功能从单一的控制向一个完整管理平台发展,这一趋势将使门禁系统演变成为传统的RFID身份识别技术与安防系统有机结合的应用新模式。随着中国门禁技术的日益成熟,深圳地区已有一些具备实力的简易免维护型门禁产品开始步走入国际市场,成为国外经销商的采购对象。门禁市场最终将经历“洗牌”,相当一部分不具备研发实力或技术力不够的小规模企业将因此生存更加艰难,而那些真正具备研发实力、技术储备丰富的厂家将在各自的细分市场上形成较高的市场占有率。它们也将形成中国知名的门禁品牌产品。

门禁一卡通系统结合集成智能摄像技术,配合IC卡读写认证,分析捕获的视频流,进行智能笔对或人工笔对的智能判断,可有效地解决门禁冒名顶替事件的发生。门禁系统平台还通过多种辅助方式,如手机短信、EMAIL等发送报警信号。在智能小区门禁应用中,它可结合智能家居控制器与楼宇对讲系统融合,通过网络控制家用电器(灯光、空调、电视,音响,冰箱等),再利用智能门禁一卡通系统,结合防盗报警实现报警设备布防撤防的管理、CCTV联动控制智能识别应用,从而实现高度集成化的智能安防管理解决方案。那种将传统的门禁管理功能上升到综合安保门禁一体化管理的发展趋势,必将催生一个全新的门禁市场。

第二章 各类门禁系统的比较

2.1 按前端信息采集即进出识别方式分

正如门禁系统的组成中所述,[2]目前门禁系统按前端信息采集即进出识别方式可分为如三大类:

(1)密码识别式

  即通过检验输入密码是否正确来识别进出权限。这类产品又分两类:

  普通键盘型(键盘上的数字固定,如电话上键盘),其优缺点为:

  优点:操作方便,无须携带卡片;成本低。

  缺点:同时只能容纳三组密码,容易泄漏,安全性很差;无进出记录;只能单向控制。

  乱序键盘型(键盘上的数字不固定,不定期自动变化),其优缺点为:

  优点:操作方便,无须携带卡片,安全系数稍高。

  缺点:密码也容易泄漏,安全性还是不高;无进出记录;只能单向控制;成本比普通键盘型稍高一些。

(2)卡片识别式

  即通过读卡或读卡加密码方式来识别进出权限,接卡片种类又分为:

  磁卡式,其优缺点为:

  优点:成本较低:一人一卡(+密码),安全一般,可联微机,有开门记录。

  缺点:卡片与设备有接触,因而易磨损,寿命较短;卡片容易复制;不易双向控制;卡片信息容易因外界磁场丢失;使卡片无效。

   RFID射频卡式,其优缺点为:

  优点:卡片同设备无接触,无磨损,寿命长,理论数据至少十年;开门方便安全;安全性高,可联微机,有开门记录;可以实现双向控制;且卡片很难被复制等。

  缺点:成本较高。

  (3)生物特征识别式

  即通过检验人员生物特征等方式来识别进出。主要有指数型,虹膜型,面部识别型等,最成熟与使用较广的主要是指纹识别式。生物特征识别式的优缺点为:

  优点:安全性较好;无须携带卡片。

  缺点:成本很高,识别率差一些,但对环境要求高,对使用者要求高(比如指纹不能划伤,眼不能红肿出血,脸上不能有伤,或胡子的多少)等。

  值得提出注意的是,一般人认为生物识别的门禁系统很安全,其实门禁系统的安全部仅仅是识别方式的安全性,还包括控制系统部分的安全,软件系统的安全,通信系统的安全,电源系统的安全等,哪方面不过关,整个系统都不安全。如有的指纹门禁系统,它的控制器和指纹识别仪是一体的,但安装时要装在室外,这样控制锁开关的线就露在室外,也很容易被人打开。因此,设计与安装都应整体考虑其安全性才行。

  通过上述优缺点的可看出,以RFID与生物识别式为好。

2.2 按设计原理分

  门禁系统按设计原理又可分为以下分类:

  (1)控制器自带读卡器(识别仪)

  这种设计的缺陷是控制器必须安装在门外,因此部分控制线必须露在门外,这样,内行人无须卡片或密码,即可以轻松开门。

  (2)控制器与读卡器(识别仪)分体

  这类系统的控制器安装在室内,只有读卡器输入线露在室外,其他所有控制线均在室内,并且,读卡器传递的又是数字信号。因此,若无有效卡片或密码,任何人都无法进门。

  显然,两者比较,第二类系统应是用户的首选。

2.3 按与微机通讯方式分

  门禁系统按与微机通讯方式还可分为以下两类:

  (1)单机控制型

  这类产品是常见的,适用与小系统或安装位置集中的单位。通常采用RS485通讯方式。其优缺点为:

  优点:投资小,通讯线路专用。

  缺点:一旦安装好就不能方便地更换管理中心的位置,不易实现网络控制和异地控制。

  (2)网络型

  这类产品的技术含量高,它的通讯方式采用的是网络常用的TCP/IP协议。其优缺点为:

  优点:控制器与管理中心是通过局域网传递数据的,管理中心位置随时变更,不需重新布线,很容易实现网络控制或异地控制。适用于大系统或安装位置分散的单位适用。

  缺点:系统的通讯部分的稳定需要依赖于局域网的稳定。

2.4 按管理结构模式分

  门禁系统如按管理结构模式还可分为以下三类:

  (1)单向感应式(读卡器+控制器+出门按钮+电锁)

  使用者在门外出示经过授权的感应卡,经读卡器识别确认合法身份后,控制器使电锁放行,并记录进出时间。按开门按钮,打开电钮,直接外出。适用于安全级别一般的环境,可以有效地防止外来人员的非法进入。这是目前最常用的管理模式。

  (2)双向感应式(读卡器+控制器+电锁)

  使用者在门外出示经过授权的感应卡,经读卡器识别确认合法身份后,控制器使电锁放行,并记录进门时间。使用者离开所控房间时,在门内同样要出示经过授权的感应卡,经读卡器识别确认身份后,控制器使电锁放行,并记录出门时间。适用于安全级别较高的环境,不但可以有效地防止外来人员的非法进入,而且可以查询最后一个离开的人和时间,便于在特定时期(例如失窃时),用来提供证据,落实责任。

  (3)联网模式

  联网模式是通过RS485/RS232信号转换器,将若干个单向感应门禁模块连接成一个集中管理的中大型门禁系统。一个RS485/RS232信号转换器,可以串联负载128台控制器。每台控制器分别控制1-4个门。一台电脑可以通过串口对所有的门禁考勤系统进行集中管理。所有模式都可以定义为门禁考勤一卡通管理模式。

第三章  基于STC12C5A60S2单片机的门禁系统硬件设计

3.1 电源模块设计

设计说明:给芯片L7805提供12V电源,输入输出都加入电容主要是对输入的12V电压和进过芯片7805转化的5V电压进行滤波处理使输入输出电压稳定。

3.2 射频模块设计

图3-1 内部框图

图3-2 内部数据结构

    射频卡选用的EM4100卡是由瑞士微电生产的一款用于只读射频卡信息传输的集成芯片。射频卡由IC芯片、感应线圈组成,COIL1与COIL2为感应线圈接口。全波整流[3]电路、Csup可以将线圈感应产生的能量保存供给芯片作为工作电源;时钟选取电路将筛选频率125 kHz的载波作为时序发生电路的基准时钟源;内存中位数据依次串行输出,通过编码模块输出曼彻斯;最后信号通过调制电路再由感应线圈发射出去。图3-1为EM4001芯片内部功能图。

EM4100全部的数据位为位,它包含9个开始位(其值均为‘1’)、40个数据位(8个厂商信息位+32个数据位)、14个行列奇校验位(10个行校验+4个列校验)和1个结束停止位。EM4100在向读卡机或PC机传送信息时,首先传送9个开始位,接着传送8个厂商信息或版本代码,然后再传送32个数据位。其中15个校验以及结束位用于跟踪包含厂商信息在内的40位数据。当EM4001上电初始化后,便依次将这位数据反复输出,直到卡片离开基站读写器失电为止。图3-2为EM4100芯片内部数据格式。数据信息采用曼彻斯特编码,然后调制到载波上,影响感应线圈工作。数据“O”对应着电平下跳,数据“1”对应着电平上跳。

读卡部分

设计说明:U2270B是一种典型的发射频率为125kHz的非接触性IC卡射频基站芯片,芯片U2270B输出与单片机的输入捕捉端口相连,通过单片机解析IC卡。

U2270B的载波频率为100~150 kHz,其调制方式为曼彻斯和双相位码。U2270B的电源供给可为5 V的稳压电源或者是12 V的汽车蓄电池。它可以为RF场提供能量,其中在短距离运用时,外围驱动电路简单。U2270B还具有信号微调能力,而且其读写距离可达4~6 cm。U2270B还具有电压输出功能可以给微处理器或其他外围电路供电。

通过桥式二极管来增强读写距离。

通过调整Rf引脚所接电阻的大小,可以将内部振荡频率固定在150 kHz,然后通过天线驱动器的放大作用,在天线附近形成150 kHz的射频场,当射频卡进入该射频场内时,由于电磁感应的作用,在射频卡的天线端会产生感应电势,该感应电势也是射频卡的能量来源。数据写入射频卡采用场间隙方式,即由数据的“O”和“1”控制振荡器的启振和停振,并由天线产生带有窄间歇的射频场,不同的场宽度分别代表数据“O”和“1”,这样完成将基站发射的数据写入射频卡的过程,对场的控制可通过控制芯片的第6脚(CFE端)来实现。

由射频卡返回的数据流可采用对射频卡天线的负载调制方式来实现。射频卡的负载调制会在基站天线上产生微弱的调幅,这样,通过二极管对基站天线电压的解调即可回收射频卡调制数据流。应当说明,与U2270B配套的射频卡返回的数据流采用的是曼彻斯特编码形式。由于U2270B不能完成曼彻斯特编码的解调,因此解调工作必须由微处理器来完成,这也是U2270B的不足之处。

非接触式读卡器天线设计

电感藕合式射频识别系统的读写器天线用于产生磁通量[5],而磁通量用于向非接触式IC卡提供电源并在读卡器与非接触式IC卡之间传输信息。因此,对读卡器天线的构造就有3个基本要求:首先是使天线线圈的电流最大,用于产生最大的磁通量;其次是功率要匹配,以最大程度地利用产生磁通量的可用能量;最后是要有足够的带宽,以无失真地传送用数据调制的载波信号。

射频识别系统(RFID)一般由阅读器(PCD)和应答器(PICC)两部分组成。一台典型的阅读器包含有高频模块(发送器和接收器)、控制单元以及与应答器连接的耦合元件。应答器是射频识别系统真正的数据载体。通常,应答器由耦合元件以及微电子芯片组成。应答器没有自己的供电电源,只是在阅读器的响应范围之内,接收来自阅读器的射频电源。应答器工作所需的能量,如同时钟脉冲和数据一样,是通过耦合单元非接触传输而获得的,因此,实现耦合的元件——天线,在本系统中具有关键作用。

    设计步骤

进行天线设计,主要是根据实际要求确定天线的机械尺寸、线圈匝数、电感以及等效电路的电容等,从而使天线的工作效率最高。

     1、优化磁场耦合因子

    耦合因子仅仅与线圈排列的机械尺寸(如线圈直径、阅读距离、线圈方位角)和磁场中线圈附近的物质有关,与阅读器天线或应答器天线的电感无关。为了提高耦合因子,应该选择尽量小的传输距离,而且阅读器和应答器的天线轴线要平行。如果阅读距离确定,阅读器天线线圈直径和磁场耦合因子k就可以根据这个特定距离进行优化设计。磁场强度可以通过试(1)计算:

式(1)

   根据式(1),磁场强度和天线结构有直接关系,而磁场耦合因子k也取决于线圈排列的结构尺寸,所以磁场强度和k也是成比例的。优化耦合因子就是要确定天线效率最高时天线半径和阅读距离的关系。图3-3是在一定条件下,磁场强度随线圈半径变化的情况。图3-3的测定条件是:fo=125kHz,LR=737μH,r=5~55mm,d=20 mm。

    从图3-3中可以看出,如果阅读距离d为常数,当rd时,场强基本按比例减小。由此可以得出:天线线圈的最佳半径为r≈d。

图3-3 磁场强度随阅读器线圈半径变化情况

     2、确定磁场的耦合因子

    为确定耦合因子,可利用Temic公司提供的试验应答线圈(TTC)及电路进行测试,测试原理如图3-4所示。TTC可以放在实际应答器的位置上。当阅读器天线在信号发生器的激励下工作时,通过TTC的电压UT就可以被测出。

图3-4 测试磁场耦合因子的电路

图3-5 TTC和测量设备相连的等效电路模型

    Cpara是线圈的内部寄生电容,Ccable和Cprobe是测量设备的电缆电容和负载电容。这些电容对测量电压都会产生影响。为了使测量效果更加准确,这里引入了修正因子Ak,计算公式式(2)如下:

式(2)

    图3-6表明阅读距离不同的情况下,测得的耦合因子的结果。

图3-6 磁场耦合因子随传输距离的变化

      3、满足实际的频率容许偏差

    图3-7是当操作频率固定,阅读器电感为不同值时总的天线容许频偏随着磁场耦合因子k的变化曲线。从图3-7中可以看出,总体容许频偏随k的增大而增大,随阅读器线圈电感值的增大而减小。值得注意的是,天线电感与流过天线的电流成反比。对U2270B来说,最大天线电流(IRpp)被在400mA。如果考虑到阅读器天线线圈的电压,天线的电感LR不能小于413μH。在图3-7中,纵坐标总的天线容许频偏和横坐标磁场耦合因子对应着一个点,大于413/μH且小于在对应点之上最近曲线所对应的电感的任何电感值都可以被选取。确定了LR后,在工作频率固定的情况下,天线电容可以通过式(3)来计算:

试(3)

    其中fo≈125kHz。

图3-7 不同阅读器电感情况下,总体天线容许频偏随磁场耦合因子的变化

    天线线圈的匝数可以通过式(4)来计算:

式(4)

3.3 实时时钟模块设计

设计说明:PFC8563为实时时钟芯片,基本功能是保持跟踪时间和日期等信息,采用32.768kHz的晶体,晶体振荡器输出经过分频后会产生1Hz的基准来刷新时间和日期。RTC的精度主要取决于晶振的精度。晶振一般在特定的电容负载下,其调谐振荡在正确的频点。由于RTC的晶振输入电路具有很高的输入阻抗(大约109Ω),因此,它与晶振的连线犹如一个天线,很容易耦合系统其余电路的高频干扰。而干扰信号被耦合到晶振引脚将导致时钟数的增加或减少。考虑到线路板上大多数信号的频率高于32.768kHz,所以,通常会产生额外的时钟脉冲计数。因此,晶振应尽可能靠近X1、X2引脚安装,同时晶振、X1/X2引脚的下方最好布成地平面。

3.4 驱动电机电路设计

 

设计说明:

小功率驱动电路采用H桥开关电路。M1和M2是互补的双极性或单极性驱动信号,TTL电平。开关晶体管的耐压应大于1.5倍VCC以上。由于大功率PNP晶体管价格高,难实现,电阻R上的损耗较大,所以这个电路只在小功率电机驱动中使用。

3.5 其他设计

数据通过573地址锁存到外部内存扩展芯片61C256中或AT24C512中,由于会出现掉电的可能,内存中的数据会丢失,所以记录存储在EEPROM中,避免数据丢失。通信采用RS232通信方式。如果要采用RS485通信方式则加入485芯片。通信方式选择通过跳线电路设置。通过拨码来设置通信地址。

第四章 基于STC12C5A60S2单片机的门禁系统软件设计

4.1 软件总体设计

1、流程图:

2、定时器设置:

定时器0:定时查询,20ms中断一次

定时器1:作为波特率发生器,设置波特率为9600

PCA定时器:曼彻斯捕捉

3、内存分配

0:版本号

1:为是否下载过默认参数,参数没有下载过保存默认参数同时加载

2-175:默认的系统参数

3101—25101:存储2000个用户信息,每个用户包括11个字节,access表示用户是否使用中占一个字节;UserKard表示卡片编号占用5个字节;Endtime表示有效期占用4个字节;UserVip表示用户权限是否VIP。

4.2 软件模块设计

4.2.1 触发开门模块

刷卡设计:

卡号是有曼彻斯组成的,所以对卡号的解析就要先了解曼彻斯。

(1)曼彻斯解析框架图

曼彻斯由于其特殊的性能,被广泛应用于小功率无线传输系统中。曼彻斯特编码是串行数据传输的一种重要的编码方式。曼彻斯特编码最大的优点是:数据和同步时钟统一编码,曼码中含有丰富的时钟信号,直流分量基本为零,接收器能够较容易恢复同步时钟,并同步解调出数据,具有很好的抗干扰性能,这使它更适合于信道传输。

在曼彻斯特编码中,将一位时间一分为二,位时间内发生低电平到高电平的变化表示‘0’;高电平到低电平的变化表示‘1’;由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。曼彻斯特编码如图7所示。

图3-8 曼彻斯特编码

通过STC单片机解析曼彻斯特解码,DK信号允许输入捕捉,允许PCA定时器溢出中断。选择PCA的一个16位捕捉模块0,设置下降沿中断捕捉曼彻斯,通过软件设置将模块0连接到P1.3/CCP0可以切换到P4.2/CCP0/MIS0口。选择振荡频率为1/12时钟频率,PCA的一个特殊16位定时器溢出则初始化,根据曼彻斯不同的时间段来解析曼码曼彻斯接受数据临时存放在申请的数组a[i] 曼彻斯数据接收成功最终存放在数组b[i]。数据接收完成还要进行校验。每个字节只用低五位,读出的5位(去掉起始位),需要11个字节存放,每个字节最低位位校验位。行校验为偶校验。校验成功则说明卡号正确接收。

按钮设计:

框架流程图描述:

按钮设置:防抖

判断按钮是否按下,如按下则立标志位过70ms再来检测按钮是否按下,如果按下则说明按钮成功按下,流程图如下

机械与非法设计:

框架流程图如下:

框架流程图描述:

定时器每隔60ms查询一次门磁状态,门磁离开判断原来门状态为处于关门状态,条件满足,如果非法开门则为非法开门,不为非法则为内侧机械开门;门磁未离开并判断原来门状态处于开门状态,条件满足判断是否非法,若非法则为非法关门,不为非法则为内侧机械关门。

4.2.2 驱动电机、LED、蜂鸣模块设计

框架流程图:

框架流程图描述:

当有成功接收发到有效卡号,按钮成功按下,中心开门则电机驱动(灯状态由红色变成绿色)正转100ms开门,驱动成功后电机停止5s自动反转电机(时间为100ms)关门(灯状态由绿色变成红色)。当接收到有效卡号或内侧按钮按下时蜂鸣响0.2s;超时未关时蜂鸣间隔40ms响两声,声长为1s;内侧机械开门、正常关门、非法开门、非法关门时蜂鸣响一声,声长为1s。

4.2.3 通信模块设计

采用查询中断的方式,接受和发送数据帧。申请接受和发送的数组空间,上位机发送查询命令,查询到此时接受中断标志位为1,然后一位一位的接受数据帧,存储在接受缓冲区,直到接受到OD为完整的数据帧立标志位;然后对接收的数据帧进行校验、压缩、并解析数据帧;数据帧解析成功后返回相应的信息给上位机。

判断的数据帧分别为

     1)设置sm权限确认

  可以设置地址,读取地址,初始化参数,系统复位,设置权限确认,取消sm的权限确认。

 2)读取sm的参数

当设置权限成功,可以设置时间;设置工作日准经时间段;设置非工作日准进时间段;增加用户;删除用户;设置星期内的休息日;设置节假日;中心开门;

设置sm记录区指针;设置星期;设置时间段;设定节假日。

3)读入sm信息

读取时间;读取历史记录的的柜桶参数信息;读取历史记录;读取一组工作日的准经时间段;读取一组非工作日的准进时间段;读取用户数目;读取星期;读取节假日;读取时间段。

历史记录事件存储

当发生刷卡、内侧按钮、内侧机械,中心开门、以及超时未关、正常开门、正常关门、非法开门、非法关门事件时记录这些事件信息。

刷卡开门:当接受到卡号并判断为有效卡号时电机转动开门。

内侧按钮开门:判断按钮已经成功按钮并且电机转动开门。

内侧机械开门:当前一次发生事件为刷卡开门事件后,电机未转动门就打开。

中心开门:上位机命令开门。

超时未关:当门磁离开3分钟门磁仍未对上。

正常关门:当出现刷卡、内侧按钮、内侧机械开门时,情况1为门磁离开后又对上,情况2为门磁从未离开过则在出现上述事件基础上30s后门磁状态仍未改变则记录正常开门。

非法开关门:当上一次事件出现按钮开门时门磁离开为非法开门,门磁又对上为非法关门。

最大记录事件数为1000条。

4.2.4 拨码模块设计

通过读引脚电平获得485地址,读引脚电平不用考虑该引脚的方向,采用外部上拉,再通过硬件电路实现。拨码向ON的方向拨为低电平0;反之则为高电平1。上电后485地址初始化并且再也不可更改除非掉电之后才能改变485地址。

第五章 系统构建与调试

5.1 系统构建

给系统提供12V电压,上电初始化时蜂鸣响1s表明系统初始化成功,初始化成功后进入正常运行流程。每隔200ms读一次实时时钟时间,先存放在EEPROM然后写入内存;设置了权限确认功能;可以存储2000个用户信息;可以增加、删减用户和记录用户数目;增加用户超过2000个用户则显示存储已满,删减用户到0个用户再次删除用户时显示删除不成功;有成功接收到有效卡号,按钮成功按下,中心开门则电机驱动(灯状态由红色变成绿色)正转100ms开门蜂鸣响0.2s,驱动成功后电机停止5s自动反转电机(时间为100ms)关门(灯状态由绿色变成红色);超时未关时蜂鸣间隔40ms响两声,声长为1s;内侧机械开门、正常关门、非法开门、非法关门时蜂鸣响一声,声长为1s;记录历史事件信息,事件包括刷卡、内侧按钮、内侧机械,中心开门、以及超时未关、正常开门、正常关门、非法开门、非法关门;可以设置485地址。出现死机可以初始化系统,也支持复位重启。该门禁系统选用RFID射频卡,信息传输采用有线传输方式,总体实现了对人员出入权限的设置、实时监控与存储用户信息及出入记录,记录的查询、异常报警、集中管理、网络设置管理监控的功能。

5.2 调试

用爱贝尔单片机测试程序模拟上位机软件调试程序,设置串口调试程序的比特率为9600bit/s,设置传输数据帧格式为8个数据位,1个停止位,无奇偶校验。该调试工具功能有门禁458地址设置,查询;权限获取或取消;设置或查询时间;增加或删除用户;用户数目查询;记录查询;中心开门;初始化系统;远程复位。

调试出现问题及解决方法

出现的现象:

1、实时时钟校正时间有不准。

2、卡号捕捉不准确。

3、抢占总线

4、初始化不成功。

5、下载完有效用户后刷卡不开门,并显示为用户过期

6、LED灯颜色闪亮不对

问题解决:

问题一解决:

软件原因,IC总线程序,读实时时钟数据的太快,使读出的数据错误,在IC读应答程序处加入2个延时程序,是读出实时时钟数据稳定且正确

问题二

问题分析:

软件设计有误,捕捉曼码时采用下降沿捕捉,记录两个下降沿的时间段,一开始的设计思想是利用两个定时器进行捕捉,一个定时器查询是否有下降沿,当检测到下降沿时开启另一个定时器进行计数知道下一个下降沿到来则关闭该定时器。由于程序代码也占用时间虽然时间很短,会导致捕捉的时间段不准, 从而使不做的卡号不准。

问题解决:

采用单片机自带的输入捕捉寄存器,设置为下降沿中断,当采集到有效电平时PCA硬件就将PCA计数器阵列寄存器(CH与CL)的值装载到模块的捕获寄存器中(CCAPnL与CCAPnH),速度快,确保了捕捉下降沿时间段的准确性,卡号捕捉准确。

问题三

问题分析:

首先单片机应该一直处于接受状态,因为上位机平均每200ms会发送数据帧。只有当接收到正确的数据帧时单片机发送反馈数据帧时才需要设置发送状态,发送完数据后当立即设置为接受状态。

允许发送设置成功后,不立即发送查询数据帧,也就不能够设置当前状态为接受状态,如果此时单片机出现高优先级中断,门一直处于发送状态,就出现了抢占总线现象。

问题解决:

当需要发送数据时在它的前面设置发送状态,已发送完就立即设置为接受状态,就可避免出现抢占总线现象。

问题四

    问题描述:

初始化主要是下载一些系统参数到内存芯片256中,过不去说明下载参数不成功

问题解决:

通过分析,是在测试时经常烧写程序然后初始化导致芯片256损坏,换了一个256则初始化正常。

   问题五解决:

由于上电时时间未校准。所以合法用户刷卡不开门,应先确认完权限后在进行时间校验。

问题六解决:

LED焊接方向反了。

  5.3 原理图及PCB图

 

第六章 总结

本门禁系统采用RFID射频卡具有同设备无接触,无磨损,寿命长(理论数据至少十年);开门方便安全;安全性高,可联微机,有开门记录,可以实现双向控制;且卡片很难被复制等优点。采用控制器与读卡器(识别仪)分体设计:这类系统的控制器安装在室内,只有读卡器输入线露在室外,其他所有控制线均在室内,并且读卡器传递的又是数字信号。因此,若无有效卡片或密码,任何人都无法进门。技术含量高,控制器与管理中心是通过局域网传递数据的,管理中心位置随时变更,不需重新布线,很容易实现网络控制或异地控制。适用于大系统或安装位置分散的单位适用,但是系统的通讯部分的稳定需要依赖于局域网的稳定。门禁系统早已超越了单纯的门道及钥匙管理,它已经逐渐发展成为一套完整的出入管理系统。它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。

参考文献

[1]李勇.门禁系统的分类及特点[J].中国防伪报道,2008:(34~35)

[2]雷玉堂.各类门禁系统的比较及其发展[J].中国公共安全,2007:().

[3]丁明军,徐建成.射频中应用的曼彻斯特解码技术[EB/OL]. 中国一卡通网,2009-09-27.

[4]金鑫.基于单片机控制的门禁系统的设计和实现[J].Computer Knowledge and Technology,2010,6(6).

[5]安静宇,雷金莉,王媛媛.基于非接触式IC卡门禁系统设计[N].宝鸡文理学院学报(自然科学版),2008-09(2).

[6]黄志勇.2009~2010年我国门禁市场发展状况分析[J].中防,2010:(84~86).

附 件

Main.C

#include "define_Struct.h"

unsigned char WaitSec=0;//等待多少个20MS

unsigned char ReadTime=0;//每200ms读取一次时间。

unsigned char MyAddress; 

void init(){//大约3.6ms

  

 禁止定时器1中断

 使能串行口中断

 

 使能定时器0中断

 从P1.3 切换到P4.2 口

       优先级设置

      

   输入捕捉寄存器清0

 0L=0X00; 

     计数器清0

     开始计数

     

 

}

void    Timer0(void)   interrupt 1{

 清除中断标志位

 

 

   按钮计时

   电机转动时间为400ms

 

 

  蜂鸣计时

   超时未关蜂鸣响间隔响两声,一次为2s

 

  

 

 

     刷卡开门蜂鸣响0.9s

  

  过后允许读去卡号

 

 

 

 

void waitms(unsigned char i){//20ms

}

void SaveDefaultParam(){

 //系统参数 

 本机地址

 系统功能参数  

 对门锁继电器执行时间

 开门等待进入时间

 红外告警确认时间  

 异地报警延时时间 

 感应卡的种类和编号获取方式。

 红外开启和关闭方式

      

 记录的指针26001

 

 

  

 

 

  

 

 

  

 

 //缺省系统时间是09年01月01日01时01分01秒 

 秒

 分

 时

 日

 星期

 月

 年

 24C(2,175,usysparam.param); // 2-100

  

 24C(3101,22000,AllUser.DoorUsers);//

}

bit InitParam(){

   

  24C(0,1,temp);

 

   24C(0,1,temp);  

  

  

   

  

 

 工作正常

  24C(1,1,temp); 

   参数已经下载过

      

  

   24C(1,1,temp); 

 

 

}

void LoadSysParam(){

 24C(2,175,usysparam.param);  

 24C(3101,22000,AllUser.DoorUsers);

}

void main(){

 初始定时器2

 4M1=0X00;  定义上拉使能

 4M0=0X03;

 1M1=0X00;

 1M0=0Xf0;

 3M1=0X00;

 3M0=0X04;

 初始为接收状态

 

 是否保存缺省参数

 加载参数

  进行初始化

 

  

 0f;

 读取本机地址

 读8563

 初始开门设备是非法

 初始状态为关门

 没有告警

 重新上电的日期,月,日,时,分,秒

 启动看门狗并清零计数 设置为每隔约4.5s看门狗溢出

  喂狗

 

 

  约每隔200ms读时间

 

  

  

  

    

    

     

     

      判断是否过了有效期,若过了,则删除该用户

     

      

      

       ram.gjppara.UserCount.Count--

       24C(3101+11*i,1,temp);  

    

    

   

   

     

  

   秒针变化

   

   

   

    

   

   

   

     关蜂鸣器

   

  

   

  

  

   

   

   

    

     增加了新用户

    

   

   

   

    

     删除了用户资料

   

   

  

 

  校准时间

  

  

  

  

 

   

}

Globe.c

#include "define_Struct.h"

unsigned char c8563_Store[7]={0x00,0x01,0x01,0x03,0x17,0x01,0x07}; /*秒,分,时,日,星期,月,年01-10-07 21:22:00*/

unsigned char data g8563_Store[8]={0x20,0x00,0x59,0x23,0x01,0x01,0x10,0x01}; 与上面相反

bit I2CProtect=1;//检测当前系统i2c运行没有,0=正在使用,1=没有使用。避免存储器和时钟芯片是否强总线,

unsigned  char StartInfrared=120;//关门后延时10秒启动红外。当StartInfrared=0时候开  

union Union_SysParam usysparam; 把告警信息放在放掉电保护区 如果是铁连存储器(At24c08),要用0x7000, 如果是nvram地址就为 0x8000

union Union_TimeList SysTimeList;//时间列表

union EventU eve;

union EventU EvEve;

unsigned int Beepsec=0;

unsigned char HisEve[14];

struct door mydoor;

union Union_user AllUser;

bit SetTime=0;//=1时候代表校对时间

char TimeStr[13]="000000000000";

unsigned char data NowYear=0;//当前的年

unsigned char data NowMonth=0;//当前的月

unsigned char data NowDay=0;//当前的日

unsigned char data NowWeek=0;//当前的星期

unsigned char data nowSec=0;//当前的秒数

unsigned char data NowMin=0; 当前的分钟

unsigned char data NowHour=0;//当前的时

unsigned char NowSetSec=0;//计算时间秒数,超过10分钟则设置权限取消

unsigned char DoorOpenHour; //开门时间

unsigned char DoorOpenMin;

unsigned char DoorOpenSec;

unsigned char DoorSwitchOpenHour; //刷卡,中心开门驱动继电器时间

unsigned char DoorSwitchOpenMin;

unsigned char DoorSwitchOpenSec;

unsigned char DoorSwitchOpenMin1;

unsigned char DoorOpenDelayHour; //开门延时时间

unsigned char DoorOpenDelayMin;

unsigned char DoorOpenDelaySec;

bit DoorOpenFlag=0;//门由关变为开将它置为1;

unsigned char M_Start=0,Data_Start=0,Data_Zero=0,Receive=2,M_Out=0; //读曼彻斯

unsigned char Card_Fig=0,Usar_Fig=0,cardonflag=0,enablecard=1,enable=0;

unsigned char a[12]={0,0,0,0,0,0,0,0,0,0,0,0},b[12],m=0,n=4,Rev=0;

unsigned int Correct=100,Time_Value=0,twosoundflag=0;

bit infraredEn=1;//红外线,默认开启,当门是卡开的时候,为0即关闭红外探测,当门通过内部按钮关门时候,则开启红外,为1;

bit infraredFlag=0;//当有红外告警时置1

bit Red1SendFlag=0;//红外1告警标志 有告警 0 =无

bit Red2SendFlag=0;//红外2告警标志 有告警 0 =无

bit Switch2Flag=0; //开关量2告警标志 1=有告警 0 =无

bit Switch4Flag=0;// 开关量4告警标志 1=有告警 0 =无

unsigned char Act=0;

unsigned char DJtime=0,DJflag=0,beeptime=-1;

unsigned char SwitchSec=0;//用来读取开关量延时 当=0时候读取才有用

unsigned char KeySec=0;//按键延时,

unsigned char  UserCfg=0;//b0=1增加用户 b1=1删除用户

unsigned char HaveTimeInit _at_ 0x128;// =0x88的时候代表不用初始化时间 在外部RAM

unsigned char Remote_Read_SM_State[2]={0x00,0x00};//远程读取SM状态要返回的两个字节

u启动30计时标志 当有刷卡,远程或内侧按钮开门动作时,置1 1=开始计时 若30s内门状态变化,则清零

unsigned char RealDoorState=0;//真实的门状态 默认=0 门关 1=门开

bit SysInitFlag=0;   系统初始化标志

//写存贮器时间

unsigned char Write_AT24C512_Hour;

unsigned char Write_AT24C512_Min;

unsigned char Write_AT24C512_Sec;

Env.c

#include "define_Struct.h"

unsigned char KeyCount;//内侧按钮计数

char DoorCount=0;//门状态的计数,用于防抖

unsigned char DuKaQiAddress=1;//读卡器地址 默认01

bit getJieJiaRi(unsigned char riqi[2]){

 

  

 

}

void Demodulation(void)

  if(M_Start==0)

  {

  输入捕捉方式(下降沿)

  }

  else

  {

 时间段

 时间段

 

 

  

 

 

 

 时间段

  }

Analysis:if(Rev==0)

  if(Data_Zero==0&&Receive==1)

  else

  {

  }

  if(M_Out==9)

 

  if(M_Out==9||Data_Start==0)

  { 

  }

  if(Data_Zero==1)

  {

  }

  if(Receive==1)

  else

  n--;

  if(n==-1)

  {

  }

  if(m==12)

  {

  }

}

void Int0_Routine(void) interrupt 7

  unsigned int a,b;

  if(CF==1){

  CF=0;

  CCAPM0|=0x10; 输入捕捉方式(下降沿)

  M_Out=0;//重新初始化变量

  M_Start=0;

  Data_Zero=0;

  m=0;

  n=4;

  Card_Fig=0;

  Data_Start=0; 

  CH=0;

  CL=0;

//  CCF0=0;  

  }

if(CCF0==1){

  CCF0=0;

  a=CCAP0H;

  b=CCAP0L;

  CH=0;

  CL=0; 

a=a<<8;

  a|=b;  

  Time_Value=a/2;  

  Demodulation();//读入曼码数

  }

}

unsigned char  Verification(void)

{

 unsigned char j,k,s,Line_Even=0,Row_Even[4]={0,0,0,0};

for(j=0;j<=10;j++)//11字节

  { 

 曼码数据

 列

 向右移,把最低位移入c中

 该位表示当进行加法或减法运算时操作结果又进位或者借位

  所有每行的二进制数(包括效验位)有1个1就加1

  每一行最低位为行效验位,不用读出来,跳过

  每一列有1加1

 

if(j<=9)

  if(Line_Even%2==0)//前面的b[0]-b[9]包括校验位数都判断是否为偶校验

 将该行的校验位除去

 行记1的计数清0

 有一行偶校验出错,就跳出循环

 if(j==11)

  if(Row_Even[0]%2==0&&Row_Even[1]%2==0&&Row_Even[2]%2==0&&Row_Even[3]%2==0)//每列都校验一下

  return 1;//效验成功,返回1

  return 0;//效验不成功,返回0  

}

bit CheckUser(){

 

 

  

 读卡效验成功

 

 用户卡号

 读出用户ID,temp[2]-[4]

 曼码的数据字节的高字节放在一个字节,低字节放在相邻下一个字节

 未找到该用户

 

step:  //产生无效刷卡记录

 

  

 

  

 

 

  

 

  //  //判断有效期

 

  

 

  

   用户

   

   受到时间段表

   

    小时

    分

   

   

   

    

    

    

     

    

    

   

   

   

   受到星期表

    1c;

    

   

   

       

   

   

   受到星期表和时间段

    1c;

    

   

   

       

   

   

   

   

   

   

   

    

    

    

     

    

    

   

     

   

   受到节假日

   

   

   

    

      

   

   受节假日和时间段

   

   

   

    

   

   

   

   

   

   

   

    

    

    

     

    

    

   

   

   

   节假日和星期

   

   

   

    

   

    1c;

    

   

   

       

   

   

   受假日 星期 时间段

   

   

   

    

   

    1c;

    

   

   

       

   

   

   

   

   

   

   

    

    

    

     

    

    

   

         

   

 

 过有效期

 

 

  

 

  

 

 

  

 

  

 

 

  用户卡的有效期已过

  

 }

}

void WriteEvent(unsigned char *eve){

 24C(usysparam.gjppara.myRec.rec.Savep*15+26001,15,eve); // 2-100

 

  

 

 跟上读取记录时候

 

 

 24C(16,9,usysparam.gjppara.myRec.RecStr);//保存指针

}

void ReadEvent(){

 24C(usysparam.gjppara.myRec.rec.Loadp*15+26001,15,HisEve); // 2-100

 24C(16,9,usysparam.gjppara.myRec.RecStr);//保存指针 

}

void AlmEve(unsigned char Source[],unsigned char Sta,unsigned char Type){

 事件来源

 日期时间

   状态

  //4.备注

  //5.星期

}

/*

* 函数说明: 

 产生门事件

 注意所有门事件均先产生开门动作,然后产生开门事件(,最后设置红外状态 )

* 输 入: 无         

* 返 回: 无

* 版 本:

*/

void DoorEve(unsigned char Source[],unsigned char Type){

 事件来源

 日期时间

 

 状态

 

   8f;

  

 

   8f;//关门 D6D5D4=000将D6清0

  

 

  

   开门  D6D5D4=101

  

 

   开门超时 D6D5D4=111

  

  原来红外状态 

  原来红外状态

 是否有红外功能

  关门

  

   

    是否关闭红外

  

   

    是否关闭红外  

  

 

   非法开门  

   

    是否关闭红外  

  

 

 没有红外功能

 

  是否关闭红外

 

 备注

  星期

 

}

void  DJAction(void){

  if(DJtime==0){

 

  }

}

void openDoor(){

 

   

  

  

  

  

   

   

   

   

         

   

  

   

   

 

  

  

  

 

  

 

 

 

  

  

  

   

  

 

  

  

 

 

  超时未关限时3分钟

 

 

 

 

  

 

 

//  

}

void Env(){

//

 

  

   门开

   

   

   

    

    

    

   

    原先处于关门状态

   

    

   

     产生非法开门

    

    

     

    

     

    

    

     

    

     

    

     

     非法开门

     

    正常开门

     内侧机械开门

    

     产生开门事件

     

     

     

  

  

 

  门是关的

  

   

    

    

    

     

      

     门状态发生变化,关闭门用继电器

    

    原先处于开门状态

    

    

     布防灯亮AlmarmLed

    

      产生非法关门告警

     

     

     

     

      

     

      

     

     

      

     

      

     

     

      非法关门

      红外开启

     

     

     正常关门

     

     

      

        刷卡关门

       

       

      

       

       

      

       

        内侧刷卡关门

       

        布防

       

           

       

        按钮关门

        下一次开门为非法

       

        布防

       

      

       

      

       

        远程关门

       

       

      

         

       

     

      

       

        机械关门

       

       

     

     

    

   

  

 

 

 检测是否有卡

  用户合法

 

   地址

  

 

  

  

  

  

  

   产生开门事件

  

  撤防

// 

 

  

 

 

   判断是否有红外告警及是否已经推门进入

 

   

    

   

     

    

   

    

    

    

    

   

    

    红外1报警停止

   

    

   

   

   

    

   

    

   

   

   

   

    

   

   

   

    红外2报警停止

   

    

   

     

 

 

 检测按钮

 每隔60ms左右检查按钮

  

 

 

   

   

   

   

   

   

    产生按钮开门

   

    产生开门事件

   

   

  

 

  

 

 

/*************************END**************************************/ 

 检测门

  超时30秒关继电器,同时30秒后开门就认为是非法开门。

 

 

 

    关闭门,用继电器

  

 

  

  

//   

   

   

   按钮关门

  

 

  

  

   

   

   

    

      外侧刷卡关门

    

    

     

      内侧刷卡关门

    

     

      按钮关门

    

    

    

     

     远程关门

    

   

//   

  

    

  

  开门超时

 

  

    开门超过规定时间就报超时未关

    

  

  

    

  

    

    

     

       刷卡开门

     

     

      

       按钮开门

     

     

      

       远程开门

     

     

      

       机械开门

     

     

   

   

    

 

}

Door.c

#include "define_Struct.h

/******************************

 查找用户

 存在用户返回1 不存在返回0

******************************/

unsigned int FindUser(unsigned char userid[5]){

  使用中的用户

  

   

  

  

 

}

/******************************

 添加用户

 添加成功返回1,添加失败返回0 2已经存在 255满

******************************/

unsigned char AddUser(unsigned char userid[16]){

 

   未使用中的用户

   

   

   

   

   

   

   

   

   

   

   

    16)

    24C(3101+11*i,11,AllUser.temp[i]);

   

    24C(3101+11*i,11,temp);

   

    

    

    

   

    

    

     

     

  

 

  满

 

// 

 

   

   

   

   

    users[i].UserKard[4]=userid[4];

   

   

   

    users[i].EndTime[3]=userid[14];

   

    24C(3101+11*i,11,AllUser.temp[i]);

   

    24C(3101+11*i,11,temp);

   

  

 

   

   

   

   

   

}

unsigned char DelUser(unsigned  char type,unsigned char userid[5]){

 

   按照卡号

    使用中的用户

    

     

     

     

      24C(3101+11*i,1,temp); 

        

    

   

   

   按照用户id

    使用中的用户

userid[1]==AllUser.users[i].UserId[1] &&  userid[2]==AllUser.users[i].UserId[2] &&  userid[3]==AllUser.users[i].UserId[3]){

   

   

   删除所有用户

    使用中的用户

    

    

        

     24C(3101+11*i,1,temp); 

    

   

   

     

 

}

Infocomm.c

unsigned char ReceiveBuf[100]="";//485接收缓存

unsigned int RBufEnd=0;//当前接受的地址

bit haveFrame=0;//=1时候代表接受到一帧完整数据

unsigned char frame[100]="";//当前处理的数据帧

unsigned int FrameLen=0;//frame的长度

unsigned char SendFrame[100]="";//当前发送的数据帧

unsigned int SendIndex=0;//当前发送的索引

unsigned int SendLen=0;//当前发送的长度。

unsigned char havePopedom=0;//=1当前权限,可以设置参数.

unsigned int Bottom=0;//桶低

unsigned int Savep=0;//下一个新记录的存放位置

unsigned int Loadp=0;//下一次读取记录未知指针

unsigned int Mf=0;//计算有效记录数

void serial(void) interrupt 4 using 2  {     /* use registerbank 2 for interrupt      */

 

 接受中断

  读取字节 */  

 

 

 

  读取字节 */ 

   

  

 

  

  

    接收到一帧完整信息

   

   

 

   

      发送中断

 

   发送完数据后转为接收状态

  

  

   

 

  

  

  

  

 

}

/*

* 函数说明: 

 压缩信息帧,方便解析

 压缩的信息放到frame中

* 输 入: 无         

* 返 回: 无

* 版 本:

*/

void zip(unsigned char *fr,unsigned int Len){

 帧头

 

 

  

 

  

 

 

 

  

 

  

 

 帧尾

}

void unzip(unsigned char *fr,unsigned int Len){

 帧头

 

 

 

  

 

  

 

  0f;

 

  

 

  

  

 帧尾

}

void CopyInf(unsigned char *laiyuan,unsigned int start,unsigned char *mubiao,unsigned int start1,unsigned int len){

 

 

 

}

unsigned int GetLth(unsigned int j){

 

}

unsigned int GetSum(unsigned char *frame,unsigned int DataLen){

 

 

  

 

  

 

  0f;

 

  

 

  

  

}

void SendData(unsigned char Type,unsigned char RtnData,unsigned char Lth,unsigned char Info[]){

 

 通过Lth和Info计算 sum 和 L.TH

 

 

 计算sum

 校验高字节

 校验低字节

 转为发送状态

  

}

sfr FCF  = 0xB1;  //pv51rd2+ 的复位

void SetPopedom(){

 mSource[5]={0,0,0,0,0};

 

   设置地址

   

    

    

     24C(7,1,temp); 

    

     Data(0x80,0,0,"");

   

   

   读取地址

    

   

   

   初始参数

   

    

     24C(1,1,temp);

         

    

    

    

    

     喂狗

   

   

   系统复位

   

    

    

    

    

       

   

   设置权限确认

   

    

    

   

    

    

   

   

   取消sm的设置权限

   

   

   

   修改sm的访问密码

   

     判断逻辑异或

     

     

     

     

     

      24C(8,5,usysparam.gjppara.SysPwd); 

     

     

      修改了SM的密码

     

    

     

    

   

    

   

   

   不能识别的命格式

   

   

  

 

 

}

/*

void SetParam(){

 判断权限

 

   

    设置时间

     年

     月

     星期

     日

     时

     分

     秒

    

    

    

    

    

    

    

    

    

    设置工作日准进时段

    

     写数据

    

    

    

    

    

    

    

    

    设置非工作日准进时段

    

     写数据

    

    

    

    

    

    

    

    

    增加用户

    

    

    

    

     

     

     

      24C(25,2,tempstr);

      

     

     

     

    

     

      

     

      

       

      

       

      

           

    

    

    删除用户

    

      卡片卡号

      

      

      

      

      

     

      

       24C(25,2,tempstr);

      

      

      

      

      

      

      

      

      用户编号

     

     

       

      

      

      

      

       24C(25,2,tempstr);

      

      

      

      

      

      

      

      

      全部用户

      

      

      

      

       24C(25,2,tempstr);

      

       

      

      

      

      不能识别的命格式

      

      

    

    

    

    设定sm的特性参数,设定对门碰开关,红外等监控

    

    

     红外1监控且原先有红外告警的话,就产生告警恢复

    

     有红外功能的话且有红外告警的话,产生恢复

     

   

  

   

  

   

  

   

    

  

    

  

  

    红外1报警停止

   

    

  

    

    

     红外2监控且原先有红外告警的话,就产生告警恢复

  

   

  

   

  

   

  

   

   

   

   

  

  

    红外2报警停止

   

    

   

     7f;

    

    

     红外自动布防  CD2 布防标志位

     

//     

//      7f;//关闭语音

    

    

     红外自动撤防

     

//     

//      7f;//关闭语音

    

    

    

     写数据

    

     24C(2,1,tempstr); 

    

     

    

    

    

    设定对门锁继电器执行时间

    

     写数据

    

     24C(3,1,tempstr); 

    

    

    

    设置开门等待时间

    

     写数据

    

     24C(4,1,tempstr);

    

    

    设置红外告警确认时间

    

     写数据

    

     24C(5,1,tempstr); 

    

    

    

    设定异地报警延时时间

    

     写数据 

    

     24C(6,1,tempstr); 

    

    

    

    设置星期内的休息日

    

     写数据

    

    

    设置节假日

    

    

    

    

    

    

    

    设置一组节假日

    

    置远程开门

    

    

    

    

    

      //产生开门事件

    

   

    

   

   

    

    

     

    

   

    

   

    

   

    

     

    

     

    

     红外1报警停止

    

     

   

    

    

    

    

    

   

  

    

    

   

   

  

     红外2报警停止

    

     

   

    

    撤防

  

    

    

    设置感应卡合获取卡号方式

    

      //写数据

    

    红外开启和关闭方法

    

    

      //写数据

    

    设定sm内记录区的指针

    

    

    

    

    

       写数据

    

    设置按星期准进的时间段

    

    设定星期

    

    

    

    

    

    

    

      24C(27,7,usysparam.gjppara.Week); 

    

     

    

    

    

    设定时间段

    

    

     

     

      

     

    

      写数据

     24C(34,16,*usysparam.gjppara.Times); 

    

     

    

    

    

    设定节假日

    

    

     

     

      

     

    

      写数据

     24C(50,120,*usysparam.gjppara.JiJiaRi); 

    

     

    

    

    

    不能识别的命令格式

    

    

  

 

  

 

 

 

}

void ReadInf(){

  

   读取时间

   

   

   读取历史记录的柜桶参数信息

   

   

   

   

   

   

   

   

   

   

   

    

   读取历史记录

   

    

    

   

     没有信息

    

   

   

   读取一组工作日的准进时段

   

   

   都去一组非工作日准进时段

   

   

   读取用户数目

   

   

   

   

   读取用户资料

   

   读取监控状态 ,现在只对门状态做返回

  

    

  

   

   

   

   

    Remote_Read_SM_State[0] &=0xf7;

   开门状态D3

      

     

      

     

   

   

   

   红外1状态D2  D2=1 告警 D2=0 正常

   

  

   

   

   

   

    红外2状态D2  D4=1 告警 D4=0 正常

   

  

   

   

   

   

   

    开关量2  D5=1 告警  D5=0 正常

   

  

   

   

   

   

   

     开关量4  D6=1 告警  D6=0 正常

   

  

   

   

   

   

   

  

   

   

   

   读取功能特性

   

   

   读取每个星期内的固定休息日

   

   

   读取设定的休息日

   

   读取星期一到星期天的准进时间表

   

   读取星期

   

   

    

   

   

   

   读取时间段

   

   

              

    

    

   

   

   

   读取节假日

   

   

              

    

    

   

   

   

  

   

       

 

}

void CheckFrame(){

 

 

// 数据长度

  判断设备地址

  

   计算校验

   

    判断版本

      设备类型标识

    

      设置sm的权限确认

      

      

      设置sm的参数命令

      

      

      4A://读取sm的信息命令

      

      

     

       不能识别的命令格式

       

      

    

    

   

  

 

}

void info(){

   函数返回字符串在另一个字符串中第一次出现的位置。

 

 

  

   

   

  

  

 

 

 

 

 

  

 下载本文

显示全文
专题