非接触式IC卡停车场收费系统设计毕业设计论文_第1页
非接触式IC卡停车场收费系统设计毕业设计论文_第2页
非接触式IC卡停车场收费系统设计毕业设计论文_第3页
非接触式IC卡停车场收费系统设计毕业设计论文_第4页
非接触式IC卡停车场收费系统设计毕业设计论文_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)-PAGEIII-学号毕业设计(论文)题目:非接触式IC卡停车场收费系统设计独创声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本声明的法律后果由本人承担。

作者签名:二〇一〇年九月二十日

毕业设计(论文)使用授权声明本人完全了解滨州学院关于收集、保存、使用毕业设计(论文)的规定。本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。(保密论文在解密后遵守此规定)

作者签名:二〇一〇年九月二十日

摘要随着国民经济飞速发展,城市汽车数量剧增,停车难问题愈来愈凸现,在增加停车场数量的同时,提高停车场的智能化管理是解决这个问题的关键.本文提出的自动计时收费系统,是一种基于AT89C51单片机的非接触式IC卡的停车场收费系统.该系统采用比传统停车计费方式更优越的自动计时计费方式,系统硬件设备由入口设备和出口设备组成,论述了它们的硬件电路设计和软件设计,画出其软件设计的程序流程图.该系统操作简单,价格低廉,安装调试方便,很好地解决了停车场的收费问题.关键词:非接触式;IC卡;AT89C51单片机;自动收费停车ABSTRACTWiththerapiddevelopmentofnationaleconomy,thequantityofcarsincityincreases.Parkingproblemsbecomemoreandmoreevident.Inadditiontoincreasingthenumberofparkinglots,improvingofintelligentparkingmanagementisthekeytosolvethisproblem.Thearticlediscussesakindofautomatictimingandchargingsystem.It’sakindofchargingsystemthatbasedonAT89C51microcontrollerandnon-contactICcard.Thesystemusesakindofautomaticchargingmodewhichismoresuperiorthantradition.Thewholesystemiscomposedofentrance-machineandexit-machine.Wediscusstheirhardwarecircuitdesignandsoftwaredesignanddrawitssoftwaredesignprocessflowdiagram.Thesystemissimple,cheap,convenientinstallationanddebugging,nicelysolvingthechargecollectquestionofparkinglot.Keywords:Non-contact;ICcard;AT89C51microcontroller;Automaticchargingforparking目录摘要 IABSTRACT II1引言 11.1背景 11.2非接触式IC卡停车场收费系统的意义 22总体方案设计 32.1方案设计 32.2方案论证与选择 32.3工作原理 63系统硬件电路设计 73.1单片机及其外围电路设计 73.2键盘电路的设计 83.3显示电路的设计 93.4存储器电路的设计 103.5串行通信接口电路的设计 113.6时钟电路设计 123.7读写模块 134系统软件程序设计 174.1主程序 174.2键盘处理子程序 184.3液晶显示子程序 184.4串口通信子程序 194.5时钟子程序 194.6读写模块 205结论 22参考文献 23致谢 24附录 25-PAGE38-1引言1.1背景停车场收费系统在国外的发展最初可以追溯到上世纪60年代,以自动发票机的面世为标志。60年代初,德国、瑞士、荷兰的一些企业开始使用自动化停车场管理系统,在出入口安装发票机、自动的收费系统,最初的系统以打孔票为主。随着技术的提高,停车票的介质逐渐多元化,出现了包括远距离微波卡、条码票、晶片硬币、信用卡、手机、智能卡等。目前,国内部分停车场仍然停留在人工收费的管理水平,远远落后于西方国家。随着社会经济的发展和人民生活水平的日益提高,拥有私人车辆已不再是高不可及的梦想,目前已经有越来越多的家庭或个人拥有车辆,在出行变得方便的同时,停车却成了开车人要面临的棘手问题,因此解决停车难就成了所有开发商首先要考虑的一个问题。不论是新建住宅小区还是新建公共建筑都要考虑建设一定规模的停车场,相应的停车场收费管理系统就得到了越来越广泛的应用,不仅能帮助业主为其用户提供方便、快捷的服务,且还能获得更多的投资回报。当前,单片机被广泛地应用于人们生活的各个领域。单片机是一种集成电路芯片,采用超大规模技术把具有数字处理能力(如算术运算,逻辑运算,数据传送,中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统[1]。由于单片机体积小巧、功能强大、应用灵活、价格便宜,所以应用十分广泛。随着科学技术的不断发展,特别是IC卡技术的日新月异,接触式IC卡应用系统已从其辉煌顶峰逐步走了下来,取而代之是非接触式IC卡应用系统。非接触式IC卡(又称射频卡)是近几年发展起来的新技术,它成功地结合了射频识别技术和IC卡技术,解决了卡中无源和免接触读写这一难题,是电子领域的一大突破。非接触式IC卡由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。卡片在一定距离范围(通常为5—10mm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。非接触式IC卡应用产品与接触式IC卡比较具有防水、防尘、无外露读写器件、无机械磨损、防伪性能强、使用寿命长等诸多优势[2]。采用非接触式储值IC卡收费系统,不但极大地减轻结算的难度,统计及时准确,而且有外形美观、携带方便、可重复充值和能记名挂失的优点,是消费管理现代化的标志。1.2非接触式IC卡停车场收费系统的意义非接触式IC卡停车场收费管理系统是一种高效快捷、公正准确及科学经济的停车场管理手段,是停车场对车辆实行动态和静态管理的综合;从用户的角度看,其服务高效,收费透明度高,准确无误;从管理者的角度看,其易于操作维护,自动化程度高,大大减轻管理者的劳动强度,从根本上杜绝票款流失的现象,对加速解决我国目前面临的停车难问题有着非常积极的意义。文中论述了以非接触式IC卡为收费介质的停车场管理系统软件的设计。该系统采用了目前已经非常成熟的非接触式IC卡读写技术、计算机控制技术,能够大幅度提高停车场车辆通行的流畅性,减少车辆停滞时间,简化驾驶人员操作过程,从而实现停车场进出车辆的计算机化智能管理,有效降低停车场管理系统的运营成本和管理人员劳动强度。本文设计的非接触式IC卡停车场收费系统,由单片机、读卡器以及时钟显示等模块组成。通过本次设计,培养了我分析问题和解决问题的能力,同时也提高了我文献检索和自学能力。2总体方案设计2.1方案设计整个系统硬件设备由停车场入口设备、停车场出口设备两部分组成。入口设备和出口设备位于停车场入口和出口处。在整个系统中,非接触IC卡是两部分硬件设备相互联系的桥梁,非接触IC卡的读写程序设计是系统实现的关键。该总体电路设计含有七个部分电路:1、单片机及外围电路,2、键盘电路,3、显示电路,4、存储器电路,5、串口通信电路,6、非接触式IC卡,7、读写模块。本设计以ATMEL公司的AT89C51单片机作为微控制器,采用MF-RC500读卡器,因为需要输入的数字量比较多,所以键盘采用4X4矩阵键盘,以DS1302作为系统时钟,以AT24C02作为不掉电存储器,采用LCD显示,并以RS232接口和计算机通信,组成一套功能齐全的非接触IC卡读写系统。当IC卡在天线区域经过时,单片机自动需求对IC卡进行读写,再把读/写卡的时间一起存到存储器中,计算机可以通过串口把相关读/写卡信息读到计算机上。系统电路组成框图,如图2-1所示。键盘键盘电路存储器电路串口通信电路电路显示电路单片机非接触式IC卡读写模块图2-1系统组成框图2.2方案论证与选择1、控制器的选择方案一、用可编程逻辑器件设计。设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但从成本上来讲,用可编程逻辑器件来设计没有什么优势。方案二:用单片机设计。单片机有丰富的中断源,方便本实验的设计。它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些调用。I/O口功能也比较强大,方便使用。成本也相对低一些,虽然在控制与显示的结合上有些复杂,但和前者相比用单片机设计还是比较可行的。2、键盘模块的选择方案一:采用直接式独立按键操作。这种方案的操作过程,就是直接从单片机I/O口引出通上拉电阻,接一按键,当按键按下时,单片机该端口为“0”,单片机通过对此端口逻辑“0”判断,来完成按键的识别,达到数据的输入,功能的实现。从这一过程可知,完成任务需要单片机很多I/O口,花费了很多CPU资源,此种方案不可取。方案二:矩阵键盘。矩阵键盘,这里采用4X4矩阵键盘,一共有16组情况,实现的方法也是利用单片机的I/O口,4X4正好用到了单片机一个端口。采用这种方案既节约资源又方便,而且能够满足本设计的需要。综上所述,在本设计中我们采用方案二。3、显示电路模块的选择显示电路的主要任务是反应出操作结果和相关停车时间与价格的信息。根据此,有四种方案可完成这一工作。方案一:可用七段共阳极LED数码显示,将停车时间、金额等显示出来。采用动态扫描显示方式,将多个LED数码管的段选线并联在一起,由一个8位I/O口控制,而各位的共阳极或共阴极分别由相应的I/O口线控制,实现各位的分时选通。当然,其发光数码管价格较便宜,可节约成本,但在停车场中应用,所需数码管较多,操作麻烦,并且不直观,更无商业优势可言。方案二:用LED数码管矩阵方式显示。这种方案的原理和方案一都差不多,用16X16点阵排列,将字型分成上下两个半部,上下半部皆为16列,每列用一个字节表示(8个点),因此,每个字需要32个字节来表示。当然这样就可以显示汉字,但是和单片机相连比较复杂,本系统要许多块这样的16X16点阵,同时这种LED点阵方式显示,造价较高,作为本电路,也是不可取。方案三:采用带中文字库的LCD液晶显示器来完成显示,这种显示器作为本系统设计,固然最好,但考虑到系统成本的问题,带中文字库的LCD一般都比较贵,采用这种方案,势必会增加设计成本。方案四:采用两行字符型显示器[3]。这种显示器,用英文显示相关信息,价格适中,操作也方便,作为本设计是最合适不过。因此,结合上述方案,在本设计中,我们采用两行字符型1602显示器。4、存储器电路模块的选择存储器的作用在本设计中主要起到用户信息的存储,和最后车辆的出入信息的存贮。完成这一项工作方案也是多种多样的,下面将一一介绍。方案一:用紫外线存储器ROM,这个操作不太方便,由于本系统中的数据是不断变化的,因此这种方案不可取。方案二:用海量存贮器来完成,掉电后信息不会掉失。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统中编程、擦除等特点。但是,同时和本系统中的单片机不容易实现接口,数据线和地址较复杂,价格也比较贵。方案三:选用美国Microchip公司生产的AT24C02芯片,体积小巧并且采用特殊的工作时序,绝不会误写成功,具有高度的可靠性。其掉电可保存数据,用I2C总线进行操作,因此需用的单片机端口较少,占用CPU根据上述三种方案,我们兼顾容量、价格和可操作性,选用第三种方案。5、IC卡的选择目前经常接触到的IC卡有两种:接触式的和非接触式的IC卡。方案一:接触式的IC卡。它通过机械触点从读写器获取能量和交换数据。目前在社会上常见的是接触式IC卡。它具有保密功能强,存储量大,可实现一卡多用。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的日槽才能完成数据交换,如此,在公交、考勤等需要频繁读写卡的场合就不很方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良[4]。方案二:非接触式IC卡。非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。以下叙述非接触式IC卡的主要特点:可靠性高、使用寿命长、维护成本低。非接触式IC卡与读写器之间无机械接触,避免了由于接触读写而产生的各种故障。此外,非接触式卡表面无裸露芯片,无须担心静电击穿,芯片脱落,弯曲损坏等问题,适应各种恶劣环境,大大增加卡片的使用寿命。高抗扰能力、防冲突。非接触式卡中有快速防冲突机制,能防止卡片之间出现数据干扰,读写器可以同时处理多张卡,提高了应用的并行性,无形中提高系统工作速度。加密性能好、安全可靠。非接触式卡的每张卡都具有全球唯一的序列号,制造厂家在产品出厂前已将此序列号固化,不可再更改,可为第一用户设置卡与读写设备相对应的唯一的密钥,卡与读写器之间采用双向验证机制,同时IC卡也验证读写器的合法性[5]。应用极广泛。接触式卡的存储器结构特点使它可以一卡多用,可应用于不同的场合、不同的系统。用户可根据不同的应用设定不同的密码和访问条件。同一张卡片经个性化处理后,既可作为工作证、巡更卡、胸卡、门禁钥匙卡,也可作为企业内部食堂、咖啡厅和其它消费用的电子钱包,并可进行企业内部医疗管理、停车管理等诸多功能,真正实现一卡通管理。目前我国引进的射频IC卡主要有PHILIPS公司的Mifare和ATMEL公司的Temic卡。根据课题要求,本系统选择非接触式IC卡。6、时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,采用此种方案虽然减少芯片的使用,节约成本,用起来比较方便,但其缺点是精度不高,设置时间间隔不当、CPU掉电等都会影响时钟的正常运行。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA[6]。会增加硬件开支,但是精度高。本设计对时间精度要求较高,刷卡时要记录刷卡的时间,在此选用体积小、接口简单的实时时钟芯片DS1302。2.3工作原理本系统的工作原理是利用非接触式IC卡,在车辆进入和外出时记录时间差值,计算出停车费用,费用计算公式:(外出时间—进入时间)×价格=应收费用。在入口处,对于持卡的车辆,需将卡插入读写机,确认有效后,才允许进入,并且记录进入时的时间。在出口处,持卡的车辆,将卡插入读写器,出口管理处同样启动计价程序,同时在显示屏上给予显示本次停车的时间,停车的收费标准,以及本次应缴纳的费用,系统自动扣减停车费用,并予以放行[7]。系统各模块的作用如下:非接触式IC卡:相当于门的钥匙,它是通过磁力线圈产生感应电流向读卡器发射卡内信息,完成读卡操作的。读卡器:它与单片机相连,通过单片机对读出的卡内信息进行处理,只要有非接触式IC卡进入读卡器射频能量范围,读卡器便通过射频信号与IC卡通信,读取卡中数据,并将其送给单片机处理。DS1302:记录进出停车场的时间,由此记录出停车的时间。1602:对时间和金额进行显示。存储器芯片:用以存储消费金额、消费时间等用户信息。3系统硬件电路设计本系统由七部分组成:单片机、键盘处理电路、显示器电路、存储器电路、读卡器和时钟电路,并通过RS232接口与中心管理计算机相连接。下面将讨论这几部分电路的设计过程。3.1单片机及其外围电路设计微处理电路采用ATMEL公司的AT89C51单片机,功能齐全、价格便宜、可靠性高、使用普遍。该单片机是ATMEL公司8位单片机系列产品之一,是一种40引脚双列直插式芯片。AT89C51有4KFLASH,128字节RAM,2个16位定时器/计数器,一个5向量2级中断结构,32条I/O引线,一个全双工串行口,一个片内震荡器和时钟电路。此外,AT89C51是用可降到0频率的静态逻辑操作设计的,并支持两种可选的软件节能工作方式。空闲方式停止CPU工作,但允许RAM、串行口、定时器/计数器、和中断系统继续工作。掉电方式保持RAM内容,但振荡器停止工作,并禁止所有其他部件的工作直到下一个硬件复位。选用它作为核心控制新片,可使电路极大地简化,而且程序的编写及固化也相当灵活、方便[8]。本系统设计电路图3-1所示。图3-1单片机电路图如图3-1所示,P0口为LCD的八根数据总线,P1.0、P1.1、P1.2三根线为LCD的读写控制线与使能端。P1.5、P3.6为存贮器的两根总线,主要用于数据的读取与存贮。P1口为矩阵键盘列线与行线的接口,实现4×4键盘,完成相关的工能操作。P3.0、P3.1口接串行端口,分别作串行数据的接收端和发送端。XTAL1和XTAL2口接外部晶体振荡器,保证单片机内部各部分有序的工作。RST与Vss之间连接一个下拉电阻,与Vcc之间连接一个电容,目的是为了保证可靠的复位。3.2键盘电路的设计这里采用的是矩阵键盘,如图3-2所示:图3-2矩阵键盘实物图矩阵键盘的实现可采用中断的办法,也可以采用查询的方法。4×4的意思即为:4根列线,4根行线,列线通上拉电阻接到电源上,因此若无按键按下时,各列线均为高电平。当行线分别输出低电平时,有按键按下,相应的列线上会出现低电平。根据此原理,CPU对整个键盘进行扫描,即CPU不断轮流对行线置低电平,再检查列线输入状态,确定按键情况。键盘电路如图3-3所示:图3-3矩阵键盘图键盘接口电路用P1口接成4×4结构,共16个键。功能键有查询和通信两种。由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS232串行接口与PC机通信,用以回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,便于停车场工作人员及时掌握情况。3.3显示电路的设计本设计显示电路采用1602液晶显示模块芯片。该芯片可显示16×2个字符,比以前的七段数码管LED显示器在显示字符的数量上要多得多。另外,由于l602芯片编程比较简单,界面直观,因此更加易于使用者操作和观测。下面介绍1602及其使用。1602采用标准的16脚接口,如表3-1所示。其中VDD接5V正电源,VSS为地电源,VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。D0-D7为8位双向数据线。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。表3-1LCD1602引脚说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4RS数据/命令选择端12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极本设计电路如图3-4所示,有八根数据线与单片机的P0口相连。图3-4LCD1602电路连接图3.4存储器电路的设计在此读写系统中,单片机必须扩展片外E²PROM用来存储关键信息。工程上常用的E²PROM的28系列的芯片具有编程简单、使用方便的特点,但是在此读写系统中其容量比实际要求的要大,若选用此系列的芯片不但能浪费绝大部分的存储单元,而且占用外部的存储空间,增加了译码线路,并且增加了线路板的面积。因此,本系统选用美国Microchip公司生产的AT24C02芯片,不但能最大限度地利用其容量,且不用地址译码,不占用外存空间。该芯片存储容量为256字节,采用低功耗CMOS工艺制造,可以在无电源状态下长期可靠存储系统内重要数据,工作寿命可达106次。该芯片还采用I2C串行总线协议与单片机通信,在软件操作时,就得用I2C总线方式进行读写。I2C总线是由PHILIPS公司发明的一种高性能芯片间串行同步传输总线。与SPI、MicroWire接口不同,它仅仅需要两根信号线(串行数据线SDA和串行时钟线SCL),就实现了完善的双工同步数据传送,能够极其方便地构成多机系统和外围器件扩展系统。当IC卡插入系统时,卡内的关键数据将存储在AT24C02芯片中,从而实现了重要数据的备份,提高了读写器的可靠性与稳定性。AT24C02芯片还具有体积小巧的特点,并且采用特殊的工作时序,绝不会误写成功,具有高度的可靠性。如图3-5所示为AT24C02的管脚图。图3-5AT24C02管脚图SCL:串行时钟输入线。数据发送或接收的时钟从该引脚输入。SDA:串行数据/地址线。用于传送地址和发送与接收数据,为双向传输。A0、A1、A2:器件地址输入端。WP:写保护端。WP=1为写保护,只能读出不能写入,WP=0时器件允许进行正常的读写操作。存储器连接电路如图3-6:图3-6存储器电路图3.5串行通信接口电路的设计本设计采用RS232标准来实现读卡器和上位机之间的通信,能实现RS232通信协议的芯片很多,其中MAXIM公司生产的MAX232是一款比较优良的RS232通信芯片[9]。选取它的主要依据在于:单5V电源供电,与读卡器里其它芯片的工作电压相同,符合所有EIA/232E标准,多路输入输出。MAX232其引脚功能说明如表3-2所示。表3-2MAX232引脚说明引脚名引脚说明引脚名引脚说明T2outRS232输出R1RS232输入R2RS232输入T1outRS232输出R2outTTL/CMOS输出GND地T2TTL/CMOS输入VCC电源T1TTL/CMOS输入R1outTTL/CMOS输出在硬件电路连接上采用三线制(RXD、TXD、GND)软握手的零MODEM方式,即将PC机和单片机的发送数据线(TXD)与接收数据(RXD)交叉连接,二者的地线(GND)直接相连,而其它信号线、如握手信号均不用,而采用软件握手,这样既可以实现预定的任务又可以简化电路设计、节约成本。MAX232的电路连接如图3-7所示。图3-7串行通信口连接图如图所示,MAX232中电平转换芯片,将差分电平,转换成单片机等可识别的TTL电平,电路中RXD、TXD两根线分别和单片机相连P3口的串行通讯口相连,TXD为数据发送端口,主要向PC等设备发送信号。RXD为数据接收端,单片机通过这个端口读取PC机等送来的信号。图右边有一9针串行通信口,主要和PC机相连。3.6时钟电路设计本设计的实时时钟电路用DS1302,其引脚图如图3-8所示,它的工作电压一般为2.5-5.5V,它的主要特点是采用串行数据传输,同时增加了主电源/后背电源双电源引脚,可以为掉电保护电源提供可编程的充电功能。采用32kHz的晶振,电容一般用10PF就可以起到稳定振荡频率和快速起振的作用了。图3-8DS1302引脚图DS1302是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302芯片连接图如下所示。图3-9时钟电路3.7读写模块系统用PHILIPS公司的MF-RC500芯片。MF-RC500是与射频IC卡实现无线通信的核心部件,也是读写器读写卡的关键接口芯片,该芯片为目前用于13.56MHz频段非接触通信的主流读卡IC。MF-RC500芯片采用先进的调制和解调技术,支持13.56MHz频段所有被动非接触式通信方式和协议,并支持ISO14443A中所有的层[10]。其内部的发送器部分不需要增加有源电路就能够直接驱动近操作距离的天线(100mm)。接收器部分提供一个坚固而有效的解调和解码电路,用于ISO14443A兼容的应答器信号。数字部分处理ISO14443A帧和错误检测(奇偶&CRC)。此外,它还支持快速CRYPTO1加密算法用于验证MIFARE系列产品。方便的并行接口可直接连接到任何8位微处理器,这样给读卡器/终端的设计提供了极大的方便。MF-RC500内部包括并行微控制器接口、双向FIFO缓冲区、中断、数据处理单元、状态控制单元、安全和密码控制单元、模拟电路接口及天线接口。MF-RC500外部接口包括数据总线、地址总线、控制总线、电源等。MF-RC500的并行微控制器接口自动检测连接的8位并行接口的类型。它包含了一个双向FIFO缓冲区和一个可配置的中断输出,这样就为连接各种MCU提供了很大的灵活性,即使使用非常低成本的器件也能满足高速非接触式通信的要求。数据处理部分执行数据的并行-串行转换;状态和控制部分允许对器件进行配置以使性能调节到最佳状态。模拟电路包含一个具有非常低阻抗桥驱动器输出的发送部分,这使得最大操作距离可达100mm,接收器可以检测到非常弱的应答信号。MF-RC500管脚如图3-10所示。图3-10MF-RC500管脚图天线电路:为了同非接触式智能卡通信,读卡器内必须有能发射和接收射频信号的天线。天线用于产生磁通量,而磁通量用于向应答器提供电源并在阅读器和应答器之间传送信息[11]。由于MF-RC500是低功耗设计,因此卡和天线之间的耦合系数必须符合一定的值,卡和天线之间的耦合系数不能低于0.3。天线一般设计为三圈,可以设计为圆形或者方形天线。天线的直径必须介于0.5-1.5mm之间。天线电路图如图3-11所示。EMC电路:射频识别系统以13.56MHz的操作频率为基础,该频率由石英晶振产生,与此同时还会产生高阶谐波。为了符合内部电磁兼容性规则,13.56MHz的三次、五次及五次以上的高阶谐波必须适当的抑止,需配置一低通滤波器。见图3-12所示。图3-11天线电路图接收电路:MFRC500的内部接收单元采用新的接收概念,它使用卡回应的子载波引导调制生成的双边带宽。使用内部产生的VMID电位作为RX管脚的输入电位。为减少扰动,需用电容将VMID接地。读卡器的输入单元需要在RX和VMID管脚间增加电压驱动。此外,应当在天线线圈和电压驱动之间使用串联电容[12]。接收电路的电路原理图如图3-12所示。图3-12EMC及接收电路MF-RC500的电路连接图如图3-13所示,图中单片机AT89C51作为控制核心,主要完成数据采集、处理、存储及控制电路工作;MF-RC500根据系统的需要,可以采用查询方式或者中断方式对MF-RC500进行操作。由图可以看出,本系统采用中断(INT0)工作模式,即MCU利用MF-RC500提供中断信息对其进行控制。图3-13读卡器电路图4系统软件程序设计本设计程序共分成七个部分:主程序、键盘处理程序、LCD显示程序、存储器存储程序、时钟程序、串口和PC机通信程序以及读写器读写模块。4.1主程序当插上电源后,单片机先对系统进行一系列的初始化,并做出相应的处理。本设计的主程序包括进停车场和出停车场两个部分,当进场处有卡靠近时,读卡器读出IC卡里面的用户信息,经过时钟芯片得出时间,随后将所有的数据通过串口送往计算机。出场时,读卡器同样读出信息,通过从计算机调出用户数据,再由停车时间和单价,得出停车费用,最后再将所有数据存储。其流程图分别如图4-1和图4-2所示:开始读卡器读卡验证开始读卡器读卡验证调用用户信息计算停车时间和费用显示时间和费用将信息存储至PC机结束读取当前时间YN结束开始初始化显示数据和时间读取时间和卡中数据判断是否有卡信息存储图4-1进场流程图图4-2出场流程图4.2键盘处理子程序键盘处理程序,该模块的主要作用就是通过用户的按键识别,由此判断当前的系统任务,通过前面的硬件分析,采用4×4矩阵,一共十六组状态。一方面的是一系列的功能操作,另一方面是数字的输入输出。经过键盘扫描程序扫描是否有按键按下,如若有,再判断是数字键还是功能键,并做出相应的处理,若是数字键,则确定具体数字,并进行显示、存储等处理,若是功能键,则确定具体功能,执行此功能。如若没有键按下,则返回继续检查是否有按键按下。键盘处理程序流程图如图4-3所示。确定数字确定数字显示、存储等处理判断是功能键?还是数字键?检测按键?确定功能执行并处理结束开始NNYY功能功能数字数字图4-3键盘处理程序流程图4.3液晶显示子程序LCD的读写操作、屏幕和光标的操作都是通过指令编程来实现的。1602液晶是字符型液晶,它的内部自带字符库,它可以写两行的字符,同时每行可以写40个字符,本系统液晶处理程序,完成信息的显示,包括车辆号码,单价,时间,总计金额等这些资料。流程图如图4-4所示,其中包括检测忙信息,一系列的写命令和写数据,随后设置光标、闪烁设置等,最后清显示。4.4串口通信子程序RS232串口通信协议是我们熟悉和常用的通信协议,其通信协议的设计思想是基于帧传输方式,即在向串口发送命令信号、应答信号及数据信号时是按照帧的格式发送的。为了使数据快速可靠地传输,将每一帧数据对应一个命令帧,传输数据即执行命令。串口通信程序,将完成交易的数量,以及总金额,出入的车辆告知PC机等完成汇总。系统先对RS232进行初始化,然后判断是发送命令还是接收命令,如若是接收命令,则接收数据,反之,则发送数据,其流程图如图4-5所示。检测忙信号检测忙信号写命令写数据显示设置点阵开始显示器、光标、闪烁设置光标移动设置清显示结束发送发送数据发送接收结束接收数据开始初始化判断是否是发送或接收命令图4-4LCD显示流程图图4-5串口通信流程图4.5时钟子程序DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,具有闰年补偿功能,工作电压为2.5V~5.5V,而且精度高。它采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。本系统的时钟模块,将完成停车场停车时间的计算,综合出入场的时间与出场的时间,计算出停车时间,再乘以单价,就是本次停车场应该收取的金额。时钟模块的流程图如下所示。NNY显示数据数据读完否地址增加延时一段时间将该地址的数据读出复位产生一个高电平写1302地址Y开始变量初始化使DS1302不具备写保护向该地址写数据写1302地址延时一段时间地址增加数据写完否复位产生一个高电平N图4-6时钟流程图4.6读写模块MF-RC500复位操作。初始化MF-RC500内部寄存器。判断是否有碰撞,若有,则执行反碰撞操作。对非接触式IC卡进行操作,在经过请求等一系列操作之后就可以具体地对卡片进行相应的读、写、增值、减值、存储和传送等操作。读/写卡程序流程图如图4-7所示[13]。无无否是开机复位初始化MF-RC500请求操作有碰撞?反碰撞操作选择卡通过验证?卡的数据操作有图4-7读/写卡程序流程图5结论本文论述了以非接触式IC卡为收费介质的停车场管理系统软件的设计,该系统采用了目前已经非常成熟的非接触式IC卡读写技术、计算机控制技术,能够大幅度提高停车场车辆通行的流畅性,减少车辆停滞时间,简化驾驶人员操作过程,从而进行停车场进出车辆的计算机化智能管理,有效降低停车场管理系统的运营成本和管理人员劳动强度。从用户的角度看,其服务高效,收费透明度高,准确无误;从管理者的角度看,其易于操作维护,自动化程度高,大大减轻管理者的劳动强度,从根本上杜绝票款流失的现象,对加速解决我国目前面临的停车难问题有着非常积极的意义。本文所设计的非接触式IC卡停车场收费系统,能够满足一个停车场收费所能需要的基本功能,其操作简单,可实现性强。本设计完成了七个部分电路的设计:1、单片机及外围电路,2、键盘电路,3、显示电路,4、存储器电路,5、串口通信电路,6、读写模块,7、时钟模块。以ATMEL公司的AT89C51单片机作为微控制器,采用MFRC500读写模块,键盘采用4×4矩阵键盘,以DS1302作为系统时钟,以AT24C02作为不掉电存储器,采用LCD显示,并以RS232接口和计算机通信,组成一套功能齐全的非接触IC卡读写系统。当IC卡在天线区域经过时,单片机自动需求对IC卡进行读写,再把读/写卡的时间一起存到存储器中,计算机可以通过串口把相关读/写卡信息读到计算机上。本设计从原理上进行设计计算,画出了程序流程图,写出了程序代码,并绘制了相应的电路图。但由于作者的经验限制,在设计的过程中,走了不少弯路,过程可谓相当纠结痛苦,所幸,经过多次努力以及同学老师的帮助,终于使得设计初级雏形。但由于时间和个人能力问题,本设计还存在明显不足和可待优化功能,需要进行多方面的后续开发,使其功能更加完善:1、可添加“车类型”判断,由此区分是属于大型车,还是小型车,因为车型不同占用的停车空间不同,所以收费应该也有所不同。2、添加“不收费时间”判断:有一些停车场可能希望如果车主只是停了几分钟,就不想收费的话,可以进行相关设置,如果想取消此功能可以去掉。3、可以添加语言提示,这样系统就更实用话一些。4、车位满提示灯,如若停车场车位已满,则提示,这样效果更直观。本设计能够完成停车场收费系统的基本功能,但若将以上的几个功能引进,则效果非常可观。本设计还可以简单修改后以应用于其他电子消费场合,如食堂售饭、公交、图书馆等场合,还可以用于公司的门禁考勤系统,具有很好的市场推广价值。参考文献[1]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1995.[2]沈宇超.射频识别技术及其发展现状[J].电子技术应用,2007(1):8-9.[3]李宏,张家田.液晶显示器件应用技术[M].北京:机械工业出版社,2003.[4]王卓人,邓晋钧,刘宗祥.IC卡的技术与应用.北京:电子工业出版社,1999:49-52.[5]刘铮.非接触式IC卡射频识别技术[J].信息技术,2006,3(4):8-12.[6]范久臣.实时时钟芯片在单片机系统中的应用[J].沈阳教育学院学报,2005,7(4):132-134.[7]张文.自动售货机IC卡收费模块的设计与应用[J]微计算机信息,2006,2-2:201-203.[8]张洪润,蓝清华.单片机应用技术教程[M].北京:清华大学出版社,1997.[9]李战明.基于串行接口芯片的单片机智能控制器的设计与实现.电子技术应用,1999,(12):66-67.[10]张俊杰,乔谊正.非接触式IC卡读写模块的应用开发.世界电子元器件,2004,2:44-46.[11]MFRC500HighlyIntegratedISO14443AReaderICDesignDataSheet.PhilipsSemiconductor,2002.[12]MicoreReaderICfamilyDirectlyMatchedAntennaDesign.Philipssemiconductors,2002.[13]李淑琴,范蟠果.射频识别非接触式IC卡读卡器的设计[J].计算机测量与控制,2007(3):378-380.[14]谭浩强.C程序设计[M].北京:清华大学出版社,2003.[15]张齐,杜群贵.单片机应用系统设计技术--基于C语言编程[M].北京:电子工业出版社,2004.致谢首先我要感谢我的导师万忠民老师,老师的教诲是我一生中最宝贵的财富。本文就是在万老师的悉心指导下完成的,从论文的选题、项目的研究开发到论文的撰写和修改,无不渗透着老师的心血和他对学生的一片盛情,尤其是万老师独特的培养方式和开放的现代思维,令学生不仅在学术上紧跟世界的前沿热点,也开阔了视野,在思想上得到了升华,同时万老师为人诚恳、举重若轻的人格魅力和言传身教、诲人不倦的授业精神使我深深佩服并获益匪浅,万老师给予了我们一个良好的成才空间,在此,我谨向辛勤培育我们的万老师致以崇高的敬意和诚挚的感谢!还要感谢那些曾经给我帮助、为我授课、予我知识、助我成才的老师们,他们在实验条件的建立、前沿知识的传授以及人生道路问题的探讨上同样使我收益颇多,谢谢你们的帮助、关心和鼓励!最后还要感谢在百忙之中评阅我论文的各位老师,谢谢!在本论文的写作和相关研究工作中,我同班同学都给予了我很多热心的帮助和热情的鼓励,使我顺利走过了这段充实的生活。我要向他们中的每一个人表示由衷的感谢,我会永远记住这段美好时光。在我完成这次毕业设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。但是,在实际的编程以及调试程序过程中,我发现自己所应该学的太多太多。光靠自己在书本上所学过的这点知识是远远不够的,我由此真正地认识到了工作就是学习的道理。再次向所有帮助过我的人表示衷心的感谢!谢谢你们!

附录附录1:总电路图附录2部分程序清单#include<reg52.h>#include<intrins.h>#include<math.h>sbitE=P1^2; //1602使能引脚sbitRW=P1^1; //1602读写引脚 sbitRS=P1^0; //1602数据/命令选择引脚sbitACC0=ACC^0;sbitACC7=ACC^7;sbitP3_2=P3^2;sbitP3_5=P3^4;sbitT_CLK=P1^6;/*实时时钟时钟线引脚*/sbitT_IO=P3^5;/*实时时钟数据线引脚*/sbitT_RST=P1^7;/*实时时钟复位线引脚*/sbitscl=P1^5;//24c02SCLsbitsda=P3^6;//24c02SDAucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uintwrite;//写标志位ucharsec,min,hour,day,month,year;ucharsec1,min1,hour1,day1,month1,year1;ucharpay;//总费用#defineprice0.5;//定义停车单价,按分钟 /********************************************************************/读卡器主程序*********************************************************************#define__SRC#include"main.h"#undef__SRC#include<string.h>#include<m500a.h>#include<p89c51rx.h>#defineMIS_CHK_OK(0)#defineMIS_CHK_FAILED(-1)#defineMIS_CHK_COMPERR(-2)//Function:mifs_request#defineIDLE0x00#defineALL0x01sbitRC500RST =P3^5;sbitRC500_CS =P2^7;//ReleaseNumberoftheFirmwareucharcodeSW_Rel[]="\n\rMFRC500V1.022.06.02\n\r";//SerialNumberoftheMFRC500ucharSnr_RC500[4];ucharSnr1_RC500[4];staticuintCrc;//LocalPrototypesvoidinit(void);codeNkey_a[6]={0xA0,0xA1,0xA2,0xA3,0xA4,0xA5};codeNkey_b[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};/********************************************************************voidread_rc500(void){unsignedcharcounter,counter2;unsignedcharmfout=2;//readbuf[16];unsignedchartt1[2];unsignedcharstatus1;unsignedcharcardserialno[4];unsignedchar*sak1;unsignedcharblockdata[16];init();M500PcdConfig(); //InitialisetheRC500 //mustbecallintheinitialisationPcdReadE2(8,4,Snr_RC500);//ReadouttheMFRC500serialnumberandstoreitM500PcdMfOutSelect(mfout);for(counter=0;counter<20;counter++){ status1=M500PiccRequest(PICC_REQALL,tt1); if(status1==MI_OK) status1=M500PiccAnticoll(0,cardserialno); if(status1==MI_OK) status1=M500PiccSelect(cardserialno,sak1); if(status1==MI_OK) status1=M500PiccAuth(PICC_AUTHENT1A,cardserialno,1,4); if(status1==MI_OK) status1=M500PiccRead(4,blockdata); for(counter2=0;counter2<16;counter2++) blockdata[counter2]=counter; if(status1==MI_OK) status1=M500PiccWrite(4,blockdata);}}/********************************************************************void init(void){RC500RST=FALSE;RC500_CS=TRUE; //EnabletheCSforRC500CmdReceived=FALSE;CmdValid=FALSE;Quit=FALSE;LLfReady=TRUE;SendReady=TRUE;Idle=TRUE;RepCnt=0;RecvState=RECV_STX;EnableTransferCmd=FALSE;CheckByteCnt=BCC_CHECKBYTECNT;#ifdefAUTODELAYDelayRate=0;DelayRateLocked=TRUE;#endifPCON=0x80; //SMOD=1;SCON=0x50; //Mode1,8-bitUART,enablereceiptionAutoBaud=TRUE;TMOD=0x20; //Timer1,mode2,8-bitautoreload, //Timer0,mode0,13-bitcounterCapt_L=0;Capt_H=0;LED=OFF;delay_10ms(50);LED=ON;IT0=1; //Configext0asedgetriggerforRC500EX0=1; //Enableext0interruptforRC500EA=TRUE; //Enableallinterrupts}#ifdefNOP_DELAY/********************************************************************void delay_50us_NOP(void){uchari;for(i=0;i<81;i++)_nop_(); }#endif/********************************************************************void delay_8us_NOP(void){uchari;for(i=0;i<14;i++)_nop_(); }#pragmaaregs/********************************************************************uchar xtoa_h(uchar_byte){ucharnibble=_byte>>4;return((nibble>9)?nibble+'A'-10:nibble+'0');}/********************************************************************uchar xtoa_l(uchar_byte){ucharnibble=_byte&0x0F;return((nibble>9)?nibble+'A'-10:nibble+'0');}void isr_timer0(void)interrupt1using2{if(Timer0Cnt){ --Timer0Cnt;}else{ STOP_T0();#ifdefAUTODELAY if(DelayRate<MAXDELAYRATE&&CmdCnt>0) { DelayRate++; DelayRateLocked=FALSE; }#endif RecvState=RECV_STX; if(!SendReady&&LLfReady) { if(RepCnt<MAXREPCNT) { RepCnt++; CALL_isr_UART(); } else { RepCnt=0; Quit=FALSE; SendReady=TRUE; } }}}/*********************************************************************功能:串口初始化,晶振11.0592,波特率9600,使能了串口中断***********************************************************************/voidCom_Init(void){TMOD=0x20;//定时器工作在定时器1的方式2PCON=0x00;//不倍频SCON=0x50; //串口工作在方式1,并且启动串行接收 TH1=0xFd;//设置波特率9600TL1=0xFd;TR1=1; //启动定时器1 ES=1; //开串口中断 EA=1; //开总中断 }/*********************************************************************功能:串口接收子函数***********************************************************************/voidCom_Int(void)interrupt4{ EA=0; if(RI==1)//当硬件接收到一个数据时,RI会置位 { LED_Buffer[com_dat]=SBUF; //把从串口读出的数存到数组 RI=0; com_dat++; if(com_dat==16)com_dat=0; //当com_dat=16时,清0,防止数组溢出 } EA=1;}/*********************************************************************功能:串口发送子函数***********************************************************************/voidSendData(uchar*q)interrupt4{uchari;for(i=0;*q!='\0';i++){SBUF=*q;while(!TI);TI=0;q++;}q=0;}/*********************************************************************名称:delay1()*功能:短暂延时*输入:x*输出:无***********************************************************************/voiddelay1(ucharx){ uinti; for(i=0;i<x;i++) ;}/*********************************************************************名称:flash()*功能:延时,时间为2个NOP,大概为2US*输入:无*输出:无***********************************************************************/voidflash(void){ _nop_(); _nop_();}/*********************************************************************名称:x24c02_init()*功能:24c02初始化子程序*输入:无*输出:无***********************************************************************/voidx24c02_init(void){ scl=1; flash(); sda=1; flash();}/*********************************************************************名称:start(void)*功能:启动I2C*输入:无*输出:无***********************************************************************/voidstart(void){ sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}/*********************************************************************名称:stop()*功能:停止I2C*输入:无*输出:无***********************************************************************/voidstop(){ sda=0; flash(); scl=1; flash(); sda=1; flash();}/*********************************************************************名称:writex()*功能:写一个字节*输入:j(需要写入的值)*输出:无***********************************************************************/voidwritex(ucharj){ uchari,temp; temp=j; for(i=0;i<8;i++) { temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash(); } scl=0; flash(); sda=1; flash();}/*********************************************************************名称:readx()*功能:读一个字节*输入:无*输出:读出的值***********************************************************************/ucharreadx(void){ uchari,j,k=0; scl=0; flash(); sda=1; for(i=0;i<8;i++) { flash(); scl=1; flash(); if(sda==1) { j=1; } elsej=0; k=(k<<1)|j; scl=0; } flash(); return(k);}/*********************************************************************名称:clock()*功能:I2C*输入:无*输出:无***********************************************************************/voidclock(void){ uchari=0; scl=1; flash(); while((sda==1)&&(i<255)) { i++; } scl=0; flash();}/*********************************************************************名称:x24c02_read()*功能:从24c02中读出值*输入:address(要在这个地址读取值)*输出:从24c02中读出的值***********************************************************************/ucharx24c02_read(ucharaddress){ uchari; start(); writex(0xa0); clock(); writex(address); clock(); start(); writex(0xa1); clock(); i=readx(); stop(); delay1(10); return(i);}/*********************************************************************名称:x24c02_write()*功能:想24c02中写入数据*输入:address(地址),info(值)*输出:无***********************************************************************/voidx24c02_write(ucharaddress,ucharinfo){ EA=0; start(); writex(0xa0); clock(); writex(address); clock(); writex(info); clock(); stop(); EA=1; delay1(50);}/*********************************************************************名称:Delay_10ms()*功能:延时,延时时间为1ms*i*输入:i(延时1ms的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论