简易IC卡收费器单片机课程设计_第1页
简易IC卡收费器单片机课程设计_第2页
简易IC卡收费器单片机课程设计_第3页
简易IC卡收费器单片机课程设计_第4页
简易IC卡收费器单片机课程设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、1 目录1、绪论.22、现状分析.23、射频卡(IC 卡)的识别系统 1 射频识别系统的工作原理.4 2 S50 非接触式 IC 卡性能简介 (1)主要指标.5 (2)结构.6 (3)工作原理.7 (4)M1 射频卡与读卡器的通讯.84、射频读卡模块 RC522(1)RC522 简介.9(2)RC522 引脚图.10(3)管脚描述.11(4)芯片相关功能介绍.12(5)I*I 总线接口.125、STC8989C52 芯片介绍(1)芯片特点.13(2)引脚图.14(3)STC8989C52 单片机的相关引脚介绍.156、LCD1602 芯片.177、软件部分.188、心得.509、参考文献.50

2、10、仿真图.512 一、 绪论 射频识别(Radio Frequency Identification,简称 RFID)技术是 20 世纪 90 年代开始兴起的一种天线的,非接触方式的自动识别技术,是近几年来发展的前沿科技项目。该技术主要是利用无线射频方式进行非接触式的通信,实现对被识别物体的自动识别。射频识别技术的显著优点在于非接触性,因此完成识别工作时无需人工干预,能够实现识别自动化且不易损坏;可识别高速运动物体并可同时识别多个射频标签,操作快捷方便;射频标签不怕油渍、灰尘污染等恶劣的环境,且可以穿透非金属物体进行识别,抗干扰能力强。RFID 技术与互联网、通讯等技术相结合,可实现全球范

3、围内物品跟踪与信息共享。研究RFID 产业对提升社会信息化水平、促进经济可持续发展、提高人民生活质量、增强公共安全与国防安全等方面产生深远影响,具有战略性的重大意义。射频卡又叫非接触式 IC 卡,诞生于 90 年代初,是世界上最近几年发展起来的一项新技术,它成功地将射频识技术和 IC 卡技术结合起来,解决了无源(卡中无电源)和免接触这一难题,是电子器件领域 的一大突破。由于存在着磁卡和接触式 IC 卡不可比拟的优点,使之一经问世,便立即引起广泛的关注,并以惊人的速度得到推广应用。射频卡与接触式IC 卡相比较,非接触式卡具有以下优点:可靠性高,操作方便,快速,防冲突非接触式卡中有快速防冲突机制,

4、能防止卡片之间出现数据干扰 ,可以适合于多种应用加密性能好。随着社会的不断向前推移,人们生活水平的不断提高,也就意味着人们的消费水平也有了很大的提高,商家的收费系统也有很大的改进,应用于生活中许多消费控制系统中,如汽车消毒收费系统,公交刷卡,售饭收费系统,门禁,电梯刷卡系统,交通收费,停车收费等。 二 、现状分析在国外,美国加州技术创新博物馆正使用射频卡识别技术来拓展和增强参观者的参观体验。他们给前来参观的访问者每人一个RFID(射频识别技术 )标签,使其能够在今后其个人网页上浏览此项展会的相关信息;这种标签还可用来确定博物馆的参观者所访问的目录列表中的语言类别。该博物馆成立于1990 年。自

5、成立以来,就成为了硅谷有名又受欢迎的参观地,并吸引了很多家庭和科技爱好者前来参观访问。每年大约能3接待 40 万参观者。从参观者所做出的积极良好的反应看来,使用RFID 标签是成功的。在未来的某一天,美国的技术创新博物馆可能会开发出一种展示品,用来探测RFID 技术对于整个世界的影响,他们正在努力地研究着。国内,已经广泛应用于银行、电信、交通、公共安全等社会各领域,得到了快速的发展。国内智能卡市场销售量近 12.8 亿张,同比增长 26.8%;销售额达 53.7 亿元,同比增长 15.3%。智能卡市场销量出现大幅增长的主要原因在于,一是移动通信卡市场的增长拉动了整体市场的增长;二是城市一卡通、

