基于单片机的楼宇门禁系统的设计与实现

2、系统总体设计

2.1硬件的总体设计
为了使门禁系统智能化,需要一个主控芯片对整个门禁系统进行管理控制。接着还需要对应的模块完成包括数字密码验证和IC卡识别验证的功能。当出现非法闯入、验证失败等情况时还需要对操作人员进行警告。最后需要一个人机交互界面方便管理人员对门禁系统进行管理控制。硬件总体设计框图如图2.1所示。
本设计采用STM32F103为主控芯片,控制其他模块,对信息进行处理运算。STM32相比于51单片机性能更快,引出的GPIO口更多,功能更加丰富,相比起其他高性能的嵌入式设备具有功耗低,成本低的特点,更加适用于低成本的智能化门禁系统。
MRC522射频识别模块与主控芯片STM32F103通过SPI接口连接,MRC522接收主控芯片发送的命令,进行相应的操作,并将内部发送数据给主控芯片。同时与搜索的IC卡进行通信,识别IC卡的信息。MRC522采用的是NFC原理与IC卡通信,有三轮认证机制,通信过程安全快速,同时拥有防冲突机制,可以在多张卡的情况下选择卡片进行识别。同时IC卡相比对ID卡有密码验证方式,不容易被复制,更加的安全。
触摸屏通过8080接口与STM32F103连接,触摸屏包含液晶显示屏和电阻屏。液晶显示屏内带有控制芯片和显存,主控芯片只要向显存写入数据就可以在液晶显示屏上显示内容,使用起来方便,电阻屏也自带有控制芯片,处理触摸数据,可以降低对主控芯片性能的需求。管理人员可以通过按压电阻屏进行操作,并看到液晶显示屏的显示信息,方便管理人员对门禁系统进行管理。触摸屏还可以用于数字密码验证,解决用户忘记携带IC卡的情况,同时数字密码可以作为管理人员的验证方式。为了更好地反馈操作结果,提供错误警告,使用RGB等和蜂鸣器作为报警系统。
在这里插入图片描述

图2.1 硬件总体框图

3.系统的硬件设计

3.1 STM32芯片
本次采用STM32F103VET6芯片作为主控芯片,该芯片对外有100个引出的GPIO接口,方便和其他模块进行连接,从而控制其他模块,实现更多的功能。还有512K FLASH闪存,64KRAM,充足的内存可以让芯片装载的程序更大,存储的数据更多。芯片的实物图如图3.1所示。

在这里插入图片描述

图3.1 STM32F103VET6实物图
STM32F103内部已经经过了封装,由内核和片上外设构成。STM32F103采用的是由ARM公司研究设计Cortex-M3内核,外接晶振可达72MKZ主频,性能强大。STM32F103包含了SPI、I2C、USART接口,这些是芯片生产厂商在内核上扩展的功能,让芯片的性能和作用更加的强大,可以管理和控制更多的设备。STM32F1系列的框图如图3.2所示。
本次设计使用了SPI接口来对射频识别模块MRC522进行通信和管理控制,从而实现IC卡验证的功能,还通过普通的GPIO口来对RGB灯和蜂鸣器进行控制,完成报警的功能。
3.2射频识别模块
3.2.1 功能特性
本设计采用MFRC522模块来识别IC卡,实现开门验证的功能。MFRC522模块内部已经集成了各自器件,包括天线、逻辑控制功能、寄存器。模块引脚图如图3.3所示。
MFRC522中的内部发送器,可以驱动读写器天线,给IC卡提供能量,发送数据给IC卡,接收IC卡发送的信息,进行通信。接收器的解调电路可以将IC卡发送的数据载波进行解调转为二进制数据,译码电路则将二进制数据转为信息,表示 IC卡传输的数据,数字电路部分可以对传输的数据进行处理,错误检测。
3.2.2 通信原理
当主控芯片读取MRC522寄存器的数据时,STM32主机第一个字节发送一个地址,从机发送无效数据。第二个字节时,MRC522才返回对应地址的数据。可以根据地址的格式可以判断是读地址还是写地址。当最高位是1时,是读数据,最高位是0时,是写数据。主机和从机的数据根据时钟信号同时发送传输,先发送最高位。
当要向MRC522的寄存器写一个数据时,STM32芯片发送一个写数据的地址,然后第二个字节发送数据。在写数据时,MRC522返回的数据是无效数据,可以忽略。当发送的是地址时,地址的最高位代表是读地址还是写地址,中间六位代表地址,最低位默认位0。
MISO和MOSI传输的每一个字节都是高位在前,在时钟上升沿保持不变,在下降沿改变。NSS信号必须为低,方便在一个数据流中发送多个字节。为了发送多个数据流,NSS必须在数据流之间设置为高电平。因为时钟开始为低,所以在下降沿改变需要第二个跳变沿。因此在设置SPI传输的时钟极性等于0,时钟相位等于1。SPI通信时序图如图3.2所示。

