找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5043|回复: 5
收起左侧

STC89C52单片机RC522射频读写卡器以及OLED显示源程序

  [复制链接]
ID:438036 发表于 2019-8-8 09:24 | 显示全部楼层 |阅读模式
使用STC89C52单片机,RC522模块采用模拟SPI通信,OLED12864采用模拟IIC通信,实现对M1卡的读写以及显示,不需要原理图,程序里有引脚定义。
51hei图片20190808092108.png 51hei图片20190808092058.png

单片机源程序如下:
  1. #include <stc8.h>
  2. #include <main.h>
  3. #include <stdio.h>
  4. #include "mfrc522.h"       
  5. #include "oled12864.h"
  6. #include "codetab.h"
  7. #include "intrins.h"

  8. unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  9. unsigned char idata TagType[2];
  10. unsigned char idata SelectedSnr[4];

  11. /////////////////////////////////////////////////////////////////////
  12. //系统初始化
  13. /////////////////////////////////////////////////////////////////////
  14. void InitializeSystem()
  15. {
  16.         P0 = 0xFF; P1 = 0xFF; P3 = 0xFF; P5 = 0xFF;
  17.        
  18.         PcdReset();                                                                                                                                                                                        //RC522复位
  19.         PcdAntennaOff();                                                                                                                                                                 //关闭RC522天线
  20.         PcdAntennaOn();                                                                                                                                                                  //打开RC522天线
  21.   M500PcdConfigISOType( 'A' );                                                                                                                //设置RC522工作方式
  22. }

  23.   void main( )
  24. {
  25.         char idata status,word_number;
  26.         unsigned char idata snr, buf[16];   

  27.   InitializeSystem( );                  //系统初始化
  28.        
  29.         OLED_Init();                                                                                                        //OLED初始化
  30.         OLED_Fill(0xff);                                                                                        //全屏亮
  31.         delayms(100);
  32.         OLED_Fill(0x00);                                                                                        //全屏灭
  33.         delayms(100);
  34.        
  35.   while (1)
  36.     {
  37.                 status= PcdRequest(REQ_ALL,TagType);                                        //RC522开始寻卡
  38.                 if(!status)
  39.                 {
  40.                         status = PcdAnticoll(SelectedSnr);          //防冲撞
  41.                         if(!status)
  42.                         {
  43.                                 status=PcdSelect(SelectedSnr);                                                //选择卡片
  44.                                 if(!status)
  45.                                 {
  46.                                         snr = 0;                                                                                                                                                                                                                                          //选择卡片扇区0
  47.           status = PcdAuthState(KEYA, (snr*4+3), DefaultKey, SelectedSnr);                //校验0扇区密码,密码位于每一扇区第3块
  48.                                         {
  49.                                                 if(!status)
  50.                                                 {
  51.                                                         status = PcdRead((snr*4+1), buf);                                                                  //读卡,读取0扇区1块数据到buf[16]
  52.                                                         for(word_number=0; word_number<3; word_number++)       
  53.                                                         {
  54.                                                                 OLED_P16x16Ch(40+word_number*16,0,word_number); //通过16*16点阵来显示汉字 -- word_number表示字表数组的位置
  55.                                                         }
  56.                                                         OLED_P8x16Str(50,3,buf);                          //将卡号在OLED上显示出来
  57.                                                         delayms(800);
  58.                                                         OLED_CLS();                                                                                                                                                                //清屏
  59.                                                        
  60.                                                         if(!status)
  61.                                                         {
  62.                                                                 WaitCardOff();                                                                                                          //等待IC卡离开
  63.                                                         }
  64.                                                 }
  65.                                         }
  66.                                 }
  67.                         }
  68.                 }       
  69.         }
  70. }
复制代码

所有资料51hei提供下载:
写卡.zip (111.22 KB, 下载次数: 88)

评分

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

查看全部评分

回复

使用道具 举报

ID:384820 发表于 2019-8-25 00:23 | 显示全部楼层
谢谢楼主分享,下载学习学习,不明白了再请教楼主,谢谢。
回复

使用道具 举报

ID:106121 发表于 2019-9-4 16:56 | 显示全部楼层
学习一下 顶起来!
回复

使用道具 举报

ID:627279 发表于 2019-12-24 16:51 | 显示全部楼层
学习一下,顶
回复

使用道具 举报

ID:111676 发表于 2019-12-27 15:46 | 显示全部楼层
学习一下 顶起来!
回复

使用道具 举报

ID:689820 发表于 2024-1-27 08:36 | 显示全部楼层
下载中,学习,谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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