6、居住证、社保卡等领域市场快速发展,也推动了整体市场的增长。 作为最大应用领域的移动通信卡市场在亚太市场快速增长的带动下实现了销售量的增长,此外金融服务领域在全球 EMV 迁移的拉动下实现了 10%以上的增长。在身份识别领域,全球电子护照的发行及中国居住证制度的实施也保证了该领域的增长空间。整体来看,智能卡的传统应用领域仍左右全球智能卡市场的发展。 以城市一卡通、社保卡、银行 IC 卡为代表的中国智能卡新兴应用领域发展势头强劲其中城市一卡通目前广泛应用于城市公共交通、高速公路自动收费、智能大厦、各种公共收费、智能小区物业管理、考勤门禁管理、校园和厂区一卡通系统中,这些应用中门禁一卡通近年来得到较

7、快的增长。 产品性价比不断提高近年来,智能卡“一卡多用”渐成市场发展趋势,智能卡功能不断提升。与此同时,智能卡生产规模的扩大又促使其价格不断下降,产品性价比不断提高。以移动通信 SIM 卡为例,虽然产品性能不断提高,但价格呈理性的下降趋势,可以说,目前 SIM 卡是国内最具性价比的智能卡应用领域。 从中国智能卡市场竞争格局来看,目前市场前十位中除金雅拓、金邦达、捷德属外资企业以外,其余均为本土厂商,其中东信和平、握奇数据、大唐微电子等企业在国际市场中也具有一定的竞争实力。从智能卡芯片市场的竞争格局来看,随着中国本土集成电路设计企业的迅速成长,智能卡芯片市场已经摆脱了原来严重依赖国外半导体厂商的

8、局面,有些国内厂商已经可以设计、生产具有与国外产品相同功能的智能卡芯片,而一些国外芯片企业也因为成本和盈利因素放弃了部分领域智能卡芯片的开发。 如今中国智能卡芯片厂商已经形成了中外两种竞争格局,其中国外企业以三星、意法、英飞凌、NXP、瑞萨等为代表,国内则以大唐微电子、华虹设计、复旦微电子、中电华大、同方微电子等为代表。在智能卡模块封装环节则有中电、上海伊诺尔、山东山铝、上海长4丰等知名企业,如今中国智能卡产业已经形成芯片设计、芯片制造、模块封装、智能卡制作开发的完整产业链。 三 、射频卡(IC 卡)的识别系统1 射频识别系统的工作原理射频识别(RFID)系统为无源系统,即射频卡内不含电池,射

9、频卡的能量是由读写器发出的射频脉冲提供。非接触式射频卡系统是基于射频法的系统。射频法是运用 L-C 振荡回路工作的 RFID 系统工作过程如下:(1)读写器在一个区域内发射能量形成电磁场,区域大小取决于发射功率、工作频率和天线尺寸。(2)射频卡进入这个区域时,接收到读写器的射频脉冲,经过桥式整流后给电容充电。电容电压经过稳压后作为工作电压。(3)数据解调部分从接收到的射频脉冲中解调出命令和数据并送到控制逻辑,控制逻辑接受指令完成存储、发送数据或其他操作。(4)如需要发送数据,则将数据调制后从收发模块发送出去。(5)读写器接收到返回的数据后,解码并进行错误校验来决定数据的有效性,然后进行处理,读

10、写器发送的射频信号除提供能量外,通常还提供时钟信号,使数据保持同步。2、芯片:Philips MIFARE 1 S50 S50 非接触式 IC 卡性能简介(M1) (1)主要指标 容量为8K位EEPROM 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 每个扇区有独立的一组密码及访问控制 每张卡有唯一序列号,为32位 具有防冲突机制,支持多卡操作 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路 数据保存期为10年,可改写10万次,读无限次 工作温度:-2050(湿度为90%) 工作频率:13.56MHZ 5 通信速率:106 KBPS 读写距离:10 cm以内(与读写器有关)

