【毕业设计】基于RFID的门禁系统 - 单片机 物联网 嵌入式 stm32

201 篇文章 118 订阅
187 篇文章 115 订阅


1 简介

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

基于RFID的门禁系统

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


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


本篇博客,学长先向大家介绍射频识别技术的概念、 分类及工作原。然后介绍 本次使用的射频芯片 MFRC522。

RFID 系统设计可分为硬件部分和软件部分。

硬件部分以 MFRC522 射频识别模块为核心, 结合主控模块 STC89C52 设计系统的外围硬件电路, 实现对射频卡的控制与 MCU 之间的互通。 软件部分采用 C 语言进行系统的下位机程序的开发, 完成与 IC 卡之间的通信, 实现数据交换功能。

在这里插入图片描述

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 实现效果

在这里插入图片描述

我们还可以把系统装到盒子里
在这里插入图片描述


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


6 最后

  • 29
    点赞
  • 429
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
嵌入式的相关资料,包括stm32单片机,51单片机单片机诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。单片机具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。单片机的使用领域已十分广泛几乎很难找到哪个领域没有单片机的踪迹,在智能仪表、实时工控、通讯设备、导航系统、家用电器等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。51系列单片机最早有Intel公司推出,主要有8031系列,8051系列。后来Atmel公司以8051的内核为基础推出了AT89系列单片机。它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。
基于STM32RFID门禁系统设计主要包括硬件设计和软件设计两部分。 硬件设计方面,首先需要选取适用的STM32系列单片机作为核心控制器,考虑其输入输出口数量、时钟频率、存储容量等因素。接着,需要选择适配的RFID读卡器模块,并设计相应的连接电路,将其与STM32单片机进行连接。在门禁系统中,通常还需要添加其他硬件组件,如电磁锁、人体感应器等,需要根据实际需求设计相应的接口电路,实现与STM32单片机的连接。 软件设计方面,首先需要对STM32单片机进行初始化设置,包括时钟配置、外部中断配置等。其次,需要编写相应的驱动程序,实现与RFID读卡器模块的通信和数据交互。然后,需要设计门禁逻辑控制程序,包括识别卡片、验证权限、开关门禁等功能。在识别卡片方面,需要将RFID读卡器模块读取到的卡片信息进行解析,并与预存的权限信息进行比对。最后,还需要添加其他功能模块的程序设计,如电磁锁的控制、人体感应器的触发等。 在整个系统设计过程中,需要考虑安全性、可靠性和扩展性。在安全方面,可以添加密码输入功能,加强门禁系统的安全性。在可靠性方面,可以对读卡器进行重复读取验证,提高门禁系统的稳定性。在扩展性方面,可以设计相应的接口和协议,方便系统的扩展和集成其他功能模块。 综上所述,基于STM32RFID门禁系统设计涉及硬件设计和软件设计两个方面,需要合理选择硬件组件和进行软件编程,以实现门禁逻辑控制、卡片识别等功能,并兼顾安全性、可靠性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值