找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3709|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)與FM1702SL交互讀寫IC卡,CPU卡的源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:811568 發(fā)表于 2020-8-5 16:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
FM1702SL交互讀寫IC卡,CPU卡的源代碼。
大家自行測試,讀寫M1卡,還有復(fù)旦的CPU卡

單片機(jī)源程序如下:
  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://版本確認(rèn)

  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://關(guān)射頻

  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 認(rèn)證
  107.                
  108.                 for(i=0;i<12;i++)
  109.                 temp[i]=serial_data_buffer[i+1];        //12字節(jié) 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黑下載附件…………
復(fù)制代碼

本人初學(xué),僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
fm1702_cpu_des.rar (198.58 KB, 下載次數(shù): 79)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1044848 發(fā)表于 2022-9-28 07:50 | 只看該作者
,不是stm32的,是89x52的
回復(fù)

使用道具 舉報

板凳
ID:471389 發(fā)表于 2023-6-29 09:49 | 只看該作者
如果可以讀CPU卡 那很牛逼了
回復(fù)

使用道具 舉報

地板
ID:602844 發(fā)表于 2023-12-4 18:02 | 只看該作者
研究研究
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表