11、 (2) 结构 M1 卡片的存储容量为 8192 bit X 1 位字长(即 1KX8 位字长),采用 EEPROM 作为存储介质,整个结构划分为 16 个扇区,编为扇区 015。每个扇区有 4 个块(Block),分别为块0,块 1,块 2 和块 3。每个块有 16 个字节。一个扇区共有 16 Byte X4=64 Byte。每个扇区的块 3(即第四块)包含了该扇区的密码 A(6 个字节)、存取控制(4 个字节)、密码 B(6 个字节),是一个特殊的块,称为控制块, 。其余三个块是一般的数据块。数据块有两种应用方法,一种是用作一般的数据保存用,直接读写。另一种用法是用作数值块,可以进行初始化

12、值、加值、减值、读值的运算。系统配用相应的函数完成相应的功能。但扇区 0 的块 0 是特殊的,是厂商代码,已固化,不可改写。扇区存储结构 M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成, (我们也将16个扇区的64个块按绝对地址编号为063,存贮结构如下图所示: 表1 存储结构绝对地址 存放厂商代码 已固化密码 A 存取控制 密码 B密码 A 存取控制 密码 B6 块 0 数据块 0 扇区 0 块 1 数据块 1 块 2 数据块 2 块 3 控制块 3 块 0 数据块 4 扇区 1 块 1 数据块 5 块 2 数据块 6 块 3 控制块 7 块 0 数据块 60 扇区 15

13、 块 1 数据块 61 块 2 数据块 62 块 3 控制块 63 数据块可作两种应用: 用作一般的数据保存,可以进行读、写操作。用作数据值,可以进行初始化值、加值、减值、读值操作。 每个扇区的块3为控制块,包括了密码A(6字节)、存取控制(4字节) 、密码B(6字节) 具体结构如下: A0 A1 A2 A3 A4 A5(密码 A) FF 07 80 69 (存取控制) B0 B1 B2 B3 B4 B5(密码B) 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定

14、的,在存取控制中每个块都有相应的三个控制位,定义如下: 密码 A 存取控制 密码 B块0:C10C20C30块1:C11C21C31块2:C12C22C327 表2控制位定义 三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如 进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等) 。 * 块 0、1、2 的存取控制与块 3 的存取控制不同(a)数据块(块 0、块 1、块 2)的存取控制如下: 表 3 控制位(X=0,1,2)访问条件(对数据块 0,1,2)C1XC2XC3XReadWriteIncrementDecrement,transfer,Re

15、store000KeyABKeyABKeyABKeyAB010KeyABNeverNeverNever100KeyABKeyBNeverNever110KeyABKeyBKeyBKeyAB001KeyABNeverNeverKeyAB011KeyBKeyBNeverNever101KeyBNeverNeverNever111NeverNeverNeverNever(b)控制块块 3 的存取控制与数据块(块 0、1、2)不同,它的存取控制如下 表 4密码 A存取控制密码 BC13C23C33ReadWriteReadWriteReadWrite000NeverKeyABKeyABNeverKey

16、ABKeyAB010NeverNeverKeyABNeverKeyABNever100NeverKeyBKeyABNeverNeverKeyB块3:C13C23C338110NeverNeverKeyABNeverNeverNever001NeverKeyABKeyABKeyABKeyABKeyAB011NeverKeyBKeyABKeyBNeverKeyB101NeverNeverKeyABKeyBNeverNever111NeverNeverKeyABNeverNeverNever(3)工作原理 卡片的电气部分只由一个天线和ASIC组成。 天线:卡片的天线是只有几组绕线的线圈,很适于封装到

17、IS0卡片中。 ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个 8K位EEPROM组成。工作原理: 读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。 (4) M1射频卡与读写器的通讯 复位答应RequestRequest Request 防冲突机制Anti col

18、lision LoopAnti collision Loop选择卡片Select TagSelect Tag 选择卡片三次相互验证AuthenticationAuthentication 读块Read读块 Read 写块WriteWrite块 Write Write WriteWrite块 Write 加值incrementincrementincrement减值decremententdecrement中止Halt9 图 1复位应答(Answer to request) M1 射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否

19、为 M1 射频卡,即验证卡片的卡型 防冲突机制 (Anticollision Loop) 当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。选择卡片(Select Tag) 选择被选中的卡的序列号,并同时返回卡的容量代码。10三次次互相确认(3 Pass Authentication) 选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。 (在选择另一扇区时,则必须进行另一扇区密码校验。 ) 对数据块的操作 读 (Read):读一个块; 写

20、(Write):写一个块; 加(Increment):对数值块进行加值; 减(Decrement):对数值块进行减值; 存储(Restore):将块中的内容存到数据寄存器中; 传输(Transfer):将数据寄存器中的内容写入块中; 中止(Halt):将卡置于暂停工作状态; 四 射频读卡模块RC522 (1)射频读卡模块RC522简介 MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP公司针对“三表”应用 推出的一款低 电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携 式手持设备研发的较好选择。 MF RC522 利用了先进的调制和解调

21、概念,完全集成了在 13.56MHz 下所有类型的被动非接触式通信方式和协议。支持 ISO14443A 的多层应用。其内部发送器部分可驱动读写器天线与 ISO 14443A/MIFARE 卡和应答机的通信,无需其它的电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理ISO14443A 兼容的应答器信号。数字部分处理 ISO14443A 帧和错误检测(奇偶 &CRC)。此外,它还支持快速 CRYPTO1 加密算法,用于验证 MIFARE 系列产品。MFRC522 支持 MIFARE?更高速的非接触式通信,双向数据双向传输速率高达424kbit/s。作为 13.56MHz 高集成

22、度读写卡系列芯片家族的新成员,MF RC522 与和 MF RC500 MF RC530 有不少相似之处,同时也具备诸多特点和差异。它与主机间的通信采用连线较少的串行通信,且可根据不同的用户需求,选取 SPI、I2C 或串行 UART(类似 RS232)模式之一,有利于减少连线,缩小 PCB 板体积,降低成本。11(2)引脚图3231302928272625MF RC522123456782423222120191817910111213141516 VC PVDDDVDDDVSSPVSS NRSTPDMFIN FMOUT TX1 SDA IRQTX1TVSSSVDDTVDDTX2TVSS A

23、VDDVMIDOSCOUTOSCINAUX2AUX1AVSSRXEAD7D6D5D4 D3D2D1 图 2(3)管脚描述 注:I 输入 O 输出 电源 表 5符号类型描述OSCINI晶振输入:振荡器的反向放大器的输入。它也是外部产生的时钟的输入(fosc=27.12MHZ).IRQO中断请求:输出,用来指示一个中断事件。12SIGINI信号输入SINOUTO信号输出TX1O发送器 1:传送调制的 13.56MHZ 的的能量载波信号TVDDPWR发送器电源:给 TX1 和 TX2 的输出级供电TX2O发送器 2:传送调制的 13.56MHZ 的的能量载波信号TVSSPWR发送器地:给 TX1 和

24、 TX2 的输出级供电D0I/OD1I/OD2I/OD3I/OD4I/OD5I/OD6I/OD7I/O数字地不同接口地数据管脚(测试端口 I*IC,SPI,UART)SDAI串行数据线EAI外部地址:该管脚用来编码 I*IC 地址I2CII*IC 使能DVDDPWR数字电源AVDDPWR模拟电源AUX1OAUX2O辅助输出:这两个管脚用于测试AVSSPWR模拟地RXI接收器输入:接受管脚 RF 信号管脚VMIDPWR内部参考电源:该管脚提供内部电压NRSTPDI不复位和掉电:管脚为低电平时,切断内部电源吸收,关闭振荡器,断开输入管脚与外部电路的连接。管脚的上升沿来启动内部复位阶段。OSCOUT

25、O晶振输出振荡器的反相放大器的输出TESTPIN不连接:三态管脚13PVDDPWR管脚电源PVSSPWR管脚电源地(4)芯片相关功能介绍电池微控制器RSC522射频卡读卡器非接触式卡 图 3读卡器卡(数据从 MFRC522 发送到卡)/读卡器一方的调制,位编码卡读卡器(接受卡的数据)/卡一方的调制,位编码(5)I2C 总线接口 UCRS522 配置连线I2CEAD1-6上拉网络上拉网络SDASCL 图 4接口遵循 I2C 总线规范 V2.1.在标准,快捷,高速的模式中,MFR522 可作用于从接收器或从发送器。SDA 是一个双向数据线,通过一个电流源或上拉电阻接到正电压。如果不传输数据 SDA

