找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2968|回复: 3
收起左侧

51单片机与FM1702SL交互读写IC卡,CPU卡的源代码

[复制链接]
ID:811568 发表于 2020-8-5 16:30 | 显示全部楼层 |阅读模式
FM1702SL交互读写IC卡,CPU卡的源代码。
大家自行测试,读写M1卡,还有复旦的CPU卡

单片机源程序如下:
  1. /*************************************************************/

  2. /*===========================================================*/
  3. #include "at89x52.h"
  4. #include "intrins.h"
  5. #include "pin.h"
  6. #include "fm17xx.h"
  7. #include "psam.h"
  8. #include <string.h>
  9. unsigned char mac_data[4];
  10. unsigned char dat,add,i,len,initdata[8],insdata[64],mac_key[16];
  11. void timer_uart_init();
  12. void io_init();
  13. void timer0_int();

  14. void beep(unsigned char beep_time);
  15. unsigned int time1,time2;
  16. void main()
  17. {
  18.         
  19.         io_init();
  20.         timer_uart_init();

  21. while(1)
  22.      {
  23.                                                 
  24.      while(serial_receive_finish_flag==1)
  25.           {
  26.         serial_receive_finish_flag=0;
  27.         switch(serial_data_buffer[0])
  28.         {
  29.         case 0x0://版本确认

  30.                 serial_data_buffer[1]=0x46;//F
  31.                 serial_data_buffer[2]=0x4D;//M
  32.                  serial_data_buffer[3]=0x31;//1
  33.                 serial_data_buffer[4]=0x37;//7
  34.                 serial_data_buffer[5]=0x58;//X
  35.                 serial_data_buffer[6]=0x58;//X
  36.                 serial_data_buffer[7]=0x20;//
  37.                 serial_data_buffer[8]=0x76;//V
  38.                 serial_data_buffer[9]=0x31;//1
  39.                 serial_data_buffer[10]=0x2E;//.
  40.                 serial_data_buffer[11]=0x30;//0
  41.                 serial_data_length=11;

  42.                 uart_send();
  43.                 break;
  44.         
  45.         case 0x1://FM17XX 初始化
  46.                 serial_data_buffer[1]=FM17XX_Init();
  47.                 serial_data_buffer[2]=SPI_Init();
  48.                 Rf_On();
  49.                 PCB=0x00;
  50.                 serial_data_length=2;
  51.                 uart_send();
  52.                 break;

  53.         case 0x2://PC读取FM17XX所有地址
  54.                 for(i=0;i<0x3f;i++)
  55.                 {
  56.                 serial_data_buffer[i+1]=SPIRead(i);
  57.                 }
  58.                 serial_data_length=63;
  59.                 uart_send();

  60.                 break;




  61.         case 0x3://PC读取FM17XX地址
  62.         
  63.                 add=serial_data_buffer[1];
  64.         
  65.                 serial_data_buffer[1]=SPIRead(add);
  66.                 serial_data_length=1;
  67.                 uart_send();

  68.                 break;
  69.         case 0x4://PC写入FM17XX地址
  70.                                 
  71.                 add=serial_data_buffer[1];
  72.                 dat=serial_data_buffer[2];
  73.         
  74.                 SPIWrite(add,dat);
  75.                 serial_data_length=1;
  76.                 uart_send();

  77.                 break;

  78.         case 0x5://关射频

  79.                
  80.                 Rf_Off();
  81.                 serial_data_length=1;
  82.                 uart_send();

  83.                 break;


  84.         case 0x6://寻卡,防冲突,选卡

  85.         //        serial_data_buffer[1]=Halt();
  86.                 Rf_On();
  87.                 if(serial_data_buffer[1]==0x0)
  88.                         serial_data_buffer[2]=Request(Req_Std);//寻卡 Standard
  89.                 else
  90.                         serial_data_buffer[2]=Request(Req_Wakeup);//寻卡 Wakeup
  91.         
  92.                 serial_data_buffer[3]=tagtype[0];        
  93.                 serial_data_buffer[4]=tagtype[1];

  94.                 for(i=0;i<4;i++)
  95.                 UID[i]=0;
  96.                 serial_data_buffer[5]=AntiColl();
  97.                 serial_data_buffer[6]=UID[0];
  98.                 serial_data_buffer[7]=UID[1];
  99.                 serial_data_buffer[8]=UID[2];
  100.                 serial_data_buffer[9]=UID[3];

  101.                 serial_data_buffer[10]=Select_Card();
  102.                 serial_data_buffer[11]=SAK;
  103.                 serial_data_length=11;
  104.                 uart_send();

  105.                 break;

  106.         case 0x7://Mifare 认证
  107.                
  108.                 for(i=0;i<12;i++)
  109.                 temp[i]=serial_data_buffer[i+1];        //12字节 key
  110.                 serial_data_buffer[1]=mifare_loadkey(temp);
  111.                 serial_data_buffer[2]=mifare_auth(serial_data_buffer[13],serial_data_buffer[14]);
  112.                
  113.                 serial_data_length=2;
  114.                 uart_send();
  115.                 break;
  116.         case 0x8://Mifare 读块
  117.                
  118. ……………………

  119. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
fm1702_cpu_des.rar (198.58 KB, 下载次数: 76)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1044848 发表于 2022-9-28 07:50 | 显示全部楼层
,不是stm32的,是89x52的
回复

使用道具 举报

ID:471389 发表于 2023-6-29 09:49 | 显示全部楼层
如果可以读CPU卡 那很牛逼了
回复

使用道具 举报

ID:602844 发表于 2023-12-4 18:02 | 显示全部楼层
研究研究
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表