在这里插入图片描述

图3.2 SPI通信时序图

4、系统的软件设计

4.1 系统的初始化
STM32标准库:
在实际开发中会发现,有时使用同一个内核,只是生产厂商不同,片上外设有少许的差异,也会导致相互之间的程序不能移植。为了解决这个问题,ARM公司与芯片厂商之间建立了一个标准标准。即 CMSIS 标准,实际上是建立了一个软件抽象层。屏蔽了具体的硬件之间的差异,使软件的兼容性更好。
而本次设计采用的STM32的标准库。就是按照 CMSIS 标准建立的。很多底层的初始化,寄存器地址声明都包含在里面。使用标准库开发,可以加快项目进展。从ST的官网中获取标准库,将其中需要用到的文件包含到项目中。下面这些文件是开发中需要使用到的必要文件,如果我们要使用STM32F1系列芯片,都必须把文件包含到项目中。还有一些外设的文件,在使用的时候再添加进来。
(1)寄存器地址和寄存器数据结构定义文件
<system_stm32f10x.c><stm32f10x.h>
(2)内核相关文件
<system_stm32f10x.c>|<system.stm32f10x.h>|<core_cm3.h>|<core_cm3.c>
(3)外设驱动文件
<misc.c>|<stm32f10x_ppp.c>|<misc.h>|<stm32f10x_ppp.h>
(4)启动文件
< startup_stm32f10x_hd.s>
(5)还有中断服务函数,系统时钟初始化,包含外设等函数相关的文件。<stm32f10x_it.c>、<stm32f10x_it.h>、<stm32f10x_conf.h> 。
外部设备初始化:
由于STM32的外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。使用的GPIO口也要根据作用,对输入输出方式,传输速度等进行设置。因此要先将模块使用的GPIO口进行配置,在标准库中,已经有宏定义定义了GPIO口对应的寄存器的别名,并且将这些配置封装在一个结构体中。所以只要打开时钟,配置功能结构体就可以完成外设的初始化操作。。
因为MRC522使用的是SPI方式与STM32通信,因此除了配置对应GPIO口的结构体,还需要将其GPIO口功能设置为SPI模式。并且设置SPI传输模式、相位和极性、传输速度。
本次设计中的液晶显示控制器ILI9341通过8080接口和STM32通信。如果使用普通的GPIO口进行模拟,效率很低,在STM32中使用FSMC外设来管理扩展存储器,因为想要在液晶屏上显示数据,就要通过接口把数据写入到内存上,这个和FSMC控制存储器相似。经过验证,可以使用FSMC接口来实现8080的通信时序,从而控制液晶显示屏数据显示。
触摸屏初始化的配置首先要开启时钟和端口引脚,模式配置,以及显示屏的各种参数设置。厂家已经提供了参数的配置数据,将封装好的函数文件直接包含到项目中即可。最终使用写入控制命令和写入数据两个函数来显示想要文字图片。
为了节约成本,没有进行外扩内存卡。只使用少量的内存,想要显示图片有些困难。为了实现基本的操作界面,采用循环写入像素点的方式,进行动态绘制操作界面。这个跟图像的显示很类似,但节约了内存空间,通过运算力来换取存储空间。
4.2 主函数功能
系统程序采用轮询的方式,当初始化完成,进入while循环,不断重复进行判断,当有操作时,执行对应的操作。主循环逻辑框图如图4.1所示。
首先进行主控芯片的初始化,调用各个初始化函数进行初始化。之后进入主函数,进入循环。接着在循环里,判断当前的菜单界面标志位,从而在屏幕中显示对应的界面。上电复位的初始状态位于主界面,触摸屏显示四个按钮,输入密码,增加IC卡,删除IC卡,修改密码。接着先进行判断是否识别到IC卡。跳转到识别IC卡的函数中去,如果当通讯范围内搜寻到IC卡,则执行IC卡验证函数。否则跳出,回到主循环。接着进入到触摸屏检测函数,如果触摸屏被按下,主控芯片对按下的位置进行判断。如果是按钮对应的位置被按下,则跳转到对应的界面的函数,同时界面标志位改变,液晶显示屏进行刷新。如果不是,则回到主函数,进行下一轮的循环。

