简介

厂房弄完了,开始学习关于刷卡的门禁系统。这东西说简单也简单,说难搞也有点难搞啊!

器件选型

一般的常用RFID模块就是RC522(淘宝店铺MFRC-522 RC522 RFID射频 IC卡感应模块 送S50复旦卡PN532 PN5180代码就在下面的百度云盘里面),可以识别IC卡和S50复旦卡。

线路连接及代码(STM32版本)

其实这东西的驱动,店家都给与了,就是看你能否读懂代码的含义。

电路连接

RC522模块连接:

RST连接PA12
MISO连接PA10
MOSI连接PA8
SCK连接PB14
NSS连接PB12
IRQ悬空
3.3连接3.3V
GND连接GND

USB-TTL连接

RX接PA2
TX接PA3
将IC卡放上去串口调试助手就会显示数据,这就是IC卡的卡号,然后只需要将卡号对比就可以实现开门判断是否开门或者关门。

最终就可以实现只有唯一的卡,可以打开门(开门或者关门这个动作可以使用舵机,不会舵机的的看这里STM32F103系列驱动舵机)。

代码

主函数

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "main.h"
#include "mfrc522.h"
#include <stdlib.h>
#include <string.h>
void GPIO_ini()
{//引脚初始化GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(MF522_RST_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MF522_RST_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(MF522_RST_PORT, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(MF522_MISO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MF522_MISO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(MF522_MISO_PORT, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(MF522_MOSI_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MF522_MOSI_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(MF522_MOSI_PORT, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(MF522_SCK_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MF522_SCK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(MF522_SCK_PORT, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(MF522_NSS_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MF522_NSS_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(MF522_NSS_PORT, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(LED_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = LED_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(LED_PORT, &GPIO_InitStructure);
}
void InitializeSystem()
{//RC522初始化LED_OFF;delay_ms(10);PcdReset();PcdAntennaOff(); PcdAntennaOn();  M500PcdConfigISOType( 'A' );LED_ON;delay_ms(10);  LED_OFF;delay_ms(10);LED_ON;delay_ms(10);   LED_OFF;
}int main(void){        u16 t;  u16 len;    u16 times=0;delay_init();           //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200);     //串口初始化为115200char data[50];char mydata[50]={"1771739149"};char status;unsigned char snr, buf[16], TagType[2], SelectedSnr[4]={0xFF,0xFF,0xFF,0xFF}; GPIO_ini();  InitializeSystem( );printf("RUN!!!");while(1){status= PcdRequest(REQ_ALL,TagType); //寻卡if(!status){status = PcdAnticoll(SelectedSnr); //防碰撞if(!status){sprintf(data,"%d%d%d%d",SelectedSnr[0],SelectedSnr[1],SelectedSnr[2],SelectedSnr[3]);//读到的值放入data数组中printf("%s",data);if(strcmp(data,mydata)==0){//添加舵机开门的代码printf("Open!\r\n");}else //添加舵机关门的代码 printf("Close!\r\n");WaitCardOff(); //等待卡离开}} }    }

RC522驱动

这部分代码都是copy的,可以去百度,这边就带一部分代码!

char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{char status;  unsigned int  unLen;unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08);WriteRawRC(BitFramingReg,0x07);SetBitMask(TxControlReg,0x03);ucComMF522Buf[0] = req_code;status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);if ((status == MI_OK) && (unLen == 0x10)){    *pTagType     = ucComMF522Buf[0];*(pTagType+1) = ucComMF522Buf[1];}else{   status = MI_ERR;   }return status;
}char PcdAnticoll(unsigned char *pSnr)
{char status;unsigned char i,snr_check=0;unsigned int  unLen;unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08);WriteRawRC(BitFramingReg,0x00);ClearBitMask(CollReg,0x80);ucComMF522Buf[0] = PICC_ANTICOLL1;ucComMF522Buf[1] = 0x20;status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);if (status == MI_OK){for (i=0; i<4; i++){   *(pSnr+i)  = ucComMF522Buf[i];snr_check ^= ucComMF522Buf[i];}if (snr_check != ucComMF522Buf[i]){   status = MI_ERR;    }}SetBitMask(CollReg,0x80);return status;
}

线路连接及代码(51版本)

电路连接

RC522模块连接

RST连接P1_6
NSS连接P2_4
SCK连接P2_5
MISO连接P2_2
MOSI连接P2_3

USB-TTL连接

略!——————————

代码

主函数

