2015年本科C语言编译器设计与实现毕业论文设计论文_第1页
2015年本科C语言编译器设计与实现毕业论文设计论文_第2页
2015年本科C语言编译器设计与实现毕业论文设计论文_第3页
2015年本科C语言编译器设计与实现毕业论文设计论文_第4页
2015年本科C语言编译器设计与实现毕业论文设计论文_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

安徽理工大学软件学院安徽理工大学软件学院智能公交卡终端系统软件实现摘要随着城市规模的扩大,交通已经成为城市发展的一个重要因素。公交车射频卡可以提供更为方便、快捷的服务。面向开放式公交系统的乘客下车站台刷卡系统及数据传输技术的改善,充分运用了交通,电路即传输等专业的知识。本文对公交射频刷卡器的系统设计进行了研究。采用美国ATMEL公司的ATmega16单片机位控制核心,应用PHILIPS公司的MIFARE射频技术实现设计。本设计主要是系统软件设计。这部分描述了所应用的各部分的程序原理和代码,运用模块化结构,使程序设计的逻辑关系更加简洁明了;采用软件AVRstudio4软件进行编程,sscom串口调试助手以及AVRfighter程序烧录软件进行烧录。关键词ATmega16;射频技术;AVR;

SmartbuscardterminalsystemsoftwareAbstractAlongwiththeextensionofthecityscale,thetransportationhasalreadybecomeanimportantfactorofthecitydevelopment.Thebusradiofrequencycardcanprovidemoreconvenienceandfasterservance.Passengerstogetoffthesitecreditcardsystemforopenbussystemdevelopmentistheimprovementofexistingpublictransportcircuitandtransmissiontechnology.Thistextcarryonaresearchtothesystemdesignofthebusradiofrequencycardmachine,ItadoptedsinglechipmicrocomputeroftheATmega16oftheAmericanATMELcompanyasthecontrolcoreandappliedtheMIFAREradiofrequencytechniqueofthePHILIPScompanytorealizethedesign,Thisdesignofthesystemincludetwoparts:thehardwaredesignandthesoftwaredesign.Thehardwaredesignpartdescribedthehardwarecircuitsandtheprincipleofeachpart,mainlyinclude:displaycircuits,Thewatchdogcircuit,the93C46serialEEPROM,thebuffercircuitandreadcardmachine.Also,itgavethesystemhardwareoftheintegraldesignprinciplediagram.Aadoptingassemblelanguagetoeditthesoftware,usingblockingstructureandgivingtheflowchartofeachblockmakethelogicalRelationoftheprogramdesignmoresimplyanddirectlytounderstand.ItadoptedAVRstudio4todebugtheprogram.Moreover,thistextalsogavedetailedprogramlist.Keywords:ATmega16;射频技术;AVR;安徽理工大学软件学院目录23057摘要 i30118Abstract ii22628第一章绪论 1140901.1研究背景 1317241.2设计的意义和目的 1272561.3系统设计总体要求 220891.4系统设计的方案选择 2205511.4.1IC卡的选择 2155671.4.2用户信息的存储 2284821.4.3程序编写 323481第二章软件的总体设计 418072.1系统软件设计思想 4323292.2系统软件逻辑组成 427122.3系统流程图 413988第三章软件各个模块的设计 627573.1主程序 6256053.2rc522.c程序 6317593.2.1SPI相关操作 667823.2.2读RC632寄存器ReadRaw(add) 9219463.2.3写RC632寄存器Write(add,data) 9168593.2.4清除RC632寄存器ClearBitMask(reg,mask) 9163013.2.5设置RC632寄存器SetBitMask(reg,mask) 9277823.2.6通讯PcdComMF522() 9277173.2.7寻卡PcdRuquest(reg,*pTagType) 9119283.2.8放冲撞PcdAnticoll(*psnr) 10260133.2.9Mc522复位PcdReset() 10160043.2.10开启天线PcdAntennaOn() 1046303.2.11关闭天线PcdAntennaOff() 10133093.2.12端口的初始化init_port_rc522() 1046473.3LCD.c 1179283.3.1LCD12864写数据(write_com(cmd)) 11270793.3.2LCD12864写数据(write_data(dat)) 11163943.3.3LCD12864定位显示数据write_lcd(line,row,*str,len) 12148163.3.4LCD12863定位显示数据 12134243.3.5清屏LCD12864(clr_screen()) 12129803.3.6LCD12864初始化(init_lcd) 12152283.4bell.c(蜂鸣器) 12281903.4.1初始化蜂鸣器(init_bell()) 13102983.4.2蜂鸣器响(bell_poll()) 1364133.5usart.c(串口通信) 13270283.5.1USART数据寄存器UDR 14198873.5.2USART控制和状态寄存器UCSRA 1492753.5.3USART控制和状态寄存器UCSRB 15194973.5.4USART控制和状态寄存器UCSRC 16299783.5.5波特率寄存器UBRRL和UBRRH 16281073.5.6初始化串口(init_usart()) 17266553.5.7发送数据(send_data(data)) 17202533.5.8接受数据receive_data 17201303.6连接数据库以及PC的串口程序 17202943.6.1连接数据库 17147713.6.2PC串口程序 19142223.7Mifare1非接触式卡说明 20163983.7.1Mifare1非接触式卡包含两个部分:RF射频接口电路和数字电路 20133223.7.2Mifare1卡的存储结构 2113454第四章软件测试 22201634.1数据库单元测试 22228684.1.1插入元素测试 22268214.1.2更新数据测试 23156074.2串口发送卡号单元测试 24186864.3集成测试 246785结论 2522239参考文献 266659致谢 271805外文原文 2832510外文翻译 42安徽理工大学软件学院第一章绪论1.1研究背景随着我国经济的快速发展,各个大中小型城市的发展日新月异,人民生活水平逐渐提高,我国的汽车保有量也在持续的快速的增长,许多国家公共交通部门开始应用先进的信息与通信技术进行公交车定位、车辆监控、自动驾驶、计算机辅助调度及提供各种公共交通信息以提高公共服务水平。其中如美国,日本,加拿大,英国,法国,韩国等国家都投入了较大的人力和物力从事智能公交系统的研究,在国际处于领先地位,并已取得显著的成果。美国城市公共交通管理局(UMTA)已经启动了智能公交系统项目“AdvancedPublicTransportationSystems(APTS)”,经过现场实验,UMTA关于APTS的评价是:”APTS可以显著提高公交交通服务水平,吸引更多乘客采用公交和合伙乘车的出行模式,从而带来了减少交通拥挤,空气污染和能源消耗等一系列社会效益”。根据1998年美国运输部的联邦公交交通信息的实时信息发布理论,以及使用先进的电子,通讯技术提高公交效率和服务水平的实施技术。具体包括车队管理,出行者信息,电子收费和交通需求管理等几个方面的研究。其中车队管理主要研究通信系统,地理信息系统,自动车辆定位系统,自动乘客计数,公交运营软件和交通信号优先。日本城市公交交通智能化的发展经历了三个阶段:二十世纪70年代末开始应用公交汽车定位系统—公交汽车接近显示系统;80年代初开始应用公交交通运行管理系统,其中包括乘客自动统计,运行监视和运行控制;进入90年代,由于机动车数量的增长和严重交通拥挤的影响,要保持正常的行车速度是十分困难的,由此引起的公交交通的不便性和不可靠性导致乘客数量的急剧减少。东京都交通局开发了城市公共交通运输控制系统(CTCS),旨在改进公共汽车服务,重新赢得乘客。在CTCS中,公共交通运营管理系统的一个基本的框架,其目的是通过掌握运行情况以及乘客数据实现精确平稳的公共交通运营服务。它将运营中的公共汽车和控制室之间建立信息交换,并利用诱导和双向通讯的方法,将服务信息提供给服务人员和驾驶人员,同时这些信息也通过进站汽车指示系统和公交与铁路接驳信息系统提供给乘客。公共交通综合管理系统包括运营数据,乘客计数,监视和控制公共汽车运营和乘客服务等功能,其中乘客服务功能中包括进站汽车指示,信息查询和公共交通与铁路接驳信息提示。公共交通综合管理系统的硬件包括公交主控中心,区域中心以及路边,车库和车载设备等。1.2设计的意义和目的设计意义:公交卡的广泛推广,将使公交管理迈上一个新台阶。公交射频卡不仅避免了因找零引起的尴尬;此外,射频卡的小巧、轻便、美观,便于乘客携带;同时,使用公交射频卡,可减少现金流通量,也减少了疾病传播的途径;减少了乘客上车付费的时间,缩短了公交车到站停靠的时间,一定程度上缓解了城市的交通压力。设计的目的:通过此次的系统设计,了解射频卡以及GPS模块的使用原理;掌握单片机原理和接口设计;掌握实用电子信息系统设计与实现的方法。1.3系统设计总体要求总体要求:(一)打开刷卡机,连接上数据库,当读卡器寻到卡时,读卡器会通过串口给PC机发送卡号,然后PC通过接受的卡号,查询数据库,把对应的卡号金额减1,然后通过数据库把计算后的金额发送给单片机,在LCD12864上显示对应的卡号和卡内剩余金额。(二)卡内金额的充值,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,PC根据数据库中的数据匹配卡号,然后输入充值金额,完成充值。(三)卡的注册,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,输入身份证号码,PC将卡号和身份证号码插入数据库。(四)卡的挂失,打开串口,数据库,读卡器寻到卡时,会将卡号发送给PC机,删除数据库中相应的卡号和卡的信息。1.4系统设计的方案选择1.4.1IC卡的选择方案一:采用接触式IC卡实现设计方案二:采用非接触式IC卡实现设计分析:接触式的IC卡通过机械触电从读卡器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读卡器获取能量和交换数据,所以又称射频卡。与接触式IC卡相比非接触式卡更有优势:可靠性高,非接触式IC卡与读卡器之间无机械接触,避免了由于接触读写而产生的各种故障;由于非接触通讯,读卡器在10cm范围内就可以对卡片操作,所以不必插拔卡,非常方便用户使用;加密性好,非接触式IC卡有IC芯片,感应天线组成,并完全密封在一个标准PVC卡片中,无外漏部分。显然,射频卡在实际应用中更有优势。因此,在设计过程中,选择第二中方案。1.4.2用户信息的存储方案一:存储在公交卡内方案二:存储在数据库中分析:公交刷卡机是应用于公交车上的,各车上的用户数据难以保持同步,除非无线通信,考虑当用户的公交卡丢失时,采用方案一卡中的信息可能造成泄漏,并且挂失的时候由于没有存储用户信息而造成很多困难,可靠性安全性能低。而方案二实现了对公交卡的统一管理,操作方便,可靠性高,易于管理维护。所以选择方案二。1.4.3程序编写方案一:用汇编编程实现编码程序方案二:用C语言实现程序的编写分析:单片机可以采用汇编语言和C语言进行编程。汇编语言是机器语言,指令的执行速度快,节省存储空间。在本次设计中,C语言比较好理解,易于编程人员和其他人员看懂,基于C语言的通俗易懂符合人的正常逻辑,所以选择用C语言来编写程序。