26、 和 SCL 均为高电平。MFR522 有一个三态输出级来执行线与功能。 五 STC89C52 芯片介绍(1)MCS-51 系列单片机在超低功耗和功能集成等方面有明显的特点。具备适合应用在电池供电的便携式装置、超长时间连续工作的设备等领域的特点,14更具有开发方便、可以现场编程等优点。STC89C52RC 内置 8K 的 Flash 存储器和 512 字节 RAM,具有 3 个 16 位计数器和一个标准的串行通信口,支持 ISP程序下载方便程序的调试,此外它还具有良好的温度特性、稳定性和性价比。(2)引脚图 5123456789101112131415161718192040393837363

27、53433323130292827262524232221 T2/P1.0 T2EX/P1.1 P1.2 P1.3P1.4P1.5P1.6 P1.7 RST RXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3 T0/P3.4 T1/P3.5WR/P3.6RD/P3.7XTAL2XTAL1GNDVCCP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7EA/VPPALE/PROGPESNP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0

28、/A815(3)如图 4 所示为 STC89C52RC 单片机的管脚图。VCC(40 引脚):电源电压VSS(20 引脚):接地P0 端口(P0.0P0.7,3932 引脚):P0 口是一个漏极开路的 8 位双向I/O 口。作为输出端口,每个引脚能驱动 8 个 TTL 负载,对端口 P0 写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0 口也可以提供低 8 位地址和 8 位数据的复用总线。此时,P0 口内部上拉电阻有效。在 Flash ROM 编程时,P0 端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1 端口(P1.0P1.7,18 引脚)

29、:P1 口是一个带内部上拉电阻的 8 位双向 I/O 口。P1 的输出缓冲器可驱动(吸收或者输出电流方式)4 个 TTL 输入。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1 口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。此外,P1.0 和 P1.1 还可以作为定时器/计数器 2 的外部技术输入(P1.0/T2)和定时器/计数器 2 的触发输入(P1.1/T2EX) 。在对 Flash ROM 编程和程序校验时,P1 要接收低 8 位地址。P2 端口(P2.0P2.7,2128 引脚):P2 口是一个带内部上拉电阻的 8位双向 I/O

30、 端口。P2 的输出缓冲器可以驱动(吸收或输出电流方式)4 个 TTL输入。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2 作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器和 16 位地址的外部数据存储器(如执行“MOVX DPTR”指令)时,P2 送出高 8 位地址。在访问 8 位地址的外部数据存储器(如执行“MOVX R1”指令)时,P2 口引脚上的内容(就是专用寄存器(SFR)区中的 P2 寄存器的内容) ,在整个访问期间不会改变。在对 Flash ROM 编程和程序校验期间,P2 也接收高位地址和一些控

31、制信号。P3 端口(P3.0P3.7,1017 引脚):P3 是一个带内部上拉电阻的 8 位双向 I/O 端口。P3 的输出缓冲器可驱动(吸收或输出电流方式)4 个 TTL 输入。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。16P3 做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。在对 Flash ROM 编程或程序校验时,P3 还接收一些控制信号。P3 口除作为一般 I/O 口外,还有其他一些复用功能,如表 6 所示: 表 6RST(9 引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作

32、。看门狗计时完成后,RST 引脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。ALE/PROG(30 引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在 Flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址位 8EH 的 SFR 的第 0 位置“1” ,ALE 操作将无效。这一

33、位置“1” ,ALE 仅在执行 MOVXP 或 MOV 指令时有效。否则,ALE 将被微弱拉高。这个 ALE 使能标志位(地址位 8EH 的SFR 的第 0 位)的设置对微控制器处于外部执行模式下无效。PSEN(29 引脚):外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89C51RC 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而访问外部数据存储器时,PSEN 将不被激活。引脚号P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断 0)P3.3INT1(外部中断 1)P3.4T0(定时器 0 的外部输入)P3.5T1

34、(定时器 1 的外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)17EA/VPP(31 引脚):访问外部程序存储器控制信号。为使能从 0000H到 FFFFH 的外部程序存储器读取指令,EA 必须接 GND。注意加密方式 1 时,EA 将内部锁定位 RESET。为了执行内部程序指令,EA 应该接 VCC。在 Flash编程期间,EA 也接收 12 伏 VPP 电压。XTAL1(19 引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18 引脚):振荡器反相放大器的输入端。六 LCD1602 芯片(1)工业字符型液晶,能够同时显示 16x02 即

35、32 个字符。(16 列 2 行) 1602 液晶也叫 1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义 CGRAM,显示效果也不好)。 1602LCD 是指显示的内容为 16X2,即可以显示两行,每行 16 个字符液晶模块(显示字符和数字)。 (2)引脚图1812345678910111213141516VSSVCCVORSR/WEDB0DB1DB2DB3DB

