非接触式ic卡读卡模块

  非接触式ic卡读卡模块实验:非接触式IC卡也称为射频卡,或称为感应式IC,它通过射频电磁感应从读写设备获取能量和交换数据,读写操作时只需要将卡片放在可读写器附近一定距离之内就能够实现数据交换,使用方便快捷,不易损坏。这类IC卡可用于存取频繁,可靠性要求高的场合。非接触式IC 卡自问世以来,以其方便快捷的读写方式和灵活的适应性,备受用户和系统集成商的青睐。

  非接触IC卡读写电路主要包括三个部分,单片机控制部分,RS-232接口转换部分以及IC卡读写模块H6152接口部分。单片机的晶振选用11.0592MHz,以得到稳定的波特率,尽量避免积累误差和波特错误引发的读写。红色发光管用于卡片读写错误时的指示。

  一. 实验目的

  通过本实验学习ZLG500A 读卡模块的应用方法,了解射频读卡器在门禁系统、

  电子交费等领域的应用技术。
 

  二. 实验设备及器件

  IBM PC 机 一台

  DP-51PROC 单片机综合仿真实验仪 一台

  RC500A 非接触式ic卡读卡模块 一套
 

  三. 实验内容

  1. 编写程序,通过单片机的I/O 口控制ZLG500A 模块的用户接口,实现对射频卡

  的读写控制。

  2. 编写一个读卡程序,检测射频卡的等待读取。

 

非接触式ic卡读卡模块
 

  四. 实验要求

  掌握ZLG500A 模块三线SPI 总线接口的应用,初步了解射频读卡的工作原理和应用范围。

 

  五. 实验步骤

  1. 参考以下的电路图连接电路接口,使用导线将A2 区的P10、P11、P12、INT0

  接线柱与B2 区的SCLK、SDATA、MF_RST、SS 接口一一对应连接,然后连接

  ZLG500A 报警输出连接到LED 指示灯和B5 区的无源蜂鸣器上。连接5V 电源输入。

  2. 运行编写好的软件程序,等待读取射频卡。将卡放到天线附近即可听到响声,说明读卡成功。
 

  六. 实验预习要求

  整理本节的实验内容,掌握RC500A非接触式ic卡读卡模块的基本应用技术,提前做好实验准备工作。
 

  七. 实验参考程序

  /*****读卡参考测试程序******/

  #include "zlg500.h"

  sbit zlg500_RST =P1^2;

  uchar code Nkey_a[6] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5};

  uchar code Nkey_b[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

  main()

  {

  uchar idata tt[2];

  uchar idata card_snr[4];

  uchar idata size;

  uchar idata bankdata[16];

  long idata value=1;

  uchar i,j;

  zlg500_RST =1; //模块复位

  for(i=255;i>0;i--)

  for(j=255;j>0;j--);

  zlg500_RST =0;

  for(i=255;i>0;i--)

  for(j=255;j>0;j--);

  spi_init();

  EA=1;

  i=mifs_config(); //模块配置

  i=mifs_get_info(bankdata); //读信息

  i=mifs_clr_control_bit();

  i=mifs_set_control_bit();

  while(1)

  {

  while(mifs_request(IDLE,tt)!=0); //请求

  if(mifs_anticoll(0,card_snr)!=0) continue;//防碰撞

  if(mifs_select(card_snr,&size)!=0) continue;//选择

  if(mifs_authKey(KEYA,5,Nkey_b)!=0) continue;//证实

  bankdata[0]=0x10;

  bankdata[4]=~0x10;

  bankdata[8]=0x10;

  for(i=1;i<4;i++)

  {

  bankdata[i]=0x00;

  bankdata[4+i]=0xff;

  bankdata[8+i]=0x00;

  }

  bankdata[12]=0x14;

  bankdata[13]=~0x14;

  bankdata[14]=0x14;

  bankdata[15]=~0x14;

  if(mifs_write(20,bankdata)!=0) continue; //写一个值块

  if(mifs_check_write(card_snr,KEYA,20,bankdata)!=0)

  continue; //检查写

  if(mifs_read(20,bankdata)!=0) continue; //读回该块数据

  if(mifs_restore(20)!=0) continue; //恢复20 块数据

  if(mifs_transfer(21)!=0) //传送到21

  {

  i=0;

  continue;

  }

  if(mifs_value(0xc0,20,&value,21)!=0)

  {

  i=0;

  continue;

  }

  if(mifs_read(21,bankdata)!=0) continue; //读出

  mifs_halt(); //使模块进入HALT 状态

  if(mifs_write_E2(0x30,16,bankdata)!=0) continue;

  mifs_clr_control_bit();

  mifs_set_control_bit();

  for(i=255;i>0;i--)

  for(j=255;j>0;j--);

  mifs_buzzer(198,20); //输出蜂鸣器

  }

  }

关键词: