毕业设计 基于stm32的RFID与指纹识别的门禁系统

2023-10-30


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 如何使用RFID技术构建一个单片机门禁系统

基于stm32的RFID与指纹识别的门禁系统 (项目开源)

大家可用于 课程设计 或 毕业设计


实现效果

在这里插入图片描述

2 绪论

2.1 课题背景与目的

门禁安全管理系统是新型现代化安全管理系统, 它集自动识别技术和现代安全管理措施为一体。 门禁系统可有效管理门的开启关闭, 对出入人员进行监控管理。 基于RFID的门禁系统通过对射频IC卡的识别, 保证那些持有相应证件的人员能自由进出, 阻止外来人员或无法提供证件的人员进入。 还有些门禁是利用生物识别的技术, 通过对人体某些部位(如眼睛、 指纹) 的识别来确认来人是否经过授权。 这种门禁系统相对射频识别的系统安全系数有很大提高, 但其成本较高, 在日 常生活中还未广泛应用。

3 射频识别

3.1 射频识别技术

射频识别(Radio Frequency Identification, RFID) 技术是从八十年代逐渐走向成熟的一种自 动识别技术, 它 是一项利用 射频信号通过空间耦合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别目 的的技术。

根据射频卡读写方式的不同可分成可读写(RW) 卡、 一次写入多次读出(WORM) 卡和只读(RO) 卡。 RW 卡成本较 WORM 卡和 RO 卡相比要高, 而且写入数据所花费的时间要远大于读取数据所花费的时间。 用户可以一次性将信息写入 WORM 卡, 写入后数据不能改变。 RO 卡存有一个唯一的号码。 只可读取, 不能修改, 虽然安全性较高, 但用途有限。

在这里插入图片描述

3.2 射频识别模块

3.2.1 RFID模块

在这里插入图片描述

射频识别「Radio Frequency IDentification,简称RFID」技术,又称为无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触,普遍应用于企业/校园一卡通、公交储值卡、高速公路收费、停车场、小区管理等。

RFID 技术利用无线射频方式在阅读器和射频卡之间进行非接触双向数据传输,以达到目标识别和数据交换的目的。

3.2.2 RFID模块组成

  • 标签(Tag,即射频卡),耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。
  • 阅读器:读取(在读写卡中还可以写入)标签信息的设备。
  • 天线:在标签和读取器间传递射频信号。

这里使用的RFID-RC522模块采用MFRC522芯片,SPI通讯方式,支持Mifarel S50、S70 、Pro、Desfire等类型的卡,附带的白卡和钥匙扣是S50卡,每张卡都有自己的标识(UID)。

在这里插入图片描述

4 系统设计

本系统的主要电路包括: 读卡器数据采集电路、 串行 E 2 PROM 存储电路、 LCD1602 显示电路、 串口通讯电路、 报警电路、 门控电路、 键盘电路。

在这里插入图片描述

器件列表

    1. 主控芯片: AT89C52。
    1. 读卡器: YHY502ATG。
    1. E 2 PROM: AT24C04。
    1. LCD 液晶: ZL1602C2。
    1. 串口通讯芯片: MAX232。
    1. 报警器: 1 个蜂鸣器加一个 LED 红灯。
    1. 门控器件: 一个 LED 绿灯。

4.1 系统架构

4.1.1 硬件部分

LCD1602 显示电路设计
在这里插入图片描述

串口通讯电路设计
在这里插入图片描述

报警电路设计
在这里插入图片描述

4.1.2 软件部分

在本系统中, 软件的设计主要包括: 数据采集模块、 存储模块、 显示模块、 门控模块、 报警模块、 键盘模块和上位机软件的设计几个方面。 本系统的软件结构框图如图 4-1 所示。

    1. 数据采集模块: 读卡器 YHY502ATG 通过天线读取 RFID 卡的数据,然后将数据传送出去。
    1. 存储模块: AT89C52 接收到数据后, 将数据传送给 AT24C04 进行存储。
    1. 显示模块: AT89C52 接收到数据后, 将数据与 AT24C04 里存储的数据进行对比, 若两者完全相同, 则液晶显示正确的信息; 若不相同, 则液晶显示错误的信息。
    1. 门控模块: AT89C52 接收到数据后, 将数据与 AT24C04 里存储的数据进行对比, 若两者完全相同, 则进行开门操作; 若不相同, 则不开门。
    1. 报警模块: AT89C52 接收到数据后, 将数据与 AT24C04 里存储的数据进行对比, 若不相同则报警。
    1. 键盘模块: 通过键盘输入密码, 并根据输入密码的有效性做相应的操作。
      在这里插入图片描述

