微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 非接触公交IC卡读写器的应用设计

非接触公交IC卡读写器的应用设计

时间:11-30 来源:互联网 点击:

、售卡日期、售卡总金额和售卡总记录数;在车载机中主要存放乘客IC卡号、司机号和刷卡总数等信息。显示用MC14499驱动4位共阴数码管。正常工作后,每隔一段时间要把读写器拿到公交管理中心将读写器储存的信息回放到PC机中保存处理。读写器中存储器可采用24C64,其存储量为8KB,如有需要也可用容量更大的存储器如24C128或24C256等。

(5)监控电路

监控电路采用DS1232L芯片。它是个看门狗定时器,其功能是:上电和掉电时给89C52产生RESET信号;看门狗对系统进行监控,防止死机。

(6)非接触式IC卡

非接触式IC卡选用Mifare卡。其工作频率为 13.6MHz,存储量为1KB分16区,每区2套密码,每个区的存储区域相互独立,因此每区可用作一种用途(第0区一般不用)以实现一卡多用。由于Mifare卡密码验证机制严密,保存的信息比较可靠安全,可以擦写几万次。

Mifare卡的16个区,每区又分4块,每块16字节。在售卡机中用第1区作用户储值块,其中第0块存放身份号,第1~2块存放价值,第3块存放两套6字节密码和4字节读写访问条件。
 

四、程序设计

下面以售卡机为主介绍软件设计方法。

考虑到售卡金额的安全管理,公交公司事先必须制作好两种IC票卡:一种是用户IC票卡,另一种是售卡员的售票IC卡。这两种卡可使用相同区号,但密码和访问条件完全不同,不会混淆。售卡员要进行售卡时,必须先到公交公司办理一张售票IC卡,才有售卡的资格。售票IC卡内存放了售卡员身份号、允许售卡的最大金额、两套6字节密码和4字节读写访问条件。售卡员售卡时,每充值一张卡必须从自己的售票IC卡中减去售卡金额,加到用户IC卡中。当售票IC卡金额减到零后,要到公交公司结账,并再对售票IC卡充值记账。这样,可使公交公司的售卡网点分布得多而不乱,又可方便用户充值加卡,可有效地防止售票人员账目不清而造成的资金流失。程序主要包括IC卡读写操作程序、键盘扫描程序、显示程序、存储器读写程序和通信程序。

1.主程序

主程序主要完成系统变量的初始化,循环扫描键盘,检测操作IC卡,将操作结果存储和显示。在售卡机中使用了8KB的24C64作存储器,主要存储的内容有:售卡机机号(1字节)、售卡总金额(3字节)和总记录(2字节)。售出的每张卡的记录包含:用户卡身份号(4字节)、售卡日期(2字节)、加卡金额(1字节)和售卡人编号(1字节)。因此最大能存储1023张售卡记录。主程序流程如图2所示,读写器对IC卡的操作流程如图3所示。
 

2.键盘扫描程序

键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将它们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,它的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下:

KEY: MOV P2,#0FH ;用反转法查键
MOV A,P2
ANL A,#0FH
MOV B,A
MOV P2,#0F0H
MOV A,P2
ANL A,#0F0H
ORL A,B
CJNE A,#0FFH,KEY1
RET ;无键按下
KEY1: MOV B,A ;有键按下,存键码
MOV DPTR,#TABLE
MOV R3,#0FFH ;存顺序码单元初始化
KEY2: INC R3
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY3 ;判键码,求顺序码
MOV A,R3 ;若找到键码,存顺序码
RET
KEY3: CJNE A,#0FFH,KEY2;判是否查完
RET ;已查完,键码未找到,以无按键处理
TABLE: DB 77H,7BH,0BBH ;按键特征码表
DB 0DBH,7DH,0BDH
DB 0DDH,7EH,0BEH
DB 0DEH,0B7H,0D7H
DB 0EEH,0EDH,0EBH
DB 0E7H,0C7H,0FFH

3.显示程序

根据图1,在显示电路中,用P1口的3根I/O口线(P1.0、P1.1、P1.2)分别提供时钟信号(CLK)、串行数据(DA)和使能信号(EN)。MC14499每一次可接收20位串行输入数据,前4位用于控制数码管的小数点显示,后16位是4个数码管的BCD码输入数据。在每帧数据传送之前,必须将EN置0;然后传送20位数据,数据传送完后,再将EN置1。显示程序如下:

DISP: CLR P1.0 ; 清CLK
CLR P1.2 ;清EN
MOV R2,#04 ;置传送位数
MOV A,#00
LCALL W14499 ;调送数显示
MOV A,@R1 ;读要显示的数
MOV R2,#08 ;置传送位数
LCALL W14499
INC R1
MOV A,@R1
MOV R2,#08 ; 置传送位数
LCALL W14499
SETB P1.2 ;置EN位
RET
W14499: SETB P1.0 ; 清CLK
RLC A ;准备逐位送数显示
MOV P1.1,C ; 将数移入DA
CLR P1.0 ; 清CLK
DJNZ R2,W14499
RET

4.串行E2PROM读写程序

24C64为I2C总线的E2PROM。SCL为400kHz时钟线,SDA为双向数据线,A2、A1、A0三位为片选地址

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top