第二章软件的总体设计2.1系统软件设计思想系统软件按各电路分模块编写,形成各具独立功能的子程序。主程序则对这些子程序进行调用,以实现功能。当读卡器调用PcdRequest()函数来寻进入天线内的卡片,寻到卡后,调用PcdAnticoll()函数来防冲撞,防完冲撞后,会把卡的序列号(卡的唯一标识)放入数组CardRevBuf中,四个字节。然后调用函数send_data()函数通过串口把卡的序列号发送给PC,PC的串口接收程序是用JAVA来实现,通过调用函数readPort()来接收卡的序列号实现对数据库的相关操作(增,删,改,查)。通过调用writePort()函数来把更新后的卡中的金额写回卡中,并且通过调用lcd_show_val()函数来把卡的卡号,金额显示在LCD12864上,随之蜂鸣器响来表示操作成功。2.2系统软件逻辑组成主要分为RFID程序;RC522程序;LCD程序;USART程序;BELL程序。分析:RFID程序为主程序,系统执行的入口,通过调用其它模块的函数实现功能。RC522程序为读卡器程序,来寻到进入天线内的卡,获得卡号。LCD程序为液晶显示程序,来显示主界面和卡的相关信息。USART程序为串口通信程序,来实现单片机与PC中数据库的交互。BELL程序为蜂鸣器程序,来实现提示相关操作成功。2.3系统流程图如图2-1所示图2-1主程序流程图用户从开始刷卡,然后读卡器寻卡,寻到卡后把卡号发送到数据库,如果卡号已经在数据库中存在并且金额大于等于1,则进行扣费,否则,数据库不会进行任何操作。第三章软件各个模块的设计3.1主程序分析:包含对读卡器,LCD12864,串口的初始化函数。显示界面,以及调用寻卡,防冲撞函数,发送卡的序列号,接受返回的金额数据,蜂鸣器的响来知识操作成功。3.2rc522.c程序分析:读卡器是通过SPI总线来与单片机通信读SPI数据,写SPI数据,读RC632寄存器,写RC532寄存器,清除RC532寄存器,设置RC532寄存器,计算CRC16,通过RC522和ISO14443卡通讯,寻卡,防冲撞,选定卡片,复位RC522,设置RC522的工作方式,开启天线,关闭天线,初始化RC522端口,初始化RC522模块。3.2.1SPI相关操作SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。SPI包含4条线MOSI输出数据,MISO输入数据,SCK时钟,SS使能主要特征:(一)全双工,3线同步数据传输(二)可选择的主/从操作模式(三)数据传送时,可选择LSB(低位在前)方式或MSB(高位在前)方式(四)7种可编程的位传送速率(五)数据传送结束中断标志(六)写冲突标志位保护(七)从闲置模式下被唤醒(八)倍速(CK/2)SPI传送(主机模式下)(1)数据寄存器SPDR如图3-1所示图3-1SPDRSPI数据寄存器为可读/写的寄存器,用于在通用寄存器组与SPI移位寄存器之间传送数据。写数据到该寄存器时,将启动或准备数据传送;读该寄存器时,读到的是移位寄存器配备的接受缓冲区中的值(2)控制寄存器SPCR如图3-2所示图3-2SPCR位7--SPIE:SPI中断允许。当全局中断触发允许标志位I位1,且SPIE为1时,如果SPCR寄存器的中断标志SPIF位为1,则系统响应SPI中断。位6--SPE:SPI允许。当该位写入1时,允许SPI接口。在进行SPI的任何操作时,必须将该位置位。位5--DORD:数据溢出顺序。当DORD=1时,数据传送为LSB方式,即低位在先;当DORD=0时,数据传送为MSB方式,即高位在先。位4--MSTR:主/从机选择方式。如果SS端口设置为输入,且在MSTR为1时被外部拉低,则MSTR将清除,同时SPSR中的SPIF位置为1,此时SPI由主机模式转换为从机模式。此后用户需要重新设置位MSTR,才能再次将SPI设置为主机方式。位3--CPOL:SCK时钟极性选择。当该位被设置为时,SCK在闲置时是高电平;为0时,SCK在闲置时是低电平。如表3-1所示表3-1CPOLCPOL起始沿结束沿0上升沿下降沿1下降沿上升沿位2--CPHA:SCK时钟相位选择。CPHA位的设置决定了串行数据的锁存采样是在SCK时钟的前沿还是后沿。CPOL和CPHA决定了SPI的工作模式。如表3-2所示表3-SEQ图表\*ARABIC2CPHA0采样设置1设置采样位[1:0]--SPR1和SPR0:SPI时钟速率选择。这两个标志位与寄存器SPSR中的SPI2X位一起,用于设置主机模式下产生的串行时钟SCK速率。SPR1和SPR0对于从机模式无影响。如表3-3所示表3-3SPRSPI2XSPR1SPR0SCK频率000fosc/4001fosc/16010fosc/64011fosc/12100fosc/2101fosc/8110fosc/32111fosc/64(3)SPI的状态寄存器SPSR如图3-3所示图3-3SPSR位7--SPIF:SPI中断标志。当串行传送完成时,SPIF位置1.如果SPSR中的SPIF位为1,且全局中断允许位I位1,则产生中断。如果SS设置位输入,且在SPI为主机模式时被外部拉低,则也会置位SPIF标志。SPIF标志位的属性为只读。清0SPIF有以下两种方式:硬件方式。MCU响应SPI中断,转入SPI中断向量的同时,SPIF位由硬件自动清除。软件方式。先读取SPI状态寄存器SPSR,然后再进行一次对SPI数据寄存器SPDR的操作。位6--WCOL:写冲突标志。如果在SPI接口的数据传送过程中向SPI的数据寄存器SPDR写入数据,则会置位WCOL。清0WCOL标志只能通过以下软件方式:先读取SPI状态寄存器SPCR,然后再实行一次对SPI数据寄存器SPDR的操作。位[5:1]--保留位:位0--SPI2X:倍速SPI选择。在主机SPI模式下,当该位写为逻辑“1”时,SPI的速度将加倍,这就意味着产生最小的SCK周期为MCU时钟周期的2倍。当SPI设置为从机模式时,SCK必须低于fosc/4,才能确保有效数据传送。(4)SPI读时序SPIReadByte()如图3-4所示图3-4SPI读时序可以看出先使能SS,然后把时钟线SCK拉低,在输入线上MISO读0或1一个bit,然后把SCK拉高,即可,一次读一个字节。(5)SPI写时序SPIWriteByte(data)如图3-5所示图3-5SPI写时序写的时候先使能SS,然后把时钟线SCK拉低,在输出线上MOSI写0或1一个bit,然后把SCK拉高,即可,一次写一个字节。3.2.2读RC632寄存器ReadRaw(add)即从寄存器中相应的地址读取数据,地址格式:1-6位是地址位,7位为1是读,8位是0。然后调用SPIWriteByte(address)把地址写到总线上。然后调用SPIReadByte()函数读取相应寄存器里面的数据。3.2.3写RC632寄存器Write(add,data)即把数据写到相应的寄存器中,地址格式:1-6位是地址位,7位为0 是写,8位是0,然后调用SPIWriteByte(address)先写入寄存器地址。然后再调用SPIWriteByte(data)函数把数据写入寄存器。3.2.4清除RC632寄存器ClearBitMask(reg,mask)先调用ReadRaw(reg)=tmp读取相应寄存器中的数据,然后调用WriteRaw(reg,tmp&~mask)函数把相应寄存器中的值设定为与完后的值。3.2.5设置RC632寄存器SetBitMask(reg,mask)先调用ReadRaw(reg)=tmp读取相应寄存器中的数据,然后调用WriteRaw(reg,tmp|mask)函数把相应寄存器中的值设定为或完后的值。3.2.6通讯PcdComMF522()先判断命令com是PCD_AUTHENT(验证秘钥)还是PCD_TRANSCEIVE(发送并接受数据),然后经过相应的写RC632寄存器(往寄存器comienreg中断请求传递的使能和禁能控制位),清除RC632相应的位,写RC632寄存器(往寄存器commandreg启动和停止命令的执行)PCD_IDLE(取消当前命令),初始化工作。然后把数据写入数据寄存器FIFODataReg,把BitFramingReg第一位值位1(启动数据发送)。调整时钟频率,获取完输出的数据后,把ControlReg寄存器的最高位置1,关闭时钟。3.2.7寻卡PcdRuquest(reg,*pTagType)先清除Status2Reg(包含接收器,发送器和数据模式检测)的最高位(内部温度开启),写RC632寄存器(BitFramingReg),把TxControlReg的最后两位置位(TX1和TX2管脚的输出信号将传递发送数据调制的13.56HZ 的能量载波信号),初始化工作。调用PcdComMF522函数,最后把卡的类 型(2字节)复制给pTagType指针所指的地址中。3.2.8放冲撞PcdAnticoll(*psnr)先清除Status2Reg(包含接收器,发送器和数据模式检测)的最高位(内部温度开启),写RC632寄存器(BitFramingReg),把TxControlReg的最 后两位清0,清除寄存器CollReg寄存器的最高位(所有接受的位在在冲突后将被清除)。调用PcdcomMF522函数,最后后的卡的序列号(卡的唯一标识)4字节写入指针psnr指针所指的内存地址。3.2.9Mc522复位PcdReset()先使能复位线PC5,写寄存器CommandReg(启动和停止命令寄存器)的值为PCD_RESETPHASE(0x0f复位)。写寄存器ModeReg(定义接受和发送常模式),写寄存器TReloadReg(描述16位长的定时器重装值),写寄存器TModeReg(定义内部定时器设置),写TPrescalerReg寄存器(访问权限),开启天线。3.2.10开启天线PcdAntennaOn()读寄存器TxControlReg(控制天线驱动Tx1和Tx2管脚的逻辑操作)。如果TxControlReg的Tx1和Tx2管脚为开启,则设置位(最后两位)。3.2.11关闭天线PcdAntennaOff()即清除寄存器TxControlReg的最后两位。3.2.12端口的初始化init_port_rc522()MOSI对应PC2,MISO对应PC3,SCK对应PC1,SS对应PC0复位对应PC5原理图:如图3-6所示图3-6RFID原理图3.3LCD.c分析LCD12864主要是把卡的相关信息显示出来,用户可以找到自己的卡号和卡内剩余金额。lCD显示用到PA0到PA7用于接收要显示的数据。PC5控制使能,PC6控制读写,PC7控制操作数据寄存器还是状态(命令)寄存器。原理图:如图3-7所示图3-7LCD原理图3.3.1LCD12864写数据(write_com(cmd))分析:先设置PC6为0即写,在设置PC7为0即写的是命令寄存器,在设置PC5为1即使能,然后把数据写给PORTA,完成。3.3.2LCD12864写数据(write_data(dat))分析:先设置PC6为0即写,在设置PC7为1即写的是数据寄存器,在设置PC5为1即使能,然后把数据写给PORTA,完成。3.3.3LCD12864定位显示数据write_lcd(line,row,*str,len)分析:LCD12864有4行(0行开始),有8列(0列开始)。先写命令write_com(cmd)即告诉LCD12864要在第几行几列显示。再写数据write_data(*str)LCD12864在指定位值显示相应数据。3.3.4LCD12863定位显示数据分析:就是把接受到的字节转化成对应的字符对应关系:如表3-4所示表3-4对应关系字节0123456789101112131415字符0123456789ABCDEF3.3.5清屏LCD12864(clr_screen())分析:当LCD12864要显示不同的内容的时候,先清屏,再显示。3.3.6LCD12864初始化(init_lcd)写命令write_com(0x30);选择8bit数据流;写命令write_com(0x0c);开显示(无游标、不反白);写命令write_com(0x01);清除显示,并且设定地址指针为00H;写命令write_com(0x06);指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位。3.4bell.c(蜂鸣器)分析:蜂鸣器响意味着操作成功。PB1输出控制着蜂鸣器。原理图:如图3-8所示图3-8蜂鸣器原理图3.4.1初始化蜂鸣器(init_bell())分析:即把PB1设为输出。3.4.2蜂鸣器响(bell_poll())分析:PORTB^=_BV(PB1);PB11010循环蜂鸣器响。 _delay_ms(100);3.5usart.c(串口通信)分析:RX发送口PD0,TX接受口PD1。用于向电脑发送数据(即卡的序列号)。原理图:如图3-9所示图3-9usart原理图AVR的异步传输接口USART功能全双工通信(相互独立的接受数据寄存器和发送数据寄存器)支持同步或异步传输操作。同步传输操作时,可采用主机时钟同步,也可采用从机时钟同步。独立的高精度波特率发生器,不占用定时/计数器扩展的,支持5-9为数据位和1位或2位停止位的串行数据帧结构。有硬件支持的奇偶校验位和数据校验。硬件实现的数据溢出检测。硬件实现的帧错误检测。包括错误起始位检测的噪声滤波器和数字低通滤波器。配备3个完全独立的中断源:TX发送完成,TX发送数据寄存器和RX接收完成支持多机通信模式支持倍速异步通信模式3.5.1USART数据寄存器UDRUDR寄存器有2个物理上分离的寄存器RXB,TXB构成,他们使用相同的I/O地址。写UDR的操作,是将发送的数据写入到寄存器TXB中;读UDR的操作,读取的是接受寄存器RXB的内容。当设定使用5,6的数据帧时,高位未用到的位在发送时被忽略,在接受时有硬件自动清0.只有在USART寄存器中的UDRE位置1时(数据寄存器位空),UDR才能被写入;否则写入的数据将被USART忽略。在发送使能的情况下,写入UDR的数据将进入发送器的移位寄存器,由引脚TXD串行移出。USART控制和状态寄存器UCSRA如图3-10所示图3-10UCSRA位7--RXC:USART接受完成。当收到的字符从接受移位寄存器传到UDR中(RXB)且未被读取时,该位置1.不论是否有接受错误,该位都设置。当设置禁止接受时,UDR中的数据就会刷新,同时清0RXC标志。RXC的置位会产生完成的中断请求。RXC在读UDR时自动清0.位6--TXC:USART发送完成。当发送移位寄存器的全部数据移出后,且在数据寄存器UDR中(TXB)没有待发送的数据时,该位置1.TXC由硬件自动清0.TXC位也可以通过向该位写一个逻辑“1”而清“0”。位5--UDRE:USART数据寄存器空,当写入UDR(TXB)的字符被传送到发送移位寄存器中时,该位置1,表示UDR可以写入新的发送数据。UDRE的置1会产生发送数据寄存器空的中断请求。系统复位时,UDRE置1,表示USART数据寄存器为空,数据发送已准备好。位4--FE:接受帧出错。如果在接受缓冲器中刚收到的数据帧被检测到帧出错,则该位置1.FE在收到数据帧的停止位“1”时被清除,此外,重写寄存器USART的操作总是设置FE标志位为“1”。位3--DOR:接受数据溢出出错。如果接受数据溢出条件被检测到,则该位置“1”。当接受缓冲器满,同时接受器又检测到一个新的起始位时,则接收数据溢出出错发生。该位将一直保持为1,直到接受缓冲UDR被读取。重写寄存器USART的操作总是设置DOR标志位为0.位2--PE:检验错误。在接受允许和校验位比较允许都使能时,接受器检测到刚接受的数据校验出错,那么该位置1.该位将一直保持1,直到该接受缓冲UDR被读取。重写寄存器USART的操作总是设置PE标志位为0.位1--U2X:USART传输速率倍速。该位只有在异步模式下有效,当使用同步模式时,应设置该位为0.如果设置该位为1,则将使波特率分频器的分频比由16降到8,其效果是异步通信的传输速率加倍。位0--MPCM:多机通信模式允许。该位使能多机通信模式。当MPCM位写为“1”时,所有接收到的数据帧,如果不包括地址信息的话,将被USART接受器忽略。USART的发送模块不收MPCM设置的影响。USART控制和状态寄存器UCSRB如图3-11所示图3-11UCSRB位7--RXCIE:RX接收完成中断允许。当该位置1时,表示允许响应接受额按成中断请求。如果全局中断标志位I为1且RXCIE位为1,那么当标志位RXC置1时,一个接受完成中断服务被执行。位6--TXCIE:TX发送完成中断允许。当该位置1时,表示允许响应发送完成中断请求。如果全局中断标志位I为1,且TXCIE位为1,那么当标志位TXC置1时,一个发送完成中断服务被执行。位5--UDRIE:USART数据寄存器空中断允许。当该位置1时,表示允许响应发送数据寄存器UDR空中断请求。如果全局中断标志位I位1且UDRIE为1,那么当标志位UDRE置1时,一个发送数据寄存器空中断服务被执行。位4--RXEN:数据接受允许。当该位置1时,允许USART接受数据。当接受器使能时,对应引脚的特性由通用数字I/O口转变为RXD。禁止数据接受,将清除接受缓冲器中的数据,并使FE,DOR,PE标志位无效(为0)。当接受数据被禁止后,USART发送器将不再占用RXD引脚。位3--TXEN:发送数据允许。当该位置1时,允许USART发送数据。当发送器使能时,对应引脚的特性由通用数字I/O口转变为TXD.如果在发送数据时禁止发送器,则在移位寄存器中的数据和后续UDR中的数据被全部发送完成后,发送器才会禁止。当发送器禁止后,USART发送器将不再占用TXD引脚。位2--UCSZ2:数据字位数大小。该位与UCSRC寄存器中的UCSZ[1:0]位一起使用,用于设置接收和发送数据帧中数据字位的个数。位1--RXB8:接收数据的第8位。当采用接收的数据帧格式为9位数据帧时,RXB8中接收到数据的第9数据位。RXB8标志位必须在读UDR之前读取。位0--TXB8:发送数据的第8位。当采用发送数据帧格式9位数据帧时,TXB8中发送数据的第9位数据位。TXB8标志位必须在URD写入前写入。USART控制和状态寄存器UCSRC如图3-12所示图3-12UCSRC位7--URSEL:寄存器选择。该位用于对UCSRC/UBRRH寄存器进行选择。写UCSRC寄存器时,该位必须写入1,读取UCSRC时,该位总是1.位6--UMSEL:USART工作模式选择。该位用于选择USART为同步或异步工作模式。位[5:4]--UPM[1:0]校验方式。这2位用于允许和选择产生或验证校验位的类型。如果使能校验模式,发送器将根据发送的数据,自动产生符合要求的校验位,并附加在每一个数据帧后发送。接收器将对接受的数据帧进行校验,产生校验位,并与UPM0的设置进行比较。如果不匹配,则USART寄存器中的PE标志位将置1。位3--USBS:停止位选择。该位用于选择插入到发送帧中停止位的个数。位[2:1]--UCSZ[1:0]:传送或接受字符长度。这2位同UCSRB寄存器中的UCSZ2位一起使用。位0--UCPOL:时钟极性选择。该位只在同步模式下使用。在异步模式下,应将该位写为0.UCPOL位设定了串行输出数据变化和数据输入采样和同步时钟XCK之间的关系。3.5.5波特率寄存器UBRRL和UBRRH如图3-13所示图3-13UBRRH位15--URSEL:寄存器选择。该位用于对UBRRH/UCSRC寄存器的选择。写UBRRH寄存器时,该位必须写入0,读取UBRRH时,该位总是0.位[14:12]--保留位。位[11:0]--UBRR[11:0]:USART波特率设置寄存器。由寄存器UBRRH低4位和寄存器UBRRL的8位构成一个12位的寄存器,用于对USART传送或接受波特率的设置。如果波特率设置被改变,则正在进行接受和发送将被打断。写UBRRL将立即更新对波特率预分频的设置。3.5.6初始化串口(init_usart())分析:UCSRA=0x00;单倍速模式UCSRB=_BV(RXCIE)|_BV(TXCIE)|_BV(RXEN)|_BV(TXEN)UCSRC=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);UBRRH=0因为晶振7372800Hz的9600波特率。(unsignedint)((unsignedlong)F_CPU/(16*(unsignedlong)baud)-1)UBRRL=47;3.5.7发送数据(send_data(data))分析:while(!(UCSRA&_BV(UDRE)));当UDRE位置位时,表示可以写入新的数据UDR=data;3.5.8接受数据receive_data分析:while(!(UCSRA&_BV(RXC)));当RXC位置位时,表示接受到新的数returnUDR;3.6连接数据库以及PC的串口程序3.6.1连接数据库连接数据库程序用JAVA实现。用oracle数据库首先建表bus其中包含3个字段ID(卡号),customerID(持卡人 的身份证号),money(卡内金额)。首先得有java.sql.*包(一)java.sql.DriverManager用来转载驱动程序,并为创建新的数据连接提供支持。Class.forName("oracle.jdbc.driver.OracleDriver");建立桥接器。(二)java.sql.StatementJDBC一般采用基于Statement对象的查询方法。首先使用Statement类声明一个SQL语句对象,然后通过该连接对象调用createStatement()方法创建SQL语句对象pstm=con.prepareStatement("select*frombus_managewhereid=?");有了SQL对象后,这个对象就调用相应的方法实现对数据库的查询操作。具体的,在Statement对象上,可以使用execQuery()方法执行查询语句。execQuery()方法的参数是一个String对象,即一个SQL的数据处理语句,并将查询结果放在ResultSet类声明的对象中,然后进行相应的处理。rs=pstm.executeQuery();在SQL中查询操作是通过select语句来完成的,基本的select语句格式Select<列名>from<表名>对数据库进行更新操作:(1)插入记录(insert)Insertinto表名[字段名1,字段名2]values(值1,值2,...)注意:插入的值必须和列一一对应。插入值的数据类型必须和对应列的数据类型相一致。(2)更新记录(update)Update<表名>set字段1=值1where<条件>(3)删除记录(delete)Deletefrom<表名>[wnere条件]在使用delete语句时要特别小心,因为SQL中的Delete没有相应的Undo命令可以将删除的数据恢复,因此,为避免错误,最好是在删除前用带相同条件的Select语句查询一遍,确认无误后在执行delete语句。(三)消费当做公交车刷卡消费时,应当时接受到的卡的序列号的卡内金额减1具体操作先使用上述方法连接到数据库,然后打开串口程序,当接受到卡的序列号时SQL语句"select*frombus_managewhereid=?"先查询到相应的卡rs=pstm.executeQuery();//返回结果集inttmp=rs.getInt(2)-1;把金额减1后放入tmp中,"updatebus_managesetmoney=?whereid=?"更新语句更新卡的金额。(四)充值当要充值时,应当时接受到的卡的序列号的卡内金额加上充值的金额具体操作先使用上述方法连接到数据库,然后打开串口程序,当接受到卡的序列号时SQL语句"select*frombus_managewhereid=?"先查询到相应的卡rs=pstm.executeQuery();//返回结果集intbalance=rs.getInt(2);intsum=balance+money;"updatebus_managesetmoney=?whereid=?"更新语句更新卡的金额。(五)新卡注册执行"insertintobus_managevalues(?,?,?)"插入语句setString(1,id);设定从串口接受到的IDsetInt(2,0);设定卡内金额为0setString(3,text);设定用户ID(身份证号)executeUpdate();更新数据库。(六)卡的挂失“select*frombus_managewhereid=?"先查询接受的卡的ID.然后执行"deletefrombus_managewhereid=?"删除语句,在数据库中删除卡的序列号即卡的相关信息。3.6.2PC串口程序Java通信串口包串口API概览