#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#include <stdlib.h>
#include <string.h>
unsigned char data TagType[2];
unsigned char data SelectedSnr[4]={0xFF,0xFF,0xFF,0xFF};
void InitializeSystem()
{P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;LED_GREEN = 1;delay_10ms(10);PcdReset();PcdAntennaOff(); PcdAntennaOn();  LED_GREEN = 0;delay_10ms(10);   LED_GREEN = 1;delay_10ms(10);LED_GREEN = 0;delay_10ms(10);    LED_GREEN = 1;
}void main( )
{char status;unsigned char snr, buf[16];    InitializeSystem( );while (1){status= PcdRequest(REQ_ALL,TagType);if(!status){status = PcdAnticoll(SelectedSnr);if(!status){sprintf(data,"%d%d%d%d",SelectedSnr[0],SelectedSnr[1],SelectedSnr[2],SelectedSnr[3]);//读到的值放入data数组中if(strcmp(data,mydata)==0){//添加舵机开门的代码OpenDoor();}else //添加舵机关门的代码CloseDoor();WaitCardOff(); //等待卡离开}}    LED_GREEN = 1; }
}

RC522驱动

这部分还是拷贝然后改了改,能看懂绝不动手的本质!
代码直接拷贝吧,不想写了,主要代码和STM32的基本一样。

后续

这只是最简单的门禁系统,后期可以考虑一下如何修改主人的卡号,或者在加入一个上位远程控制开门关门,修改主人的卡号。还可以加入管理员模式,只有在管理员认证后才可以修改白名单。

有问题评论或私信 讨论群985432073
源码地址:
https://gitee.com/heiha_ha/stm32-project-sharing.git

毕设-基于STM32/C51刷卡的门禁系统(基础版)相关推荐

  1. 基于stm32单片机的指纹解锁门禁系统

    基于stm32单片机的指纹解锁门禁系统 1.包含三个模式,正常模式,录入模式,删除模式 正常模式下,需要管理员指纹开锁,其他人才能正常打卡,实验室人数清零后,重新需要管理员指纹开锁 录入与删除指纹模式 ...

  2. 基于stm32与NRF24L01的无线门禁系统

    首先,需要说明梁只是一个小本科生,水平不高,许多错误请大家指教(qq1257681989).所写的内容是我自己做的,写此博客仅在于让自己在完成之后有个回顾和总结. 进入正文,这个小制作是我选择的一个比 ...

  3. 动态二维码刷卡触摸按键门禁一体机性能与选型攻略

    二维码门禁设备涉及到动态二维码.静态二维码.涉及IC卡.CPU卡.身份证等多种感应卡的刷卡功能.以及相关门禁控制器.门禁闭门器.磁力锁.电插锁.电控锁.开门按钮.门禁电源等多配件的搭配与选型,本文章主 ...

  4. 基于树莓派百度Api的人脸门禁系统--毕业设计

    基于树莓派百度Api的人脸门禁系统 在学校中因为上课原因,没有拿到关于电气及其自动化本专业的毕业题目,但是门禁系统让我眼前一亮.此题目是我硬着头皮接下的. 为了更好的做完自己的毕业设计,在不断的学习p ...

  5. stm32毕业设计 智能指纹识别门禁系统 - 物联网 单片机

    文章目录 1 简介 2 绪论 2.1 课题背景 2.2 项目内容 3 系统设计 3.1 系统架构 3.2 硬件设计 3.3 指纹识别模块的程序设计 3.3.1 指纹录入 3.3.2 指纹识别代码流程 ...

  6. 树莓派人脸/ic卡识别门禁系统

    概述 目前的门禁识别系统主要有IC卡识别.指纹识别.密码锁等,人脸识别门禁尚未普及,一方面时由于其售价高昂另一方面则是其研发成本高.当前正值5G发展元年,高速数据通信促使了分布式计算以及云计算的大范围 ...

  7. 【指纹识别】基于模板匹配实现指纹识别门禁系统含Matlab源码

    1 简介 近年来,随着识别技术和网络技术的飞速发展,门禁系统也得到了飞跃式的发展,出现了基于指纹识别的门禁系统.这种系统具有安全性,方便性和易管理性等特点,是确保各重要部门出入口安全的有效措施,现已广 ...

  8. 基于Qt设计的人脸识别门禁系统(录入、识别、对比、删除)

    一.前言 随着现代科技的不断发展,现在的中国已经迈入5G时代,人工智能技术也正逐步广泛运用到了各行各业中,尤其人脸识别技术,已在各大行业中广泛使用.人脸识别门禁系统,可以防止陌生人尾随进入园区,大大降 ...

  9. 【人脸识别】基于主成分分析PCA算法人脸识别门禁系统含Matlab源码

    1 简介 人脸是反应人身份的最直接的,最可靠的信息资源.通过人脸我们可以很快辨识一个人,这就是所谓的人脸识别.最初的人脸研究人员是一些从事社会心理学的工作者,从20世纪50年代开始有一些文献资料陆续发 ...

最新文章

  1. 分享memcache和memcached安装过程
  2. OpenWRT 随记
  3. 《信息学奥赛一本通》 高精度乘法。输入两个正整数,求它们的积。
  4. 用linq查询html中div个数,C#使用Linq to XML进行XPath查询
  5. DigitalClock的替代者TextClock
  6. 给你一份详细的web前端CSS布局指南,请查收
  7. scipy.special —— 排列、组合与阶乘
  8. 最新PHP自动化发卡网源码
  9. vs2019社区版+qt5.14.2+Coin3D安装
  10. 博弈论学习(一)——基础
  11. 纳米机器人驱动技术提速十万倍
  12. 裁判文书网爬虫(2019.5.15更新)
  13. 解决云帆小说下载阅读器不能下载https网址的问题
  14. python有什么颜色_Python中常见颜色记录
  15. C++的模糊查找的实现(简版)
  16. php 心跳包检测,redis的对端心跳检测
  17. 可等待计时器与用户计时器
  18. 通俗易懂聊springMVC中的handler是什么
  19. grapher中文版 附序列号
  20. Java面向对象编程(求长方体体积)

热门文章

  1. 全球及中国自主可控行业发展前景策略及投资机会分析报告2021-2027年
  2. 柯博文老師的繁體新書- Arduino 互動設計專題與實戰,深入Arduino 的全方位指南...
  3. Android带渐变效果的圆角矩形Demo
  4. 【开发教程1】开源蓝牙智能健康手表-整机功能演示
  5. 【3】疯壳开源蓝牙智能健康手表(心率血压血氧心电监测可定制)_心率血氧采集
  6. 2014阿里巴巴数据分析师面试
  7. 互联网公司招聘--阿里巴巴--数据分析--2017年笔试题
  8. 分享电脑好用且免费的实用软件及官方下载地址(亲测好用无广告)
  9. web前端需要学什么知识?自学要多久?
  10. 南农计算机考研历年分数线,2020南京农业大学考研复试分数线已公布