找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13249|回复: 32
收起左侧

STM32F103+RFID(RC522)OLED 0.96显示 源码

  [复制链接]
ID:46986 发表于 2017-7-22 10:06 | 显示全部楼层 |阅读模式
该系统以STM32F103C8T6为核心(可自行修改成103系列其他芯片,修改编译参数)。通过OLED 0.96显示相关信息。通过对RFID模块(RC522)的控制,读取RFID标签的信息,并通过串口上传(可配套相应的上位机,完成简单的考勤,安保等系统)
0.png
单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "oled.h"
  3. #include "MAIN.h"
  4. #include "mfrc522.h"
  5. #include "usart.h"
  6. #include "string.h"

  7. unsigned char card1[4] = {0xF0,0x1C,0x70,0x3B};  //卡序列号
  8. unsigned char card2[4] = {0xDE,0x8A,0xDF,0x2B};  //卡序列号
  9. unsigned char card3[4] = {0xD2,0xB2,0x73,0x5B};
  10. unsigned char card4[4] = {0xB7,0x29,0xDF,0x2B};


  11. unsigned char snr, buf[16]="liu-bridge",bufr[16], TagType[2], SelectedSnr[4], DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};  
  12. unsigned char Read_Data[16],PassWd[6],WriteData[16],RevBuffer[30], MLastSelectedSnr[4],NewKey[16];                        
  13. char cardID[4];
  14. unsigned char kahao;
  15. void findcard();

  16. void GPIO_ini()
  17. {
  18.   GPIO_InitTypeDef  GPIO_InitStructure;
  19.   
  20.   /* Enable the GPIO Clock */
  21.   RCC_APB2PeriphClockCmd(MF522_RST_CLK, ENABLE);

  22.   /* Configure the GPIO pin */
  23.   GPIO_InitStructure.GPIO_Pin = MF522_RST_PIN;
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  25.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  26.   GPIO_Init(MF522_RST_PORT, &GPIO_InitStructure);
  27.         
  28.   /* Enable the GPIO Clock */
  29.   RCC_APB2PeriphClockCmd(MF522_MISO_CLK, ENABLE);

  30.   /* Configure the GPIO pin */
  31.   GPIO_InitStructure.GPIO_Pin = MF522_MISO_PIN;
  32.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  33.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  34.   GPIO_Init(MF522_MISO_PORT, &GPIO_InitStructure);
  35.         
  36.   /* Enable the GPIO Clock */
  37.   RCC_APB2PeriphClockCmd(MF522_MOSI_CLK, ENABLE);

  38.   /* Configure the GPIO pin */
  39.   GPIO_InitStructure.GPIO_Pin = MF522_MOSI_PIN;
  40.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  41.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  42.   GPIO_Init(MF522_MOSI_PORT, &GPIO_InitStructure);
  43.         
  44.   /* Enable the GPIO Clock */
  45.   RCC_APB2PeriphClockCmd(MF522_SCK_CLK, ENABLE);

  46.   /* Configure the GPIO pin */
  47.   GPIO_InitStructure.GPIO_Pin = MF522_SCK_PIN;
  48.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  49.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  50.   GPIO_Init(MF522_SCK_PORT, &GPIO_InitStructure);
  51.         
  52.   /* Enable the GPIO Clock */
  53.   RCC_APB2PeriphClockCmd(MF522_NSS_CLK, ENABLE);

  54.   /* Configure the GPIO pin */
  55.   GPIO_InitStructure.GPIO_Pin = MF522_NSS_PIN;
  56.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  57.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  58.   GPIO_Init(MF522_NSS_PORT, &GPIO_InitStructure);
  59.         
  60.   /* Enable the GPIO Clock */
  61.   RCC_APB2PeriphClockCmd(LED_CLK, ENABLE);

  62.   /* Configure the GPIO pin */
  63.   GPIO_InitStructure.GPIO_Pin = LED_PIN;
  64.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  65.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

  66.   GPIO_Init(LED_PORT, &GPIO_InitStructure);
  67. }

  68. void InitializeSystem()
  69. {
  70.         LED_OFF;
  71.         delay_10ms(10);
  72.         PcdReset();
  73.         PcdAntennaOff();
  74.         PcdAntennaOn();  
  75.         M500PcdConfigISOType( 'A' );
  76.         LED_ON;
  77.         delay_10ms(10);        
  78.         LED_OFF;
  79.         delay_10ms(10);
  80.         LED_ON;
  81.         delay_10ms(10);        
  82.         LED_OFF;
  83. }

  84. int i,j;
  85. int main(void)
  86. {        
  87.         char status;
  88.         unsigned char rfidflag;
  89.         unsigned char discnt;
  90.         kahao=0;
  91.         GPIO_ini();  
  92.   InitializeSystem( );
  93.   uart_init(9600);
  94.         OLED_Init();
  95.         //Draw_Logo();
  96.   for(i=0;i<2000;i++)
  97.           for(j=0;j<2000;j++);
  98.         OLED_Fill(0x00);
  99.   OLED_ShowString1(0,0," RFID EPC SYS");
  100.         OLED_ShowString1(0,3," Status:  OK");
  101.         printf("\r\n This is a RFID System \r\n");

  102.         while(1)
  103.         { status= PcdRequest(REQ_ALL,TagType);
  104.                 if(!status)
  105.                 {
  106.                         status = PcdAnticoll(SelectedSnr);
  107.                         if(!status)
  108.                         {
  109.                                 status=PcdSelect(SelectedSnr);
  110.                                 if(!status)
  111.                                 {
  112.                                         snr = 1;  //扇区号1
  113.           status = PcdAuthState(KEYA, (snr*4+3), DefaultKey, SelectedSnr);// 校验1扇区密码,密码位于每一扇区第3块
  114.                                         {
  115.                                                 if(!status)
  116.                                                 {
  117.                                                         //status = PcdRead((snr*4+0), buf);  // 读卡,读取1扇区0块数据到buf[0]-buf[16]
  118.                                                 //        buf[0]=2;buf[1]=2;buf[2]=3;buf[3]=4;buf[4]=5;buf[6]=1;;buf[7]=1;buf[8]=1;buf[9]=9;
  119.                                 //                        status = PcdWrite((snr*4+0), buf);  // 写卡,将buf[0]-buf[16]写入1扇区0块
  120.                                                         if(!status)
  121.                                                         {
  122.                                                                 //读写成功,点亮LED
  123.                                                                 LED_ON;        
  124.                                                                 PcdAuthState(KEYA, (snr*4+3), DefaultKey, SelectedSnr);
  125.                                                                 status = PcdRead((snr*4+0), bufr);  
  126.                                                                
  127.                                                                 //printf(" %s \r\n",bufr );
  128.                                                     //printf("%s", SelectedSnr);
  129.                                                     findcard();
  130.                                                                 if(kahao==1)
  131.                                                           {  OLED_ShowString1(0,5," ID 1 Pass");
  132.                                                                          printf("%s","#1001[        DISCUZ_CODE_0        ]quot;);
  133.                                                                          discnt=0;
  134.                                                                          rfidflag=1;
  135.                                                                 }
  136.                                                                 else if(kahao==2)
  137.                                                           {  OLED_ShowString1(0,5," ID 2 Pass");
  138.                                                                          printf("%s","#1002[        DISCUZ_CODE_0        ]quot;);
  139.                                                                          discnt=0;
  140.                                                                          rfidflag=1;
  141.                                                                 }
  142.                                                                 else if(kahao==3)
  143.                                                           {  OLED_ShowString1(0,5," ID 3 Pass");
  144.                                                                          printf("%s","#1003[        DISCUZ_CODE_0        ]quot;);
  145.                                                                          discnt=0;
  146.                                                                          rfidflag=1;
  147.                                                                 }
  148.                                                                 else if(kahao==4)
  149.                                                           {  OLED_ShowString1(0,5," ID 4 Pass");
  150.                                                                          printf("%s","#1004[        DISCUZ_CODE_0        ]quot;);
  151.                                                                          discnt=0;
  152.                                                                          rfidflag=1;
  153.                                                                 }                                                               
  154.                                                                 //printf(" %s %s",bufr,SelectedSnr);
  155.                                                                 WaitCardOff();
  156.                                                         }
  157.                                                 }
  158.                                         }
  159.                                 }
  160.                         }
  161.                 }        
  162.                 LED_OFF;
  163.                 if(rfidflag==1)
  164.           { discnt++;
  165.                         if(discnt>200)
  166.                         { OLED_ShowString1(0,5,"          ");
  167.                                 discnt=0;
  168.                                 rfidflag=0;
  169.                         }
  170.                   OLED_DLY_ms(5);
  171.                 }
  172.   }
  173. }

  174. void findcard()
  175. { unsigned char ii;
  176.         for (ii=0;ii<4;ii++)          //比较卡序列号
  177.   { if (SelectedSnr[ii] != card1[ii])
  178.     { kahao=0;
  179.             break;
  180.           }
  181.           else
  182.           { if (ii==3)
  183.             { kahao=1;
  184.               goto A;
  185.               break;
  186.                   }
  187.           }
  188.   }
  189.   for (ii=0;ii<4;ii++)
  190.   { if (SelectedSnr[ii] != card2[ii])
  191.      { kahao=0;
  192.              break;
  193.            }
  194.            else
  195.            { if (ii==3)
  196.              { kahao=2;
  197.                                  goto A;
  198.                       break;
  199.                    }
  200.            }
  201.   }
  202.         for (ii=0;ii<4;ii++)
  203.   { if (SelectedSnr[ii] != card3[ii])
  204.      { kahao=0;
  205.              break;
  206.            }
  207.            else
  208.            { if (ii==3)
  209.              { kahao=3;
  210.                                  goto A;
  211.                       break;
  212.                    }
  213.            }
  214.   }
  215.         for (ii=0;ii<4;ii++)
  216.   { if (SelectedSnr[ii] != card4[ii])
  217. ……………………

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

所有资料51hei提供下载:
STM32_RFID&amp;OLED.rar (300.1 KB, 下载次数: 818)

评分

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

查看全部评分

回复

使用道具 举报

ID:214312 发表于 2017-8-31 23:04 | 显示全部楼层
谢谢分享!1
回复

使用道具 举报

ID:75585 发表于 2017-9-8 09:53 | 显示全部楼层
谢谢楼主,
回复

使用道具 举报

ID:239125 发表于 2017-10-13 11:50 | 显示全部楼层
多谢多谢 很重要啊~~
回复

使用道具 举报

ID:252297 发表于 2017-11-22 15:43 | 显示全部楼层
正在找这一类的资料
回复

使用道具 举报

ID:254398 发表于 2017-12-8 22:15 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:281066 发表于 2018-1-31 10:06 | 显示全部楼层
非常感谢
回复

使用道具 举报

ID:281066 发表于 2018-1-31 10:25 | 显示全部楼层
非常感谢
回复

使用道具 举报

ID:297264 发表于 2018-3-26 14:50 | 显示全部楼层
学习下
回复

使用道具 举报

ID:297264 发表于 2018-3-26 14:53 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:76606 发表于 2018-4-28 21:45 | 显示全部楼层
好东西
回复

使用道具 举报

ID:334442 发表于 2018-5-20 21:08 | 显示全部楼层
好东西,感谢分享!
回复

使用道具 举报

ID:336115 发表于 2018-6-3 20:40 | 显示全部楼层
好东西,感谢分享!
回复

使用道具 举报

ID:336115 发表于 2018-6-14 15:46 | 显示全部楼层
小白想问下stm32板子和RC522模块怎么接线
回复

使用道具 举报

ID:202414 发表于 2018-7-4 15:44 | 显示全部楼层
下载的不是rar文件,麻烦问一下需要用什么打开啊?
回复

使用道具 举报

ID:337376 发表于 2018-7-6 11:14 | 显示全部楼层
谢谢分享~
回复

使用道具 举报

ID:384422 发表于 2018-8-9 01:32 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:386577 发表于 2018-8-15 16:29 | 显示全部楼层
谢谢分享!1
回复

使用道具 举报

ID:143047 发表于 2018-9-3 15:31 | 显示全部楼层
学习学习,
回复

使用道具 举报

ID:379988 发表于 2018-11-22 20:05 | 显示全部楼层
13671276812 发表于 2018-7-4 15:44
下载的不是rar文件,麻烦问一下需要用什么打开啊?

扩展拓展名,把.rar写上
回复

使用道具 举报

ID:256850 发表于 2019-4-9 14:30 | 显示全部楼层
谢谢分享~~
回复

使用道具 举报

ID:101620 发表于 2019-7-31 18:41 | 显示全部楼层
并不能正常使用,不知为何,引脚的链接方式可以找到,貌似并不对
回复

使用道具 举报

ID:426861 发表于 2019-8-9 13:57 | 显示全部楼层
OLED的主控是什么型号的啊
回复

使用道具 举报

ID:595938 发表于 2019-8-9 15:34 | 显示全部楼层
非常感谢楼主分享!
回复

使用道具 举报

ID:174087 发表于 2019-8-9 16:54 | 显示全部楼层
有没有兄弟用过RC523啊,我想识读ISO14443B的卡,但是网上找到的资料调试并没成功,兄弟们有没有啥经验啊
回复

使用道具 举报

ID:511456 发表于 2019-10-10 12:53 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:607641 发表于 2019-12-29 21:47 | 显示全部楼层
谢谢分享!!!!
回复

使用道具 举报

ID:607641 发表于 2020-1-9 13:39 | 显示全部楼层
已经下载学习谢谢
回复

使用道具 举报

ID:192515 发表于 2020-4-5 23:37 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:743538 发表于 2020-5-3 20:16 | 显示全部楼层
十分感谢
回复

使用道具 举报

ID:743538 发表于 2020-5-3 20:16 | 显示全部楼层
十分感谢
回复

使用道具 举报

ID:743538 发表于 2020-5-3 20:17 | 显示全部楼层
十分感谢
回复

使用道具 举报

ID:979426 发表于 2024-1-12 12:06 | 显示全部楼层
aptx4860 发表于 2017-11-22 15:43
正在找这一类的资料

刚好上学期做了这个
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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