引言
如今针对小型企业开发的消费卡管理系统还比较少,基于这一背景,本文研究了一种成本低廉、稳定性高的消费卡管理系统,具有较强的实用性和广阔的市场前景。
1 系统总体结构
小型消费卡管理系统总体结构包括两部分。第一部分是以单片机为核心控制器件的消费卡识别系统,通过单片机对射频卡读写器、液晶屏、LED、蜂鸣器、按键等器件的控制,实现对消费卡的识别。第二部分是在计算机上建立的消费卡管理系统,系统使用SQL Server 2008软件建立卡信息数据库,使用Visual studio 2008软件建立用户操作界面,实现对消费卡信息的管理。计算机利用单片机串口通信实现数据交换,保证卡内存储的数据与数据库中信息一致。图1为小型消费卡管理系统的总体结构。
2 系统硬件设计
小型消费卡管理系统的设计包括硬件和软件两部分。系统硬件设计采用模块化设计思想,即按照功能将硬件分成各个模块,参考成熟设计逐一实现。模块化设计思路清晰,易于查错和更改,有利于扩充新功能。系统硬件的各个模块如图1左边部分所示。

图1 小型消费卡管理系统总体结构
2.1 微控制器模块
系统采用Atmel公司生产的AT89S52单片机作为硬件核心控制器。该单片机是一种低功耗、高性能的8位微控制器,拥有8 KB的在线可编程Flash存储器,256 B的RAM,3个16位定时器/计数器,可选时钟频率0~33 Hz。微控制器模块主要包括:单片机最小系统、ISP(在线系统编程)模块和电源模块。其中,单片机最小系统包括单片机、复位电路和晶振电路,单片机晶振频率采用22.118 4 MHz。ISP程序下载电路采用Atmel公司标准ISP10针接口,ISP模块同时也可以为单片机供电。电源模块可以利用ISP模块为系统供电,也可以外接+5 V开关电源。微控制器模块还控制12864液晶屏、蜂鸣器(Beep)、按键(Key)、LED灯等。图2给出了微控制器模块电路原理图。

图2 微控制器模块电路原理图
2.2 射频卡读写模块
系统采用广州辰明智能卡科技有限公司生产的CM018射频卡读写模块,CM018射频卡读写模块主要由FM1702芯片、P89LPC922单片机、3.3 V稳压芯片1117M3和天线组成。图3为系统中射频卡读写模块工作示意图。
选用高集成度、低功耗的P89LPC922单片机控制FM1702芯片,完成FM1702芯片指令的编程,实现SPI总线向I2C总线的转变,不仅减轻主控AT89S52单片机控制压力,而且通过I2C总线控制读写模块节约I/O资源,提高编程效率。考虑P89LPC922单片机和其控制的FM1702芯片工作电压均为3.3 V,为了使供电电压为5 V的主控单片机对读写模块进行控制,采用了3.3 V稳压芯片1117M3。主控单片机对射频卡读写模块控制时,输入的5 V电压通过稳压芯片1117M3转换成可供读写模块使用的3.3 V电压。图4给出了射频卡读写模块工作原理图。
射频卡读写模块中还集成了天线,天线设计包括EMC滤波电路、接收电路和天线的匹配。滤波电路中,由L1、C9和L2、C11组成的低通滤波器可有效去除振荡器产生的高次谐波:

得到滤波器截止频率略高于读写模块工作频率13.56 MHz,低于高次谐波频率,可以有效抑制高频谐波成分,通过天线发射到周围环境中。接收电路推荐使用芯片内部产生的VMID作为RX引脚输入信号的偏置,电路由R1、R2、C14、C15组成,原理图中给出了阻值和容值。天线的匹配主要是确定电容C8、C10、C12、C13的容值,容值主要依赖于天线的电性能以及环境影响。实际中,根据式(2)估算出线圈的电感[6],然后在FM1702芯片手册中查表可以得到电容的参考值,为了优化性能,准确地取值必须通过调试来获得。

其中,l为一圈导线的长度;D为线圈宽度或者PCB板覆铜宽度;K为天线形状系数(圆形状K=1.07,矩形K=1.47);N为天线匝数。计算得到L为天线的电感,单位为nH。

图3 射频卡读写模块工作示意图