在这里插入图片描述

图4.1 主循环逻辑框图

文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916105.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全天候自动化数字型智能驱鸟装置,电网防鸟高科技

鸟类在输电线路铁塔、电线杆上筑巢、栖息和排泄是个大问题&#xff0c;很容易引发线路故障导致停电。为了保障电网安全稳定运行&#xff0c;会用到各种智能驱鸟装置来驱赶鸟类&#xff0c;避免涉鸟故障发生。例如全天候自动化数字型智能驱鸟装置&#xff0c;其厉害的地方在于它…

技术、生态与商业:从PC到移动的平台之争

在科技发展的漫长历史中&#xff0c;我们常常惊叹于那些改变世界的伟大技术。然而&#xff0c;深入探究会发现&#xff0c;单纯的技术领先并不能保证最终的胜利。从 PC 操作系统到移动终端&#xff0c;乃至服务器软件&#xff0c;那些最终笑傲江湖的巨头们都遵循着一个共同的法…

android JXL 导出Excel(.xls/xlsx)

前面使用过 POI 导出xlsx但是它体量比较大&#xff0c;功能较丰富&#xff0c;在一些对包size比较敏感并且导出需求相对简单的项目中就不太适合。 poi链接&#xff1a;Android 导入导出excel xls、xlsx_android excel导入导出-CSDN博客 jxl 包体积小&#xff0c;使用简单、AP…

mysql 的主从机制是怎么实现的?

MySQL 作为当前最流行的开源关系型数据库之一&#xff0c;为了满足数据的高可用、负载均衡和容灾备份等需求&#xff0c;广泛应用主从复制&#xff08;Replication&#xff09;机制。其核心思想是&#xff1a;在一台主库&#xff08;Master&#xff09;上发生的所有数据变更都会…

【PHP 函数从入门到精通】

&#x1f9e0; PHP 函数从入门到精通 PHP 函数是编程中最基础、也是最强大的工具之一。它不仅可以简化代码、提高复用性&#xff0c;还能通过各种高级用法&#xff0c;让你写出更灵活、更现代的代码。 下面我们从函数的基础讲起&#xff0c;逐步深入&#xff0c;带你掌握函数的…

CGA老年综合评估汉密尔顿抑郁量表与认知评估联用

一、CGA老年综合评估汉密尔顿抑郁量表与认知评估联用的基础CGA老年综合评估 &#xff08;一&#xff09;二者评估内容的互补性 CGA老年综合评估汉密尔顿抑郁量表主要聚焦于老年人的抑郁情绪及相关症状&#xff0c;而认知评估则着重考察老年人的记忆力、注意力、思维能力等认知…

教培机构如何开发自己的证件照拍照采集小程序

职业教培机构对学员的证件照采集是进行学生培训管理、考试报名、证书发放的前置工作&#xff0c;传统拍照和收集证件照的方式往往面临效率低、质量参差不齐等问题。开发一款专属的证件照拍照采集小程序&#xff0c;不仅能提升机构形象&#xff0c;还能大幅优化工作流程。借助“…

GC8872刷式直流电机驱动器详解:3.6A驱动能力与PWM控制

概述GC8872是一款具有故障报告功能的刷式直流电机驱动芯片&#xff0c;专为打印机、电器、工业设备等机电一体化应用设计。这款芯片采用ESOP8封装&#xff0c;集成了H桥驱动电路和多种保护功能&#xff0c;支持高达3.6A的峰值电流输出。关键特性宽电压工作范围&#xff1a;6.5V…

从0开始学习R语言--Day54--双重固定模型

对于具有空间差异的数据&#xff0c;如果不知道数据的特征关系或意义&#xff0c;直接用杜宾模型来处理是一个比较通用的思路&#xff0c;只是后续还需要很多检验去证明结果的可解释性和统计性。但如果我们已经知道特征的意义&#xff0c;比如企业经济发展的数据中有着员工的科…