4.2 软件总体流程图

系统的软件总体流程图如图

在这里插入图片描述

4.3 密码子程序

当程序运行时, 会一直判断是否有按键被按下, 当有按键被按下时, 系统会确定键值, 关将键值存入到密码数组里, 然后将输入的密码与本身的密码做比较, 若相同, 则执行开门和显示正确信息的操作; 若不相同, 则执行报警和显示错误信息的操作。

在这里插入图片描述

核心代码:

P1=0x0f;
if(P1!=0x0f) compare(P1);
for(n=0;n<10;n++)
if(input[n]!=password[n]) break;
if(n==10)
{ if(m<10) continue;
WriteLcdCom(0x01);   //清屏
WriteLcdCom(0x80);  //第一行数据指针地址
for(s=0;s<16;s++)
 WriteLcdDat(str2[s]);
LEDG=0;
BUZ=0;
delay_10ms(20);
LEDG=1;
BUZ=1;
WriteLcdCom(0x01);
input[0]=" "; }
else if((n<10)&&(P1==0xbd))
{ WriteLcdCom(0x01);   //清屏
WriteLcdCom(0x80);  //第一行数据指针地址
for(s=0;s<16;s++)
WriteLcdDat(str4[s]);
LEDR=0;
for(s=0;s<5;s++)
{ BUZ=0;
delay_10ms(20);
BUZ=1;
delay_10ms(20); }
LEDR=1; }

4.4 数据采集子程序

执行程序之前, 首先要设置串口波特率等相关串口参数, 然后上位机通过串口向下位机发送命令, 并进入串口中断。 下位机根据接收 SBUF 的值做相应的处理。

在这里插入图片描述

核心程序

uchar uart_process(void)
{uchar cmd;
uchar cStatus;
cmd = g_cReceBuf[1];
switch(cmd)
{case 0x20: // 寻卡, 防冲突, 选择卡返回卡系列号(4 bytes)
cStatus =IicSendHY502(g_cReceBuf);  // 发送寻卡命令
cStatus =IicReadHY502(cp);   // 读取卡号并存入到 cP
if((cStatus==SUCCESS)&&(cp[1]==CARD_SN))
{memcpy(&g_cReceBuf[0],&cp[2],4);
eeprom();}}//将读取到的卡序列号与 E 2 PROM 里存储的进行比较
return cStatus;}
开始
上位机发送读卡命令
Y
Y
N
N
有感应卡 ?
验证感应卡权限
权限满足?
开门, 显示正确信息
报警, 显示错误信息
延时后, 自动关门
结束

4.5 显示子程序

显示子程序的主要功能是对当前的门控状态进行显示, 显示函数首先判断是写命令操作还是写数据操作, 若是写命令操作, 则根据命令进行相应的操作, 如清屏、 设置显示模式等; 若是写数据操作, 则在显示器上显示相应数据。

在这里插入图片描述

核心程序

void LcdShowError()
{ WriteLcdCom(0x38);  //显示模式设置
WriteLcdCom(0x0c);  //开显示, 无光标, 光标不闪烁
WriteLcdCom(0x06);  //读写字符后地址指针加一设置
WriteLcdCom(0x80); //第一行数据指针地址
for(k=0;k<16;k++)
{WriteLcdDat(str3[k]);
delay(20); }
WriteLcdCom(0xc0); //第二行数据指针地址

for(k=0;k<16;k++)
{ WriteLcdDat(str4[k]);
delay(20);}
WriteLcdCom(0x01);  }
void WriteLcdCom(unsigned char c)
{ LCDRW =00;
LCDRS=0;   //切换到写命令
P0=c;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}
void WriteLcdDat(unsigned char d)
{ LCDRW =00;
LCDRS=1;    //切换到写数据
P0=d;
LCDE=1;
LCDE=0;
for(a=0;a<20;a++);}

4.6 存储子程序

本设计中数据的存储芯片选用的是 AT24C04, 该芯片是串行的 E 2 PROM,支持 I 2 C 总线数据传送协议。

在这里插入图片描述

核心程序