36、4DB5DB6DB7BLABLKLCD1602 (3)1602 采用标准的 16 脚接口,其中: 第 1 脚:VSS 为电源地 第 2 脚:VCC 接 5V 电源正极 第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度)。 第 4 脚:RS 为寄存器选择,高电平 1 时选择数据寄存器、低电平 0 时选择指令寄存器。 第 5 脚:RW 为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。19 第 6 脚:E(或 EN)端为使能(enable)端,高电平(1)时读取信息,

37、负跳变时执行指令。 第 714 脚:D0D7 为 8 位双向数据端。 第 1516 脚:空脚或背灯电源。15 脚背光正极,16 脚背光负极。7、软件设计 MAIN.C#include reg52.h#include main.h#include mfrc522.h#include /M1 卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令/4 字节金额(低字节在前)4 字节金额取反4 字节金额1 字节块地址1 字节块地址取反1 字节块地址1 字节块地址取反 unsigned char code data24 = 0 x12,0,0,0;unsigned char code Defaul

38、tKey6 = 0 xFF, 0 xFF, 0 xFF, 0 xFF, 0 xFF, 0 xFF;/校验密码 unsigned char g_ucTempbuf20; unsigned char idata MLastSelectedSnr4;unsigned char idata RevBuffer30; unsigned char data SerBuffer20;unsigned char data money20=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50;/最后的 50 就是卡上的金额可以修改void com(unsigned char com);void da

39、t(unsigned char dat);void delay(unsigned char x); bit CmdValid; unsigned char status;/系统初始化/void InitializeSystem() P0 = 0 xFF; P1 = 0 xFF; P3 = 0 xFF; ET2 = 0; /80c52 比 80C51 多一个定时器 T2 ET2 为定时计数器 2 的溢出中断允许位20T2CON = 0 x04;/外部中断 1 的中断触发方式控制位 边沿触发方式 下降沿有效触发 PCON = 0 x80; /电源控制寄存器波特率的选择位 SOMD ,波特率在原来的

40、基础上加倍 SCON = 0 x70; /串行口控制寄存器 SM0 SM1=01 工作与方式 1 10 位异步收发 TMOD = 0 x21; /TMOD = 0 x22;定时器工作于方式 2 ,波特率发生方式 TH1 = BAUD_9600; /波特率为 9600 位每秒 方式 2 的波特率为定值TL1 = TH1;/自动重装 TH1=TL1TR1 = 1; / 波特率发生器TH0 = 0 x60; TL0 = 0 x60;/通过初值设定可知初值 TR0 = 0; /定时器运行控制位 ET0=0; /中断允许位ET1=0;EA=1; /中断允许总控制位EX0=1; /外部中断 0 中断允许位

