找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2890|回复: 3
打印 上一主题 下一主题
收起左侧

CV520 SourceCode rfid代码下载

[复制链接]
跳转到指定楼层
楼主
riid的代码   cv520的, 亲自测试通过


单片机源程序如下:
  1. #include "main.h"
  2. #include "stm32f10x_Init.h"
  3. #include "PCD.h"
  4. #include "string.h"
  5. #include "ISO14443.h"
  6. #include "History.h"
  7. #include <stdio.h>

  8. //------------------------------------------------------------------------------
  9. // Functions Define
  10. //------------------------------------------------------------------------------
  11. tpd_Card g_sCard;                                                // 射频卡
  12. unsigned char  g_cBuffer[256];                        // 通信缓存
  13. unsigned short g_iLength;

  14. unsigned char  g_cATS[32];
  15. unsigned char  g_cATSLen;

  16. const unsigned char g_cM1KEY[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};


  17. //系统需要读取卡片的全球唯一码(卡片的第0块)和会员编号数据(卡片的第1块),读卡密钥类型为A型(0x60) ,  密钥数据 6 Byte(0x16,0x81,0x68,0x16,0x81,0x68) 。

  18. //******************************************************************************
  19. //    PARAM: void
  20. //   RETURN: void
  21. //  COMMENT: 主程序
  22. //                  
  23. //******************************************************************************
  24. int main(void)
  25. {
  26.         unsigned char cStatus;
  27.         
  28.         // 初始化系统
  29.         InitializeSystem();
  30.         
  31.         // 初始化设备
  32.         InitDevice();
  33.         
  34.         do
  35.         {
  36.                 PiccReset();
  37.                
  38.                 // ISO14443A寻卡 判断卡类型
  39.                 // 选卡,防碰撞,
  40.                 cStatus = PiccRequest(PICC_REQALL, g_sCard.cATQ);
  41.         
  42.                 if (cStatus == ERR_SUCCESS)
  43.                 {
  44.                         cStatus = PiccAnticollSelect(&g_sCard.cLen, g_sCard.cUID, &g_sCard.cSAK);
  45.                         
  46.                         cStatus = PiccHaltA();                // 正常返回 00
  47.                         
  48.                         cStatus = PiccRequest(PICC_REQIDL, g_sCard.cATQ);        // 正常返回 FF 无卡
  49.                         
  50.                         cStatus = PiccRequest(PICC_REQALL, g_sCard.cATQ);        // 正常返回 00
  51.                         if (cStatus == ERR_SUCCESS)
  52.                         {
  53.                                 cStatus = PiccAnticollSelect(&g_sCard.cLen, g_sCard.cUID, &g_sCard.cSAK);
  54.                         }
  55.                         
  56.                         LED_GRE(ON);
  57.                 }
  58.                 else
  59.                 {
  60.                         LED_GRE(OFF);
  61.                         
  62.                 }
  63.                
  64.                 if (cStatus == ERR_SUCCESS)
  65.                 {
  66.                         printf("card ok !\n");
  67.                         // Mifare卡 测试流程
  68.                                 // 认证扇区
  69.                                 // 读取数据块1
  70.                                 // 写入数据块1        清空
  71.                                 // 读取数据块1
  72.                                 // 写入数据块1        写值
  73.                
  74.                         cStatus = PiccAuthState(3, 0x60, 0x00, (unsigned char *)g_cM1KEY);
  75.                         if (cStatus == ERR_SUCCESS)
  76.                         {
  77.                                 printf("auth ok !\n");
  78.                         }

  79.                         if (cStatus == ERR_SUCCESS)
  80.                         {
  81.                                 cStatus = PiccRead(1, g_cBuffer);
  82.                         }
  83.                         
  84.                         if (cStatus == ERR_SUCCESS)
  85.                         {
  86.                                 printf("read: ");
  87.                                 for (int i = 0; i < 16; i++) {
  88.                                         printf("%02X ", g_cBuffer[i]&0xFF);
  89.                                 }
  90.                                 printf("\n");
  91.                         }


  92.                         if (cStatus == ERR_SUCCESS)
  93.                         {
  94.                                 memset(g_cBuffer, 0xA5, 16);
  95.                                 cStatus = PiccWrite(1, g_cBuffer);
  96.                         }

  97.                         
  98.                         if (cStatus == ERR_SUCCESS)
  99.                         {
  100.                                 cStatus = PiccRead(1, g_cBuffer);
  101.                         }
  102.                         
  103.                         if (cStatus == ERR_SUCCESS)
  104.                         {
  105.                                 printf("read: ");
  106.                                 for (int i = 0; i < 16; i++) {
  107.                                         printf("%02X ", g_cBuffer[i]&0xFF);
  108.                                 }
  109.                                 printf("\n");
  110.                         }

  111.                         if (cStatus == ERR_SUCCESS)
  112.                         {
  113.                                 memset(g_cBuffer, 0x00, 16);
  114.                                 cStatus = PiccWrite(1, g_cBuffer);
  115.                         }
  116.                         
  117.                         printf("\n");
  118.                 }
  119.                 else
  120.                 {
  121.                         LED_YEL(OFF);
  122.                         LED_BLU(OFF);
  123.                 }
  124.         } while (1);
  125. }
  126. //******************************************************************************
  127. //                 IN: void
  128. //        RETURN: void
  129. // Comment:
  130. //
  131. //******************************************************************************
  132. void InitDevice(void)
  133. {
  134.         unsigned char cStatus;
  135.         LED_RED(ON);
  136.         LED_GRE(ON);
  137.         LED_YEL(ON);
  138.         LED_BLU(ON);
  139.         Delay100uS(2000);                // 延时200ms
  140.         LED_RED(OFF);
  141.         LED_GRE(OFF);
  142.         LED_YEL(OFF);
  143.         LED_BLU(OFF);
  144.         BEEP(OFF);
  145.         
  146.         // LED_RED:        射频正常启动亮
  147.         // LED_GRE:        有卡指示灯,单独亮为M1卡
  148.         // LED_YEL:        Type A CPU Card
  149.         // LED_BLU:        Type B CPU Card
  150.         


  151.         RC_SEL0(OFF);
  152.         RC_SEL1(ON);                        // 设置射频芯片为SPI模式
  153.         
  154.         cStatus = PcdReset();
  155.         if (cStatus == ERR_SUCCESS)
  156.         {
  157.                 PcdConfig(PCD_TYPE_14443A);
  158.                 LED_RED(ON);                // 射频初始化成功,RED LED 点亮。
  159.         }

  160.         return;
  161. }

  162. //******************************************************************************
  163. //                 IN: unsigned int iTimes
  164. //        RETURN: void
  165. // Comment: 使用Timer4做等待延时,单位时间100us
  166. //
  167. //******************************************************************************
  168. void Delay100uS(unsigned int iTimes)
  169. {        
  170.         Timer4_Init(TIME_UNIT_100US);
  171.         
  172.         Timer4_Wait(iTimes);
  173.         
  174.         Timer4_Stop();
  175.         return;
  176. }

  177. void Timer4_Init(unsigned char cMode)
  178. {
  179.         TIM_TimeBaseInitTypeDef        TIM_TimeBaseStructure;
  180.         uint16_t PrescalerValue;
  181.         uint16_t PeriodValue;
  182.         
  183.         switch (cMode)
  184.         {
  185.                 case TIME_UNIT_100US:
  186.                         PrescalerValue = 0;                                // 系统时钟1分频
  187.                         PeriodValue    = SystemCoreClock/10000;
  188.                         break;
  189.                
  190.                 case TIME_UNIT_1MS:
  191.                         PrescalerValue = 1;                                // 系统时钟2分频
  192.                         PeriodValue    = SystemCoreClock/2000;
  193.                         break;
  194.                
  195.                 case TIME_UNIT_200MS:
  196.                         PrescalerValue = 575;                        // 系统时钟576分频
  197.                         PeriodValue    = SystemCoreClock/2880;
  198.                         break;
  199.                
  200.                 default:
  201.                         break;
  202.         }

  203.         TIM_TimeBaseStructure.TIM_Period = PeriodValue;
  204. ……………………

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

所有资料51hei提供下载:
CV520 SourceCode.7z (196.13 KB, 下载次数: 42)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:228294 发表于 2018-10-17 10:05 | 只看该作者
好资料,下载学习。
回复

使用道具 举报

板凳
ID:495929 发表于 2019-6-17 11:39 | 只看该作者

好资料,下载学习。
回复

使用道具 举报

地板
ID:322315 发表于 2019-12-8 11:46 | 只看该作者
已下载,楼主辛苦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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