m.CommPort

这是用于描述一个被底层系统支持的端口的抽象类。它包含一些高层的IO控制方法,这些方法对于所有不同的通讯端口来说是通用的。SerialPort

和ParallelPort都是它的子类,前者用于控制串行端口而后者用于控这并口,二者对于各自底层的物理端口都有不同的控制方法。这里我们只关心SerialPort。

m.CommPortIdentifier

这个类主要用于对串口进行管理和设置,是对串口进行访问控制的核心类。主要包括以下方法

(一)确定是否有可用的通信端口

(二)为IO操作打开通信端口

(三)决定端口的所有权

(四)处理端口所有权的争用

(五)管理端口所有权变化引发的事件(Event)

m.SerialPort

这个类用于描述一个RS-232串行通信端口的底层接口,它定义了串口通信所需的最小功能集。通过它,用户可以直接对串口进行读、写及设置工作。

(1)串口初始化(initComm())打开硬件资源,并获取串口:CommPortIdentifier.getPortIdentifier(commName);设置软件资源,设置进程名称和超时时间CommPortIdentifier.getPortIdentifier(commName).open("Read",1000);打开数据传输参数setSerialPortParams(bPS,dataBit,stopBit,parityBit);//比特率9600,8位数据位,1位停止位,无校验位。创建输入流:getInputStream();创建输出流getOutputStream();监听端口addEventListener(this)接受数据使能notifyOnDataAvailable(true)初始化串口线程为主线程readThread=newThread(this);(2)获取系统中所用的全部串口(string[]listport())CommPortIdentifier.getPortIdentifiers();(3)开始读串口转化为字符串(StringreadPort())先让输入流使能,然后读书据到buf中,转换为字符串inti=(byte)buf[0]&0xff;msg=Integer.toHexString(i);以16进制显示。(4)写串口以字符串形式发送消息把数据写到输出流上,刷新输出流。(5)关闭串口(closePort())判断输出流位NULL,关闭输出流和输入流。关闭监听端口removeEventListener()接受数据禁能notifyOnDataAvailable(false)(6)串口监听事件(serialEvent())SerialPortEvent.BI:/*Breakinterrupt,通讯中断 SerialPortEvent.OE:/*Overrunerror,溢位错误*/SerialPortEvent.FE:/*Framingerror,传帧错误*/SerialPortEvent.PE:/*Parityerror,校验错误*/SerialPortEvent.CD:/*Carrierdetect,载波检测*/SerialPortEvent.CTS:/*Cleartosend,清除发送*/SerialPortEvent.DSR:/*Datasetready,数据设备就绪*/SerialPortEvent.RI:/*Ringindicator,响铃指示*/SerialPortEvent.DATA_AVAILABLE://串口有可用数据读到缓冲数组输出到终端SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*输出缓冲区清空3.7Mifare1非接触式卡说明3.7.1Mifare1非接触式卡包含两个部分:RF射频接口电路和数字电路(一)RF射频接口电路:在RF射频接口电路中,主要包括有波形装换模块。它可将卡片读写器上的13.56HZ的无线电调制频率接受,一方面送调制/解调模块,另一方面进行波形装换,将正弦波转换为方波,然后对其整个滤波,由电压调节模块对电压进行进一步的处理(二)数字电路部分:总共包含ATR模块,AntiCollision模块,selectApplication模块,Authentication&AccessControl模块控制及算术运算单元,RAM/ROM单元,数据加密单元和EEPROM存储器及其接口电路八个部分。(1)ATR模块当一张Mifare1卡片处在卡片读卡器的天线的工作范围之内时,控制读卡器向卡片发出REQUESTALL命令后,卡片的ATR将启动,将卡片Block0中的卡片类型号共2个字节传送给读卡器,建立卡片与读卡器的第一步通信。(2)selectApplication模块当卡片与读卡器完成了上述步骤后,控制的读卡器要想对卡片进行读,写操作,则必须对卡片进行select操作。以使卡片真正的被选中。被选中的卡片将卡片上存储在Block0中的卡片的容量SIZE字节传送给读卡器。当读卡器收到这一字节后,就可以明确对卡片进行进一步操作。(3)Authentication&AccessControl模块控制及算术运算单元在确认已经选择了一张 卡片时,程序员对卡片进行读写操作前,必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。Mifare1卡片上有16个扇区,每个扇区都可分别设置各自密码,互补干涉。3.7.2Mifare1卡的存储结构Mifare1卡片的存储容量为1KB,采用EEPROM作为存储介质,整个结构划分为16个扇区,编号为0-15。每个扇区4块,分别为块0,块1,块2,块3,每个块16个字节每个扇区的块3包含了该扇区的密码A(6个字节),存取控制(4个字节),密码B(6个字节),是一个特殊的块。其余三块一般是数据块。但扇区0的块0时特殊的,是厂商代码,已固化。其中:第0~4个字节为卡片的序列号,第5个字节为序列号的校验码;第6个字节为卡片的容量“”字节;第7,8个字节为卡片的类型号字节;其他字节由厂商另加定义。

