历史上的今天
返回首页

历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2020年08月27日 | 51单片机读写RC522卡参考例程及上位机调试软件源码

2020-08-27 来源:51hei

原理图:

单片机源程序如下:

#include "reg52.h"

#include "main.h"

#include "mfrc522.h"       

#include

//M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令

//4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反

unsigned char code data2[4]  = {0x12,0,0,0};

unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

unsigned char g_ucTempbuf[20];   

unsigned char idata MLastSelectedSnr[4];

unsigned char idata RevBuffer[30];  

unsigned char data SerBuffer[20];

bit CmdValid;                           


void iccardcode()

{             

          unsigned char cmd;

        unsigned char status;

       

        cmd = RevBuffer[0];

        switch(cmd)

        {

                case 1:     // Halt the card     //终止卡的操作

                        status= PcdHalt();;                       

                        RevBuffer[0]=1;

                        RevBuffer[1]=status;

                        break;                       

                case 2:     // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)

                                // 寻卡,防冲突,选择卡    返回卡类型(2 bytes)+ 卡系列号(4 bytes)

                        status= PcdRequest(RevBuffer[1],&RevBuffer[2]);

                        if(status!=0)

                        {

                                status= PcdRequest(RevBuffer[1],&RevBuffer[2]);

                                if(status!=0)                               

                                {

                                        RevBuffer[0]=1;       

                                        RevBuffer[1]=status;

                                        break;

                                }

                        }  

                        RevBuffer[0]=3;       

                        RevBuffer[1]=status;

                        break;

                       

                case 3:                         // 防冲突 读卡的系列号 MLastSelectedSnr

                        status = PcdAnticoll(&RevBuffer[2]);

                        if(status!=0)

                        {

                                RevBuffer[0]=1;       

                                RevBuffer[1]=status;

                                break;

                        }

                        memcpy(MLastSelectedSnr,&RevBuffer[2],4);

                        RevBuffer[0]=5;

                        RevBuffer[1]=status;

                        break;       

                case 4:                                    // 选择卡 Select Card

                        status=PcdSelect(MLastSelectedSnr);

                        if(status!=MI_OK)

                        {

                                RevBuffer[0]=1;       

                                RevBuffer[1]=status;

                                break;

                        }

                        RevBuffer[0]=3;

                        RevBuffer[1]=status;                       

                        break;

                case 5:            // Key loading into the MF RC500's EEPROM

            status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校验卡密码

                        RevBuffer[0]=1;

                        RevBuffer[1]=status;                       

                        break;                                                       

                case 6:

                        RevBuffer[0]=1;

                        RevBuffer[1]=status;                       

                        break;                               

                case 7:     

                    RevBuffer[0]=1;

                        RevBuffer[1]=status;                       

                        break;

                case 8:     // Read the mifare card

                            // 读卡

                        status=PcdRead(RevBuffer[1],&RevBuffer[2]);

                        if(status==0)

                        {RevBuffer[0]=17;}

                        else

                        {RevBuffer[0]=1;}

                        RevBuffer[1]=status;                       

                        break;

                case 9:     // Write the mifare card

                            // 写卡  下载密码

                        status=PcdWrite(RevBuffer[1],&RevBuffer[2]);

                        RevBuffer[0]=1;

                        RevBuffer[1]=status;                       

推荐阅读

史海拾趣

Belden Wire and Cable公司的发展小趣事

1902年,Joseph C. Belden在美国伊利诺伊州芝加哥创立了Belden公司。在创立初期,公司主要生产电线和电缆产品,并逐渐在行业内崭露头角。1905年,经过大量的实验和研究,Belden公司成功研发出“Beldenamel”绝缘材料,这种灵活的搪瓷绝缘材料极大地提升了线缆的性能和可靠性,为公司的早期发展奠定了坚实的基础。

Danaher Corporation公司的发展小趣事

丹纳赫集团一直重视科技创新和产品研发。在电子行业,丹纳赫集团不断推出具有创新性和竞争力的产品,如高精度测量仪器、自动化测试设备和电子制造解决方案等。这些产品不仅满足了客户对高质量、高效率生产的需求,还帮助丹纳赫集团在电子行业中树立了良好的品牌形象。

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司自2014年成立以来,就立志于打破国外芯片厂商在车规级芯片领域的垄断。初创时期,公司面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,驰芯微团队凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列车规级智能传感和控制芯片,并逐渐在行业中崭露头角。经过数年的努力,驰芯微已经成为国内车规级芯片领域的领军者,其产品广泛应用于各类前装量产车型。

EMCORE公司的发展小趣事

在发展过程中,驰芯微公司成功完成了多轮融资,为公司的发展提供了强有力的资金支持。这些资金主要用于车规级传感和控制类芯片的系列化业务以及新能源电池管理系统汽车电子系统一站式车规级芯片套片解决方案的研发和推广。未来,驰芯微将继续加大在技术研发和产品创新方面的投入力度,致力于成为国际领先的汽车电子芯片供应商。同时,公司还将积极拓展海外市场,提升品牌知名度和影响力。

以上五个故事框架分别围绕驰芯微公司的初创历程、技术突破、面对“芯片限制”的机遇与挑战、与明然科技的合作以及融资与未来规划等方面进行了描述。这些故事展示了驰芯微在电子行业中的发展历程和取得的成就,同时也揭示了公司未来的发展方向和目标。

EOREX公司的发展小趣事

随着环保意识的日益提高,EOREX公司积极响应国家的绿色发展战略,将环保理念融入到产品研发和生产过程中。他们采用环保材料和绿色生产工艺,减少产品对环境的影响。同时,EOREX还加大了对环保技术的研发投入,推出了一系列具有环保功能的电子产品。这些举措不仅提升了公司的品牌形象和社会责任感,还为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个电子公司可能的发展路径和策略。在实际应用中,每个公司的发展故事都有其独特性和复杂性。

DLP Design公司的发展小趣事

DLP绿色科技公司,积极响应国家环保政策,致力于研发和生产绿色环保的DLP技术产品。公司采用先进的生产工艺和材料,降低产品能耗和排放。同时,DLP绿色科技还积极推广节能环保的理念和技术,倡导消费者使用环保产品。通过不懈的努力和实践,DLP绿色科技在电子行业树立了绿色环保的典范形象,为行业的可持续发展做出了积极贡献。

请注意,以上故事均为虚构,旨在展示DLP Design公司在电子行业中的可能发展路径和成就。实际情况可能因公司背景、市场环境等因素而有所不同。

问答坊 | AI 解惑

TI芯片选型指南

相信很多工程师都在用TI的产品 本人在此分享一下官网公布的选型指南 希望对面临选型困惑的工程师有帮助 http://focus.ti.com.cn/cn/analog/docs/selectionguides.tsp…

查看全部问答>

【藏书阁】数字信号处理课件

第00章 数字信号处理 绪论 27页 0.5M PDF格式.pdf 第01章 离散时间信号与离散时间系统基础 71页 1.7M PDF格式 .pdf 第02章 Z变换及离散系统分析 43页 1.1M PDF格式.pdf 第03章 离散傅立叶变换 65页 1.4M PDF格式.pdf 第04章 附:关于图象压缩 4 ...…

查看全部问答>

如何在WM5.0上安装sqlite?

如题:如何在WM5.0上安装sqlite?    wce上又该怎么装?…

查看全部问答>

printk奇怪问题,请高手指点!

小弟我在调试网卡驱动的时候写了下面语句:             static   long   long   count   =   0;           stati ...…

查看全部问答>

电路板打样超级便宜

最近发现一个做电路板便宜的地方  www.sz-jlc.com/o   5*5cm以内50元 10*10以内100元 到现在为止最便宜的了 分享一下哈哈…

查看全部问答>

ST10技术资料

有关ST10的技术资料介绍,请参考:http://mcu.st.com/mcu/inchtml.php?fdir=pages&fnam=st10http://mcu.st.com/mcu/modules.php?name=mcu&file=familiesdocs&FAM=17ST10的中文手册书籍(类似ST7一样)不久也会面世了!!…

查看全部问答>

CC3000 wifi模块有木有

soso姐,帮我问一下TI办事处,CC3000什么时候搞一个活动哈,我看了TI 官网的宣传片了,我想要学习一下wifi的实时性能,我看他的DEMO 的是实时性还可以呀…

查看全部问答>

纽扣电池请教

关于纽扣电池,使用万用表测试其两端电阻,发现只有几欧姆的样子,这个是正常的吗?此外,想请教一下,如果我将纽扣电池串接在5V的电压源上放电,当串联电压降低后可以认为其电流都出自纽扣电池内吗?…

查看全部问答>