void eeprom()
{write_byte(0,0x1e);
write_byte(1,0xda); write_byte(2,0x62); write_byte(3,0xb6);
write_byte(4,0x25); write_byte(5,0xee); write_byte(6,0xde);
write_byte(7,0xb6); write_byte(8,0x05); write_byte(9,0xc8);
write_byte(10,0x43);write_byte(11,0xb8);write_byte(12,0x3a);
write_byte(13,0x04);write_byte(14,0x5d);write_byte(15,0xb6);}
bit shout(uchar write_data)// 从 MCU 移出数据到 AT24C04
{uchar i; bit ack_bit;
for(i = 0; i < 8; i++) // 循环移入 8 个位
{SDA1 = (bit)(write_data & 0x80);
_nop_();
SCL1 = 1;
delayNOP();
SCL1 = 0;
write_data <<= 1; }
SDA1 = 1;  // 读取应答
delayNOP();
SCL1 = 1;
delayNOP();
ack_bit = SDA1;
SCL1 = 0;
return ack_bit;  // 返回 AT24C04 应答位
}
void  write_byte(uchar  addr,  uchar write_data)  //  在 指 定 地 址 addr 
处写入数据 write_data
{ start();
shout(OP_WRITE);
shout(addr);
shout(write_data);
stop();
delay_10ms(1); }

5 指纹识别部分

5.1 指纹识别模块的程序设计

指纹识别模块需要完成的工作有:获取指纹图像,生成指纹特征模板,储存指纹特征模板和匹配指纹等工作,单片机根据模块的指令系统,给模块发送指令信息,来控制模块完成相应的工作。

5.2 指纹录入

指纹录入过程, 用于新用户的注册, 当有新用户需要注册时, 就先在指纹头处获取用户的指纹图像, 在将之生成指纹特征模板, 在储存起来, 这样就完成了新用户的注册。

在这里插入图片描述

5.3 指纹识别代码流程

在这里插入图片描述

5.4 显示屏程序设计

在这里插入图片描述

5.5 整体业务逻辑代码流程

软件使用 Keil C51 版本, 主程序采用 c 语言编写。 单片机对指纹识别模块发送命令, 得到识别结果, 在根据这个结果来控制显示模块、 语音模块和电子锁模块。 程序的主流程图如下所示:
在这里插入图片描述

6 最后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

毕业设计 基于stm32的RFID与指纹识别的门禁系统 的相关文章

  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 2.4G SOC收发芯片XL2412P,适用于无线键鼠,遥控器等多种场景

    XL2412P芯片是 款高性能低功耗的SOC集成无线收发芯片 集成MO核MCU 工作在2 400 2 483GHz世界通用ISM频段 该芯片集成了射频接收器 射频发射器 频率综合器 GFSK 调制器 GFSK解调器等功能模块 并且支持一对多
  • 普冉32位单片机 PY32C642,M0+内核,1.7 V ~ 5.5 V宽工作电压

    PY32C642 单片机采用高性能的 32 位 ARM Cortex M0 内核 宽电压工作范围 嵌入 24Kbytes Flash 和 3 Kbytes SRAM 存储器 最高工作频率 24 MHz 包含多种不同封装类型产品 工作温度范围
  • 太阳诱电 | 陶瓷电容器的静电容量相关

    陶瓷电容器的静电容量会因温度而变化吗 电容器的静电容量的温度特性是什么 陶瓷电容器的静电容量随周围的温度而变化 静电容量因温度而变化的现象 称为静电容量的温度特性 这是由于陶瓷电容器使用的材料造成的 也是所有陶瓷电容的常有现象 以下是本公司
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 机器学习:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 毕业设计:微博爬虫情感分析可视化系统 舆情分析 python 大数据 TF-IDF算法 Flask框架(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 毕业设计:基于卷积神经网络的验证码识别系统 机器视觉 人工智能

    目录 前言 设计思路 一 课题背景与意义 二 算法理论原理 2 1 字符分割算法 2 2 深度学习 三 检测的实现 3 1 数据集 3 2 实验环境搭建 3 3 实验及结果分析 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实
  • 毕业设计:基于深度学习的微博谣言检测系统 人工智能

    目录 前言 设计思路 一 课题背景与意义 二 算法理论原理 三 检测的实现 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有
  • 2024 人工智能与大数据专业毕业设计(论文)选题指导

    目录 前言 毕设选题 选题迷茫 选题的重要性 更多选题指导 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 基springboot+vue实现开放实验室管理系统子系统【附项目源码+论文说明】

    基springboot vue实现开放实验室管理系统子系统 摘要 信息技术永远是改变生活的第一种创新方式 各种行业的发展更是脱离不了科技化的支持 原本传统的行业正在被科技行业的切入悄悄的发生变化 就拿我们生活当中常见的事情举例而言 在外卖行
  • 深度学习:人脸识别系统 Tensorflow 人脸检测 Python语言 facenet人脸识别算法 毕业设计(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加

随机推荐