第四章软件测试4.1数据库单元测试4.1.1插入元素测试分析:要插入元素必须遵信一定的原则,金额必须是大于0的整数;用户的身份证号必须是17位的数字,不能小于17位或是17位中有不是数字的。如表4-14-24-3所示表4-1数据库元素卡号卡内金额用户身份证号表4-2插入条件输入条件有效等价类无效等价类是否金额大于0Money>0(1)Money<=0(2)是否金额为整数Money=12(3)Money=3.5(4)Money=a(5)是否身份证号为17位Customid6)Customid=1423(7)是否身份证号都为整数Customid8)Customid=1427011993100205a4(9)表4-3插入示例序号例子覆盖等价类输出1(12(1),(6)插入成功2(0(2),(6)插入失败,金额为0插入失败,金额小于0插入失败,金额不是整数插入失败,金额不是整数插入失败,身份证号不是17位插入失败,身份证号中有字母3(-1(2),(6)4(5.6(4),(6)5(1a(5),(6)6(12,1423)(1),(7)7(12,1427011993100205a4)(1),(7)4.1.2更新数据测试分析:更新数据库时,主要是对卡内金额的操作,当用户刷卡时每次卡中金额减1,当金额减到0时,再要扣费是会出现错误。如表4-44-5所示表4-4更新条件输入条件有效等价类无效等价类金额是否是大于1的整数Money=12(3)Money=-1(2)表4-5更新示例序号例子覆盖等价类输出1Money=12(1)Money=124.2串口发送卡号单元测试分析:当读卡器寻到进入天线内的卡时,会把卡的序列号(卡的唯一标识)放入一个数组中,然后再通过串口把卡的序列号发送给PC机。PC机根据接受到的卡号进行数据库中该卡信息的相关操作。如表4-6所示表4-6发送卡号示例序号例子覆盖等价类输出1DB1434O8(1)DB1434O82B1234O8(2)数据库不存在该卡,不能进行下步操作4.3集成测试分析:在数据库单元测试与串口发送卡号单元测试成功后,开始把这两个最主要的模块和在一起进行集成测试,来验证在发送卡号正确和不正确的情况下,数据库是否能进行相关正确的操作。如表4-7所示表4-7集成示例序号例子覆盖等价类输出1DB1434O8(1)DB1434O82B1234O8(2)数据库不存在该卡,不能进行下步操作

结论本系统实现了对公交车刷卡系统的模拟实现,实现了公交车的刷卡消费,公交车卡的充值,公交车卡的新卡注册,公交车卡的挂失功能。主要用到了AVR单片机的相关技术,本系统用到的单片机是Atmega16,读卡器RC522走的是SPI总线,LCD12864显示频用来显示卡的卡号和卡内金额的信息。电脑中的数据库保存了卡的所有信息,持卡人的身份证号,卡的卡号,卡内金额。用于和电脑中数据库同步的信息通过RS232总线传递数据,包括传递卡的卡号,然后电脑经过需要的操作来更新卡的信息,然后把这些信息反馈给单片机然后再LCD12864上显示卡的相关信息。通过此次课题的研究,让我更加深入的了解了单片机的一些功能,对于单片机在日常生活中的运用有了更深层次的了解。在研究时也发现了自身对于单片机的不理解之处,并查看相关书籍等资料解决了不懂的问题。结合实际工作中的实践,和这次的毕业论文撰写,了解了很多也学到了很多。同时,对以前所学的专业知识,有了进一步的加深和巩固。

参考文献[1]刘筱霞,陈春霞.现代电子标签及其印刷技术[J].包装工程,2008,(05).

[2]程雪,周修理,李艳军.射频识别(RFID)技术在动物食品溯源中的应用[J].东北农业大学学报,2008,(10).

[3]石蕾,陈敏雅.RFID系统中阅读器的设计与实现[J].电脑开发与应用,2008,(07).

[4]钱莹,凌云.RFID中间件设计研究[J].电脑与信息技术,2008,(05).

[5]陈冲,徐志,何明华.一种新的RFID防碰撞算法的研究[J].福州大学学报(自然科学版),2009,(03).

[6]周永明.一种改进的查询树射频识别防冲突新算法[J].广东轻工职业技术学院学报,2006,(02).

[7]李辉,刘国栋,胡小云,高丽芳,沈烨,郑映钦.电子标签技术在出口鳗鱼产品监管中的应用研究[J].中国国境卫生检疫杂志,2007,(06).

[8]蔡志刚.集装箱无线射频识别技术应用研究[J].港口装卸,2005,(05).

[9]谢洁锐,胡月明,刘才兴,常薇.基于无线传感器和RFID的农产品安全全程监控平台[J].中国农机化,2007,(01).

[10]朱成,陈明,刘成智.Zigbee与RFID技术在医院信息化建设中的应用[J].华夏医学,2008,(03).[11]BehzadRazavi.DesignofAnalogCMOSIntegratedCircuits[M]..2001.65~78

[12]RheeW.Designofhigh-performanceCMOSchargepumpsinphase-lockedloops.IEEEInternationalSymposiumonCir-cuitsandSystems.1999[3]ToddCharlesWeigandt.Low-phase-noise,low-timing-jitterdesigntechniquesfordelaycellbasedVCOsandfrequencysynthesizers[C]//PHDthesis..1998.234~245

[13]GeorgeLee,KarinaNg,EdmondKwang.Designofringoscillatorbasedvoltagecontrolledoscillator.ProjectFinalReport[R].2005[5]T.C.Weigandt,B.Kim,andP.R.Gray.AnalysisofTimingJitterinCMOSRingOscillators.IEEEInternationalSymposiumonCircuitsandSystems.1994.25~36

[14]NonisR,DaDaltN,PalestriP,etal.Modeling,designandcharacterizationofanewlow-jitteranalogdualtuningLC-VCOPLLarchitecture[J].IEEEJournalofSolidStateCircuits.2005[7]LimKyoohyun,ParkChanhong,KimDalsoo,etal.Alow-noisephase-lockedloopdesignbyloopbandwidthoptimization.IEEEJournalofSolidStateCircuits.2000.12~24[15]李广弟等.单片机基础[M].北京航空航天出版社,2001,(03).

致谢通过这段时间的研究设计学习,我学到了很多以前不知道的知识,并且在学习中培养了一种做事情一丝不苟的态度和耐心,为以后的工作打下了坚实的基础。在此我要向我们论文的指导老师表示衷心的感谢,可以让我通过这次机会系统学习了单片机的有关知识,并能具体结合实践生活完成交通灯的设计,他幽默,风趣,严谨的教学作风将是我学习的榜样。

外文原文U-BLOX6m1Hardwaredescription1.1OverviewTheu-blox6leadlesschipcarrier(LCC)modulesarestandaloneGPSreceiversfeaturingthehighperformanceu-blox-6positioningengine.Thesecompact,easytointegratemodulescombineexceptionalGPSperformancewithhighlyflexiblepower,design,andconnectivityoptions.TheircompactformfactorsandSMTpadsallowfullyautomatedassemblywithstandardpick&placeandreflow-solderingequipmentforcost-efficient,highvolumeproductionenablingshorttime-to-market.u-bloxGPSmodulesarenotdesignedforlifesavingorsupportingdevicesorforaviationandshouldnotbeusedinproductsthatcouldinanywaynegativelyimpactthesecurityorhealthoftheuserorthirdpartiesorthatcouldcausedamagetogoods.1.2Architectureu-blox6LCCmodulesconsistoftwofunctionalparts-theRFandtheBasebandsections.SeeFigure1forblockdiagramsofthemodules.TheRFFront-Endincludestheinputmatchingelements,theSAWbandpassfilter,theu-blox6RF-IC(withintegratedLNA)andthefrequencysource.TheBasebandsectioncontainstheu-blox6Basebandprocessor,theRTCcrystalandadditionalelementssuchastheoptionalFLASHMemoryforenhancedprogrammabilityandflexibility. VCC-mainpowerThemainpowersupplyisfedthroughtheVCCpin.Duringoperation,thecurrentdrawnbytheu-blox6GPSmodulecanvarybysomeordersofmagnitude,especially,iflow-poweroperationmodesareenabled.Itisimp

温馨提示

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

评论

0/150

提交评论