41、IT0 = 1; /外部中断 0 触发方式控制位 边沿触发方式 下降沿有效触发TR2=0;/定时器 2 起停控制位 ES = 1; /串行口中断允许位CmdValid=0; LED_GREEN = 1; /设置 LED 的显示初值L PcdReset(); PcdAntennaOff(); PcdAntennaOn(); M500PcdConfigISOType( A );/用 T2 做延时子程序/*/21void main( ) unsigned char baud,t=0,flag=5; InitializeSystem( );LCDinit();xs(); while (1) statu

42、s= PcdRequest(0 x26,&RevBuffer2);/寻卡if(status=MI_OK)status = PcdAnticoll(&RevBuffer2);/防冲撞memcpy(MLastSelectedSnr,&RevBuffer2,4);if(status=MI_OK) status = PcdSelect(&RevBuffer2);/选定卡片if(status=MI_OK) status = PcdAuthState(0 x60, 1, DefaultKey, MLastSelectedSnr);/ 校验卡密码if(status=MI_OK

43、)status =PcdRead(0 x01,&RevBuffer2); /读卡if (status = MI_OK)status =PcdWrite(0 x01,money); /写卡if (status = MI_OK)com(0 x85);dat(money15/10+0);dat(money15%10+0);if(t=0)bell=0;t=1;money15-;22com(0 xc5);dat(money15/10+0);dat(money15%10+0); elsestatus= PcdRequest(0 x26,&RevBuffer2);/寻卡if(status!=

44、MI_OK)t=0;flag-;if(flag=0)bell=1;flag=5; 子程序 RC522.C#include #include reg52.h #include main.h#include mfrc522.h#include #define MAXRLEN 18 void com(unsigned char com);23void dat(unsigned char dat); void delay(unsigned char x); /功 能:寻卡/参数说明: req_codeIN:寻卡方式/ 0 x52 = 寻感应区内所有符合 14443A 标准的卡/ 0 x26 = 寻未进

45、入休眠状态的卡/ pTagTypeOUT:卡片类型代码/ 0 x4400 = Mifare_UltraLight/ 0 x0400 = Mifare_One(S50)/ 0 x0200 = Mifare_One(S70)/ 0 x0800 = Mifare_Pro(X)/ 0 x4403 = Mifare_DESFire/返 回: 成功返回 MI_OK/char PcdRequest(unsigned char req_code,unsigned char *pTagType) char status; unsigned int unLen; unsigned char ucComMF522B

46、ufMAXRLEN; / unsigned char xTest ; ClearBitMask(Status2Reg,0 x08); WriteRawRC(BitFramingReg,0 x07);/ xTest = ReadRawRC(BitFramingReg);/ if(xTest = 0 x07 ) / LED_GREEN =0 ; / else LED_GREEN =1 ;while(1) SetBitMask(TxControlReg,0 x03); ucComMF522Buf0 = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucC

47、omMF522Buf,1,ucComMF522Buf,&unLen);/ if(status = MI_OK )/ LED_GREEN =0 ;/ else LED_GREEN =1 ; if (status = MI_OK) & (unLen = 0 x10)24 *pTagType = ucComMF522Buf0; *(pTagType+1) = ucComMF522Buf1; else status = MI_ERR; return status;/功 能:防冲撞/参数说明: pSnrOUT:卡片序列号,4 字节/返 回: 成功返回 MI_OK/ char PcdAnt

48、icoll(unsigned char *pSnr) char status; unsigned char i,snr_check=0; unsigned int unLen; unsigned char ucComMF522BufMAXRLEN; ClearBitMask(Status2Reg,0 x08); WriteRawRC(BitFramingReg,0 x00); ClearBitMask(CollReg,0 x80); ucComMF522Buf0 = PICC_ANTICOLL1; ucComMF522Buf1 = 0 x20; status= PcdComMF522(PCD_

49、TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen); if (status = MI_OK) for (i=0; i4; i+) 25 *(pSnr+i) = ucComMF522Bufi; snr_check = ucComMF522Bufi; if (snr_check != ucComMF522Bufi) status = MI_ERR; SetBitMask(CollReg,0 x80); return status;/功 能:选定卡片/参数说明: pSnrIN:卡片序列号,4 字节/返 回: 成功返回 MI_OK/char Pcd

50、Select(unsigned char *pSnr) char status; unsigned char i; unsigned int unLen; unsigned char ucComMF522BufMAXRLEN; ucComMF522Buf0 = PICC_ANTICOLL1; ucComMF522Buf1 = 0 x70; ucComMF522Buf6 = 0; for (i=0; i4; i+) ucComMF522Bufi+2 = *(pSnr+i); ucComMF522Buf6 = *(pSnr+i);/ CalulateCRC(ucComMF522Buf,7,&

51、;ucComMF522Buf7); ClearBitMask(Status2Reg,0 x08);26 status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen); if (status = MI_OK) & (unLen = 0 x18) status = MI_OK; else status = MI_ERR; return status;/功 能:验证卡片密码/参数说明: auth_modeIN: 密码验证模式/ 0 x60 = 验证 A 密钥/ 0 x61 = 验证 B 密钥 / a

52、ddrIN:块地址/ pKeyIN:密码/ pSnrIN:卡片序列号,4 字节/返 回: 成功返回 MI_OK/ char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) char status; unsigned int unLen; unsigned char i,ucComMF522BufMAXRLEN; ucComMF522Buf0 = auth_mode; ucComMF522Buf1 = addr; for (i=0; i6; i+) u

53、cComMF522Bufi+2 = *(pKey+i); for (i=0; i6; i+) ucComMF522Bufi+8 = *(pSnr+i);/ / memcpy(&ucComMF522Buf2, pKey, 6); / memcpy(&ucComMF522Buf8, pSnr, 4); 27 status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen); if (status != MI_OK) | (!(ReadRawRC(Status2Reg) & 0 x08) s

54、tatus = MI_ERR; return status;/功 能:读取 M1 卡一块数据/参数说明: addrIN:块地址/ pDataOUT:读出的数据,16 字节/返 回: 成功返回 MI_OK/ char PcdRead(unsigned char addr,unsigned char *pData) char status; unsigned int unLen; unsigned char i,ucComMF522BufMAXRLEN; ucComMF522Buf0 = PICC_READ; ucComMF522Buf1 = addr; CalulateCRC(ucComMF52

55、2Buf,2,&ucComMF522Buf2); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if (status = MI_OK) & (unLen = 0 x90) / memcpy(pData, ucComMF522Buf, 16); for (i=0; i16; i+) *(pData+i) = ucComMF522Bufi; else status = MI_ERR; 28 return status;/功 能:写数据到 M1 卡一块/参数说明: addr

56、IN:块地址/ pDataIN:写入的数据,16 字节/返 回: 成功返回 MI_OK/ char PcdWrite(unsigned char addr,unsigned char *pData) char status; unsigned int unLen; unsigned char i,ucComMF522BufMAXRLEN; ucComMF522Buf0 = PICC_WRITE; ucComMF522Buf1 = addr; CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2); status = PcdComMF522(PCD_TR

57、ANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucComMF522Buf0 & 0 x0F) != 0 x0A) status = MI_ERR; if (status = MI_OK) /memcpy(ucComMF522Buf, pData, 16); for (i=0; i16; i+) ucComMF522Bufi = *(pData+i); CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf16);

58、 status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen); if (status != MI_OK) | (unLen != 4) | (ucComMF522Buf0 & 0 x0F) != 0 x0A) status = MI_ERR; 29 return status;/功 能:命令卡片进入休眠状态/返 回: 成功返回 MI_OK/char PcdHalt(void) char status; unsigned int unLen; unsigned char ucComMF522

59、BufMAXRLEN; ucComMF522Buf0 = PICC_HALT; ucComMF522Buf1 = 0; CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); return MI_OK;/用 MF522 计算 CRC16 函数/void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOut

60、Data) unsigned char i,n; ClearBitMask(DivIrqReg,0 x04); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0 x80); for (i=0; ilen; i+) WriteRawRC(FIFODataReg, *(pIndata+i); WriteRawRC(CommandReg, PCD_CALCCRC);30 i = 0 xFF; do n = ReadRawRC(DivIrqReg); i-; while (i!=0) & !(n&0 x04); pOutData0 = ReadRawRC(CRCResultRegL); pOutData1 = ReadRawRC(CRCResultRegM);/功 能:复位 RC522/返 回: 成功返回 MI_OK/char PcdRe

温馨提示

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

评论

0/150

提交评论