图4 射频卡读写模块电路原理图
射频卡读写模块工作原理是:射频卡读写模块向IC卡发送一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写模块发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2 V时,此电容可作为电源为其他电路提供工作电压,将卡内数据发射出去或接收读写模块的数据。
针对其他模块,系统采用基于RS232标准的串口通信模块;带有中文字库的12864液晶作为LCD显示模块;采用5 V有源蜂鸣器作为声音模块;采用3个独立式按键作为辅助功能控制器件;采用4个LED作为功能提示的指示灯。这些模块都有成熟的设计电路供参考。
3 系统软件设计
3.1 单片机程序设计
单片机程序设计采用C语言在Keil软件中编程。图5给出单片机主程序流程图。系统上电后,对定时器、液晶、串口和读写模块进行初始化,蜂鸣器长鸣表示系统完成准备工作并处于稳定状态。系统运行中,读写模块始终检测是否有卡操作,在循环语句中通过检测TagSta的状态来判断是否有卡操作。每张M1 S50卡具有4字节唯一的卡号,存储空间分为16个扇区(sector),每个扇区有4个块(block),包括前三个数据块和最后的控制块,每块可存储16字节数据,总共可以存储1 KB信息。每一个扇区都具有独立的A套密码和B套密码供选择,各自占用6个字节,具备了良好的保密性和多用途性。
单片机和计算机通过串口通信进行数据交换,采用串口工作方式1,波特率9 600 bps。数据传输中关键的问题是确保数据的正确,数据以数据包形式传输,传输时按照规定的通信协议来传输。
通信协议中定义了数据包传输格式,一般包括起始标志码、数据长度、功能码、传输数据和校验码。校验方式有很多种, CRC-16(循环冗余)校验[7]广泛应用于测控及通信领域,占两个字节,C语言程序的实现主要包括直接计算法和查表法,为减轻单片机计算量,系统采用CRC16查表法来实现。
3.2 计算机程序设计

图5 单片机控制程序流程图
计算机程序设计包括使用SQL Server 2008建立的信息数据库和使用Visual Studio2008软件开发的消费卡信息管理系统。SQL(Structured Query Language)是一种标准化的语言,它能够轻松存储、更新和存取信息。数据库使用SQL语句进行创建[8],建立过程快速,具有可靠和使用方便的特点。数据库总共创建了用户登录信息Log User、卡信息Card、卡的使用情况Card Using、身份信息Person Identity和消费记录Consume 5个表。图6给出这些表的具体内容、主键和相互关系图。LoginLevel指的是登录角色,包括消费者、操作者和管理员;State指的是卡状态,包括正常、挂失、注销;CardID指的是IC卡固有的卡号,占4个字节,为了方便使用,将其转换成十进制数保存;ConsumeType指的是对消费和充值的编码,Boolean类型,True表示充值,False表示消费。

图6 数据库关系图
信息管理系统主要是提供一个操作界面,对数据库中的数据进行管理,同时与单片机进行数据交换,保证卡内存储的数据与数据库中信息一致。系统通过8个模块来实现:连接数据库模块、用户登录模块、密码修改模块、卡信息管理模块、消费者信息管理模块、消费/充值模块、消费记录查询模块、串口通信模块。
连接数据库模块通过ADO技术访问数据库,ADO(ActiveX Data Object)是Microsoft开发数据库应用程序的面向对象的新口,它具有面向对象的特点[9],这里使用预处理指令#import进行ADO编程。用户登录模块主要作用是选定不同的角色,验证登陆账号和密码信息,图7给出消费卡管理系统登录界面。

图7 消费卡管理系统登录界面
密码修改模块提供密码修改功能。卡信息管理模块包括新建卡、注销卡、卡的挂失、卡的解锁、卡的有效期设置等操作,图8给出消费卡信息管理界面。串口通信模块利用成熟的串口类CnComm来实现与计算机的串口通信[10]。

图8 消费卡信息管理界面
结语
经过实验验证,系统利用单片机控制技术、RFID技术、数据库管理技术实现了消费卡管理系统的应用。经过固化单片机程序和外形包装设计即可生产出产品,针对于小型企业规模小、资金有限的情况,该产品只需配合一台计算机即可工作,降低了添置附加专有设备的成本,可广泛应用于消费领域。