三生筛法在计算数论中的极限是什么?

AI辅助创作&#xff1a;三生筛法在计算数论中的极限主要体现在‌规模边界‌、‌算法适应性‌及‌理论兼容性‌三个维度&#xff0c;其核心瓶颈与突破路径如下&#xff1a;一、规模边界&#xff1a;计算效率的断崖式衰减‌‌低维高效区的上限‌在 10^15 以内数域&#xff0c;三生…

iOS WebView 加载失败与缓存刷新问题排查实战指南

在移动 App 中嵌入网页后&#xff0c;不少团队都会遇到一个诡异的问题&#xff1a;用户看到的是“旧内容”&#xff0c;或“资源加载失败”&#xff0c;但在浏览器调试中一切正常。特别是在 iOS WebView 中&#xff0c;这类缓存和加载问题常常隐匿、难以复现。 这篇文章将通过一…

GoLand 项目从 0 到 1:第二天 —— 数据库自动化

第二天核心任务&#xff1a;自动化与多数据库支持第二天的开发聚焦于数据库自动化流程构建与MongoDB 业务链路扩展&#xff0c;通过工具化手段解决数据库操作的重复性问题&#xff0c;同时完善多数据库支持能力。经过一天的开发&#xff0c;项目已实现数据库初始化、迁移、种子…

qt框架,使用webEngine如何调试前端

解决 Qt 5.14.2 中启用开发者工具的问题问题在于 Qt 5.14.2 中 QWebEngineSettings::DeveloperExtrasEnabled 属性已被弃用或更改。正确启用开发者工具的完整方法&#xff08;Qt 5.14.2&#xff09;1. 修改 main.cpp#include <QWebEngineView> #include <QWebEngineSe…

【Atlassian生态】Jira Cloud单站点现可支持10万用户:架构升级与龙智云迁移服务

作为Atlassian全球白金合作伙伴&#xff0c;龙智团队非常激动地宣布&#xff1a;Jira迎来历史性突破——Jira Cloud单个站点最高可支持10万用户&#xff01;覆盖Enterprise、Premium和Standard版本。现在&#xff0c;更多的团队可以将Jira作为核心协作中枢&#xff0c;以加速目…

深入解析JVM垃圾回收调优:性能优化实践指南

深入解析JVM垃圾回收调优&#xff1a;性能优化实践指南 一、技术背景与应用场景 随着互联网业务的飞速发展&#xff0c;Java 应用在高并发、大内存场景下对 JVM 性能提出了更高要求。垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;作为 JVM 的核心组件之一…

万字解析Redission ---深入理解Redission上锁过程

Redisson获取锁过程 RLock lock redissonClient.getLock("lock:order" userId); boolean isLock lock.tryLock(1L, TimeUnit.SECONDS);调用tyrLock其实就是下面的方法&#xff0c;如果说没有指定锁的过期时间&#xff0c;可以看到这边设置为了-1Overridepublic bo…

NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决

文章目录一、情景还原二、分析原因三、解决方案一、情景还原 有个老项目&#xff0c;需要用到 node 的 12.18.4 版本。 小case&#xff0c;我装了 nvm 的&#xff0c;根本构不成挑战&#xff0c;敲敲命令就可以了&#xff1a; # 安装12.18.4版本的nodejs nvm install 12.18.…

优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析

1 绪论1.1 研究的背景和意义本文所研究设计的智能家居销售数据采集与分析系统主要是为了提升数据的采集效率&#xff0c;并且实现及时采集到的线上电商平台及线下店面的多重渠道销售数据的采集与分析&#xff0c;精确地进行相关的数据采集并应用先进的数据挖掘算法进行分析挖掘…

【传感器标定(四):多传感器融合定位系统中的标定与时间同步方案】

1. 系统框架概述 本方案采用"三层标定框架"&#xff0c;整体架构如下图所示&#xff1a; #mermaid-svg-WhuG9fzKdHSAzSNh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WhuG9fzKdHSAzSNh .error-icon{f…

PostgreSQL 跨库查询方法

问题描述&#xff1a; PostgreSQL 跨库查询方法 select rc.tm,fq,fq_old,sccd,unitcd from resource_calc_scene_section_result as rc inner join "mxpt_yushuiqingsrc_databases"."public".st_river_r_hi as st on st.stcd rc.bscd and st.tm rc.tmwher…