历史上的今天

今天是:2024年11月12日(星期二)

2021年11月12日 | STM8单片机+RC522电路原理图+读写卡源代码

发布者:haoying 来源: eefocus关键字:STM8  单片机  RC522  读写卡 手机看文章 扫描二维码
随时随地手机看文章

基于stm8的ds1302模块千万别把数据写在第3个区,不然卡就锁住了,只能写在第2个区

电路原理图如下:
0.jpg

IMG_20180322_145435.jpg IMG_20180322_145440.jpg IMG_20180322_145505.jpg IMG_20180322_145513.jpg

stm8单片机源码:

  1. /* Includes ------------------------------------------------------------------*/

  2. /* Includes ------------------------------------------------------------------*/

  3. #include "stm8s.h"

  4. #include "stm8s_clk.h"

  5. #include "intrinsics.h"

  6. #include "stm8s_uart1.h"

  7. #include "uart.h"

  8. #include "rc522.h"

  9. #include "string.h"

  10. #include "IWDG.h"

  11. #include "tim2.h"

  12. #include "1602i2c.h"

  13. void Delay(u32 nCount);

  14. extern u8 RxBuffer[RxBufferSize];

  15. extern u8 UART_RX_NUM;

  16. extern int time2;

  17. extern int tim2test;

  18. extern int tim2test1;

  19. unsigned char CT[2];//卡类型

  20. unsigned char SN[4]; //卡号

  21. unsigned char M1UID[8]={0x2e,0x55,0,0,0,0,0,0};//读卡器向上发送,读到卡后自动发

  22. extern unsigned char controlflag;//接收到控制LED beep指令标志   01表示收到

  23. extern unsigned char sendflag;//发送标志  =1表示还未发送过 =0表示已经发送一次  等待回复  如果超时重新发送

  24. unsigned char write[16] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10};

  25. unsigned char read[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  26. extern unsigned char receive[8];

  27. u8 read_flag=0;//读卡标志位  1;读到卡  0;还没读到卡

  28. u8 time_flag=0;//超时标志 0;未超时   1:超时

  29. //unsigned char key[6] = {0x19,0x84,0x07,0x15,0x76,0x14};

  30. unsigned char key[6] = {0xff,0xff,0xff,0xff,0xff,0xff};

  31. int sum=0;

  32. //unsigned char key[6] = {0x00,0x00,0x00,0x00,0x00,0x00};

  33. /* Private macro -------------------------------------------------------------*/

  34. #define countof(a) (sizeof(a) / sizeof(*(a)))

  35. #define  BufferSize (countof(Tx_Buffer)-1)

  36. /* Private variables ---------------------------------------------------------*/

  37. u8 Tx_Buffer[] = "请刷卡";

  38. u8 Rx_Buffer[BufferSize];

  39. u32 FLASH_ID ;

  40. /* Private defines -----------------------------------------------------------*/

  41. /* Private function prototypes -----------------------------------------------*/

  42. void cardNo2String(u8 *cardNo, u8 *str);

  43. /* Private functions ---------------------------------------------------------*/

  44. #define ReadWriteAddr 3                       //读写扇区

  45. void SN_UID(void)

  46. {

  47.   unsigned int tempUID;

  48.    M1UID[2]=SN[0];

  49.    M1UID[3]=SN[1];

  50.    M1UID[4]=SN[2];

  51.    M1UID[5]=SN[3];

  52.    tempUID=M1UID[1]+M1UID[2]+M1UID[3]+M1UID[4]+M1UID[5];

  53.    M1UID[6]=tempUID&0x00ff;

  54.    M1UID[7]=tempUID>>8;

  55.   

  56. }

  57. void rxfromPIC(void)

  58. {

  59.   

  60.   u8 i;

  61.   sum=receive[1]+receive[2]+receive[3]+receive[4]+receive[5];


  62.   if((receive[0]==0x7e)&&(receive[1]==0x55)&&(receive[6]==(sum&0x00ff))&&(receive[7]==(sum&0xff00)>>8))

  63.   {

  64.    

  65.     read_flag=0;

  66.     if(receive[2]==0x01)

  67.     {


  68.     }

  69.     else if(receive[2]!=0x01)

  70.     {

  71.      

  72.     }

  73.      if(receive[3]==0x01)

  74.      {

  75.      

  76.      }

  77.     else if(receive[3]!=0x01)

  78.     {

  79.       


  80.     }

  81.    

  82.     if(receive[4]==0x01)

  83.     {

  84.       

  85.     }

  86.       receive[0]=0x7e;

  87.      UART1_SendString(receive, 8);

  88.      for(i=2;i<8;i++)

  89.         {

  90.          M1UID[i]=0;

  91.         }

  92.      tim2test1=0;//启动计时

  93.   }

  94.   

  95.   for(i=0;i<8;i++)

  96.   {

  97.     receive[i]=0;

  98.   }

  99.   if(tim2test1>5000)//超时全部关闭

  100.   {

  101.     tim2test1=0;

  102.           //  GPIO_HIGH(GPIOD, GPIO_PIN_3);

  103.       //  GPIO_HIGH(GPIOD, GPIO_PIN_7);

  104.         // GPIO_LOW(GPIOD, GPIO_PIN_2);

  105.   }

  106. }

  107. void main(void)

  108. {

  109.   unsigned char  status;


  110.   /*设置内部时钟16M为主时钟*/

  111.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);


  112.   status = memcmp(read,write,16);//清0

  113.   InitRc522();//rc522初始化

  114.   sendflag=1;

  115.   I2C1602_Configuration();

  116.   init1602_i2c();

  117.   __enable_interrupt();//开启总中断

  118.   

  119.   //////////////

  120.   write[0] =1;//

  121.   write[1] =3;//

  122.   write[2] =2;//

  123.   write[3] =6;//

  124.   write[4] =7;//

  125.   write[5] =7;//

  126.   write[6] =6;//

  127.   write[7] =0;//

  128.   write[8] =2;//

  129.   write[9] =8;//

  130. write[10] =5;//

  131. ///////////////// 要写入的值,最多16个///////


  132.   while(1)

  133.   {


  134.     status = PcdRequest(PICC_REQALL,CT);     // 扫描卡

  135.     status= PcdAnticoll(SN);  

  136.     //防冲撞

  137.      rxfromPIC();

  138.    if (status==MI_OK)

  139.     {

  140.         SN_UID();

  141.         status = PcdSelect(SN);               //选择要操作的卡

  142.         if (status==MI_OK)

  143.         {   

  144.             if( MI_OK == PcdAuthState(0x61,ReadWriteAddr,key,SN) )        //验证A密码   

  145.              {     

  146.               //    status =  PcdWrite(2,write);//写入M1卡第2块块数据

  147.              status = PcdRead(2,read);//读取M1卡第2块块数据

  148.                 if(MI_OK == status)

  149.                 {


  150.               zl_i2c(0x80);

  151.               sj_i2c(0x30+ read[0]);

  152.               sj_i2c(0x30+ read[1]);

  153.               sj_i2c(0x30+ read[2]);

  154.               sj_i2c(0x30+ read[3]);

  155.               sj_i2c(0x30+ read[4]);

  156.               sj_i2c(0x30+ read[5]);

  157.               sj_i2c(0x30+ read[6]);

  158.               sj_i2c(0x30+ read[7]);

  159.               sj_i2c(0x30+ read[8]);

  160.               sj_i2c(0x30+ read[9]);

  161.               sj_i2c(0x30+ read[10]);

  162.                 }

  163.              }

  164.         }

  165.     }


  166.      

  167.    

  168. }

  169.   

  170.   

  171.   

  172. }


  173. void Delay(u32 nCount)

  174. {

  175.   /* Decrement nCount value */

  176.   while (nCount != 0)

  177.   {

  178.     nCount--;

  179.   }

  180. }



  181. void Hex2String(u8 hex,u8 *str)

  182. {

  183.   str[0] = (hex / 100) + '0';

  184.   str[1] = (hex % 100 / 10) + '0';

  185.   str[2] = (hex % 10) + '0';

  186. }


  187. void cardNo2String(u8 *cardNo, u8 *str)

  188. {

  189.     u8 Count = 0;

  190.     for(Count = 0; Count < 4; Count++)

  191.     {

  192.         Hex2String(cardNo[Count], str + Count * 4);

  193.         if(Count == 3)

  194.         {

  195.           str[15] = 'n';

  196.         }

  197.         else

  198.         {

  199.           str[Count * 4 + 3] = ':';

  200.         }

  201. ……………………


关键字:STM8  单片机  RC522  读写卡 引用地址:STM8单片机+RC522电路原理图+读写卡源代码

上一篇:stm8 唯一ID号加密方法.思路
下一篇:STM8L151G sx1276-LoRa测试程序

推荐阅读

                新浪手机讯 11月11日上午消息,知名分析师郭明錤发布了一份有关2019年新iPhone的报告,报告中指出,苹果将放弃部分LCP天线技术,转而使用新的MPI(Modified PI )技术。  郭明錤认为苹果公司会采用新技术的原因有以下几个。第一,苹果公司对LCP材料供应商“讨价还价的能力较低”,并且由于“生产过程复杂”,也很难...
在2019年3月份,中国新能源车市场早已相当火爆,“常青树品牌”一汽-大众也终于为中国市场带来了宝来·纯电、高尔夫·纯电两款纯电动车型。与燃油车型不同,部分电动车存在的电池安全问题让消费者望而生畏;有了前车之鉴,目前绝大部分产品都将“电池安全”问题放在了相当的高度,大众品牌当然也不例外,今天要分享的即:大众电动产品的安全标准有多高?宝...
仓储物流机器人属于工业机器人的范畴,是指应用在仓储环节,可通过接受指令或系统预先设置的程序,自动执行货物转移、搬运等操作的机器装置。仓储物流机器人作为智慧物流的重要组成部分,顺应了新时代的发展需求,成为物流行业在解决高度依赖人工、业务高峰期分拣能力有限等瓶颈问题的突破口。近日,OFweek机器人网有幸采访到木蚁机器人CEO钱永强,为我们...
砺石导言:从硬件创新到服务创新,在云鲸屡屡“敢为天下先”背后,遵循着什么样的产品逻辑?吴杨盈荟 | 文短短两年时间,云鲸便成为中国扫地机器人行业异军突起的一匹黑马。2019年,云鲸诞生当年,中国扫地机器人市场前三名被科沃斯、石头科技、小米三家公司牢牢把控,分别占据46.7%、14.1%、11.7%的市场份额。2000元以上的高端市场,更是只有科沃斯和石头两家...

史海拾趣

问答坊 | AI 解惑

【转】PCB布线设计之超级功略

内容简介: 双面板布线技巧 模拟和数字布线的基本相似之处及差别 寄生元件危害最大的情况 AD 转换器的精度和分辨率增加时使用的布线技巧 如何使用工具确定与电路布线有关问题 传感系统的布线 对于电流回路,需要注意如下基本事项 1. 如果 ...…

查看全部问答∨

一个LED的N种玩法

 欢迎讨论     一个LED的N种玩法(一)——让LED闪起来https://bbs.eeworld.com.cn/viewthread.php?tid=103121   一个LED的N种玩法(二)——渐变https://bbs.eeworld.com.cn/viewthread.php?tid=103168   一个LED的 ...…

查看全部问答∨

我如何向LCD屏上的寄存器写数据?

三星6410/VS2005/Wince6.0, LCD屏上有寄存器, 我如何向LCD屏上的寄存器写数据? 请给一些思路.…

查看全部问答∨

盘点机有谁搞过啊

能简单说说原理和开发工具吗? 我没搞过 向知道一般是用什么开发?…

查看全部问答∨

usb声卡枚举问题求助

我在调一块usb声卡,枚举的时候set config之后为什么会set idle,然后stall pid,哪位帮忙看一下问题出在哪儿好吗,多谢。下面是用bus hound抓的包。 21.0  CTL    21 01 00 02  00 08 02 00     & ...…

查看全部问答∨

关于WINCE系统兼容性求助!

小弟刚接触WINCE系统想知道在Xp操作系统下面用C#开发的程序打包安装到WINCE下有什么问题吗.兼容性有要求吗?  比如说我用的SQL SERVER数据库和C#来开发的程序,可以安装到WINCE里面吗?是不是在WINCE里面也要安装Sql ...…

查看全部问答∨

【求助】【原创】关于写片。求教!

今天开始搭了个板子,板子是电源板,上面有高频变压器2个,瓷珠和电感8个。调试OK,给板子写程序,总是不顺,报错现象如: An error occoured: "Could not write target memory" Messages: Mass Erase... Program... 还有滴:联接不了目标 ...…

查看全部问答∨

基于STM32的485通讯

void UART3Init(void){        GPIO_InitTypeDef GPIO_InitStructure;        USART_InitTypeDef USART_InitStructure;         RC ...…

查看全部问答∨

智能家居成品

请问这个智能家居现在有做出成品的了吗,一套大概要多少钱?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved