基于STM32单片机开发光学指纹识别模块

合集下载

论文-基于STM32的智能家居远程控制系统.docx

论文-基于STM32的智能家居远程控制系统.docx

福州大学本科生毕业设计(论文)题目:基于STM32的智能家居远程控制系统姓名:学号:系别:电气工程系专业:电气工程及其自动化年级:2012级指导教师:2016 年 4月 28日独创性声明本毕业设计(论文)是我个人在导师指导下完成的。

文中引用他人研究成果的部分已在标注中说明;其他同志对本设计(论文)的启发和贡献均已在谢辞中体现;其它内容及成果为本人独立完成。

特此声明。

论文作者签名:日期:关于论文使用授权的说明本人完全了解福州大学有关保留、使用学位论文的规定,即:学院有权保留送交论文的印刷本、复印件和电子版本,允许论文被查阅和借阅;学院可以公布论文的全部或部分内容,可以采用影印、缩印、数字化或其他复制手段保存论文。

保密的论文在解密后应遵守此规定。

论文作者签名:指导教师签名:日期:基于STM32的智能家居远程控制系统摘要随着经济、社会以及相关技术的发展,特别是近年来在物联网建设的带动下,智能家居的概念越来越受到人们的关注,人们对家居智能化的需求也越来越大。

因此如果能设计一套成本低,控制简单,并且可以在最大程度上为用户提供高效、舒适、节能的居住和工作环境的智能家居系统是非常有前景的。

本课题在分析智能家居的研究现状、发展趋势、研究意义的基础上提出了基于STM32的智能家居远程控制系统的设计方案。

该系统以STM32F103ZET6为系统的主控芯片,配合许多的外设模块。

比如:GSM模块、指纹识别模块、TFT液晶屏、语音识别模块等器件。

软件程序方面,实现对串口通讯、GSM无线网络通信、TFT液晶屏等模块的程序编写。

在本设计中,用手机远程的向GSM模块发送短信,并识别短信的内容,根据其短信内容实现对实现家庭电器、窗帘、照明的本地或远程控制;利用语音识别模块控制家居环境中灯光部分的开、关以及亮度的调整;利用指纹识别来实现家居系统中门禁功能来保证用户安全。

本系统功能实用、操作简单、价格低廉、易于安装,可以为人们提供更便捷,更高效,更环保的生活环境。

基于单片机指纹识别系统设计

基于单片机指纹识别系统设计

基于单片机指纹识别系统设计一、引言随着科技的不断发展,身份识别技术在各个领域的应用越来越广泛。

传统的身份识别方式,如密码、钥匙等,存在着容易丢失、遗忘、被窃取等安全隐患。

而指纹识别作为一种生物识别技术,具有唯一性、稳定性和便捷性等优点,逐渐成为了身份识别领域的主流技术之一。

单片机作为一种微型计算机系统,具有体积小、成本低、性能可靠等特点,被广泛应用于各种控制系统中。

本文将介绍一种基于单片机的指纹识别系统的设计方案,旨在为相关领域的研究和应用提供参考。

二、系统总体设计(一)系统功能需求本指纹识别系统主要实现以下功能:1、指纹采集:能够采集用户的指纹图像。

2、指纹处理:对采集到的指纹图像进行预处理、特征提取和匹配等操作。

3、存储管理:能够存储用户的指纹模板,并对其进行有效的管理。

4、显示输出:能够将识别结果通过显示屏输出给用户。

5、通信接口:具备与其他设备进行通信的接口,如USB、蓝牙等。

(二)系统总体结构系统主要由指纹采集模块、单片机控制模块、指纹处理模块、存储模块、显示模块和通信模块等组成。

指纹采集模块负责采集用户的指纹图像,并将其传输给单片机控制模块。

单片机控制模块对采集到的指纹图像进行控制和处理,将处理结果传输给指纹处理模块进行进一步的分析和处理。

指纹处理模块完成指纹的特征提取和匹配等操作,并将结果返回给单片机控制模块。

存储模块用于存储用户的指纹模板和相关数据。

显示模块用于显示识别结果和系统状态等信息。

通信模块用于实现系统与其他设备之间的数据传输和通信。

三、硬件设计(一)指纹采集模块指纹采集模块是整个系统的关键部分,其性能直接影响到系统的识别准确率和速度。

目前,常用的指纹采集技术主要有光学式、电容式和超声波式等。

本系统采用电容式指纹采集模块,其具有体积小、分辨率高、采集速度快等优点。

(二)单片机控制模块单片机控制模块是整个系统的核心部分,负责对系统的各个模块进行控制和协调。

本系统采用 STM32 系列单片机,其具有高性能、低功耗、丰富的外设接口等特点,能够满足系统的控制需求。

基于STM32 的门禁系统设计

基于STM32 的门禁系统设计

报警
电压过高或过低、指纹 不匹配、密码不匹配、 触发童锁、胁迫开锁
识别后处理 匹配开门、送显示 指纹 ID、不匹配
报警 图 2 门禁系统的软件架构
第2期
曹 兰:基于 STM32 的门禁系统设计
95
2.1 主程序设计 主 程 序 主 要 包 括 上 电 初 始 化 、指 纹 设 置 、密 码 设 置 、指 纹 识 别 模 块 、继 电 器 驱 动 模 块 、密 码 处 理 模
表 3 录入指纹时的应答包指令格式
字节数 名称 内容
2 bytes 包头 0XEF01
4 bytes 芯片地址
XXXX
1 byte 包标识
02
2 bytes 包长度
03H
N bytes 数据 xxH
2 bytes 校验和
sum
注:确认码=00H 表示录入成功;确认码=01H 表示包有错;确认码=02H 表示传感器上无手指;确认码=03H 表示录入不成功 .
第 23 卷 第 2 期 2021 年 6 月
漳州职业技术学院学报 Journal of Zhangzhou Institute of Technology
Vol. 23, No.2 Jun. 2021
文章编号 :1673-1417(2021)02-0092-06
doi:10.13908/ki.issn1673-1417.2021.02.0017
96
漳州职业技术学院学报
2021 年
过程中 ,遇到问题要参考它的数据手册 ,比如要提高指纹的反应速度 ,指纹生成特征、匹配指纹时 ,可 以调用它内部的函数。
硬件上电初始化设置 页地址、列地址、行地址
设置片选、读写 控制引脚

基于STM32的智能门禁系统的设计

基于STM32的智能门禁系统的设计

摘要摘要随着科学技术的不断提高,人们的生活水平不断提升,智能建筑将会在未来的城市建设中发挥重要的作用。

门禁系统是智能建筑领域非常重要的组成部分,不仅能够控制人员进出权限,还能够对这些人员的出入情况进行实时监控与记录,是智能建筑必不可少的安全防范设施。

射频识别门禁系统存在认证介质容易丢失、损坏, 指纹识别门禁系统容易受到环境的影响。

该设计针对目前的门禁系统研究的现状和发展的状况做了简要分析,结合对RFID 技术和指纹识别技术的研究,提出了一种基于STM32 的智能门禁系统设计方案,采用指纹识别技术和射频识别技术两种识别方式进行身份验证,完成门禁系统的多重验证方式。

避免了单一门禁系统存在的安全隐患,提高了系统的稳定性和安全性。

具体设计方案如下:硬件方面采用STM32 作为控制器,结合电源、射频识别、指纹识别、继电器等模块构建门禁系统终端的总体硬件架构。

软件方面结合硬件架构,采用模块化设计思路,设计开发主程序设计模块,指纹识别门禁模块,射频识别门禁模块。

上位机采用C#语言进行设计开发,实现门禁管理系统的设计。

在面对“互联网+”、物联网、移动智能化的挑战之下,门禁技术不断的创新,门禁系统进入了前所未有的转型期。

单一验证方式的门禁系统将被取代,智能门禁系统将成为门禁行业未来发展的趋势。

图44 幅;表13 个;参41 篇。

关键词:门禁系统;指纹识别;RFID;STM32分类号:TP399AbstractWith the continuous improvement of science and technology, and the people's living standard, intelligent building will play an important role In the future of urban construction. Door-control system is a essential key component of the field of intelligent building. It can not only control the access authority of personnel, but also monitor and record the access of these personnel in real time, which is an indispensable security and prevention facility of intelligent building. The identification medium of Radio frequency identification access control system is easily lost and damaged, and the fingerprint identification access control system is easily affected by the environment. This design makes a brief analysis of the current research status and development of the access control system and proposes a design scheme of intelligent access control system based on STM32 by combining with the RFID technology and fingerprint identification technology research. This design scheme adopts fingerprint identification technology and radio frequency identification technology to verify the identity, and completes the multiple verification of the access control system, which can avoid the hidden danger of single access control system and improve the stability and security of the system. The specific design scheme is as follows:In terms of hardware, it adopts STM32 as the controller to build the overall hardware architecture of access control system terminal by combining power supply, radio frequency identification, fingerprint identification, relay and other modules.In terms of software, it adopts modular design ideas to design and develop the main program design module, fingerprint identification access control module and RFID access control module. The upper computer adopts C# language to realize the design of access control management system.In the face of the challenge of ‘Internet plus’, internet of things and mobile intelligence, the continuous innovation of access control technology makes access control system enter an unprecedented transition period. The single verification method of access control system is gradually be replaced, and intelligent access control system will become the future development trend of the access control industry.Figure 44; Table 13; Reference 41Keywords: Access Control System,Fingerprint Recognition,RFID,STM32Chinese books catalog: TP399目次目次引言 (1)第 1 章绪论 (2)•门禁系统的概述 (2)•门禁系统的种类 (3)•门禁系统的研究现状及发展趋势 (4)•本课题研究的背景和意义 (4)•本课题研究的主要内容和结构 (6)第2 章射频识别系统原理 (8)•RFID 技术概述 (8)•RFID 系统的硬件组成 (9)•RFID 系统的软件组成 (11)•RFID 系统工作原理 (12)•电感耦合 (13)•电磁反向散射耦合 (13)•RFID 的频率标准 (14)•RFID 的应用领域 (15)•RFID 存在的问题 (16)•本章小结 (17)第3 章指纹识别技术原理 (18)•指纹识别技术概述 (18)•指纹识别原理 (19)•指纹图像的采集 (20)•指纹图像的预处理 (21)•指纹图像的特征提取 (24)•指纹图像的特征匹配 (26)•本章小结 (29)第4 章门禁系统的硬件设计 (30)•系统硬件设计方案 (30)•STM32 微控制器 (31)•MCU 主控芯片 (31)•串行外设接口(SPI) (33)•指纹识别模块设计 (36)•指纹传感器 (36)•指纹传感器模块接口 (37)•常用指令集 (38)•射频识别模块设计 (38)•MF RC522 简介 (39)•MF RC522 芯片特性 (40)•MF RC522 接口设计 (40)•天线设计 (42)4.4.5 S50 卡 (43)•系统电源电路 (44)•继电器模块 (45)•蜂鸣器提示电路 (46)•液晶显示电路 (46)•本章小结 (47)第5 章PC 机应用软件设计 (48)•Visual Studio 2010 开发环境 (48)•系统软件功能设计 (49)•系统管理软件设计 (50)•系统登录 (50)•用户信息管理 (51)•操作日志记录 (52)•用户信息查询 (52)•门锁控制界面 (52)•数据库设计 (53)•数据结构分析 (53)目次•数据表的设计 (55)•本章小结 (56)第6 章门禁系统软件设计 (57)6.1开发环境 (57)6.2主程序模块设计 (58)6.3射频模块程序设计 (59)6.4指纹模块程序设计 (63)6.5阅读器与射频卡之间的通信协议 (65)6.6本章小结 (66)结论 (67)参考文献 (68)附录A 门禁系统原理图 (71)致谢 (73)导师简介 (74)作者简介 (75)学位论文数据集 (76)引言引言生物识别技术是近几年发展起来的安全、便捷的身份认证技术,受到社会各界的高度重视。

基于STM32的智能人脸识别门禁系统

基于STM32的智能人脸识别门禁系统

基于STM32的智能人脸识别门禁系统发布时间:2021-11-10T07:55:16.824Z 来源:《科技新时代》2021年9期作者:任雪、程智、陈茹曦、钱赛、曾子昂、范晓龙、樊红莉[导读] 同时也带来卡片或密码丢失、遗忘,复制以及被盗用的隐患和成本高的问题。

湖北汽车工业学院摘要:人脸识别门禁系统基于先进的人脸识别技术,结合成熟的ID卡和指纹识别技术,创新推出的一款安全实用的生物识别门禁控制系统。

该系统采用分体式设计,人脸、指纹和ID卡信息的采集和生物信息识别及门禁控制内外分离,实用性高、安全可靠。

为了提高智能门禁的安全性和控制设计成本,本文提出了基于STM32的人脸识别门禁系统的设计方案。

本系统主要以STM32系列单片机作为微控制器,通过OLED显示屏显示信息,按键输入控制,人体红外检测判别人体存在,外设人脸识别模块进行人脸图像采集、识别,向控制器STM32传输识别信息,进而控制门禁的开关。

整个系统不需联网独立运行,减少安全隐患。

另外配有按键模块进行密码输入验证,指纹模块指纹验证,声音识别合成模块辅助验证。

关键词:STM32;人脸识别;智能门禁一.引言随着社会经济的高速发展,人们开始追求舒适、安全的生活环境。

智能建筑随之迅猛发展,门禁系统作为智能建筑中的重要单元越来越得到重视。

目前国内的门禁系统以卡类设备、指纹设备或密码设置为主。

这些识别方式都要求人员近距离操作,当使用者双手被占用时则显得极不方便,同时也带来卡片或密码丢失、遗忘,复制以及被盗用的隐患和成本高的问题。

近年来,随着生物识别技术的不断发展与成熟,其具有的便携性、非易失性、不会被遗忘、难盗用等优势也逐步应用到门禁系统中。

常见的生物识别技术有:指纹、虹膜、语音、人脸等多种识别方式[1]。

虽然人脸识别容易受到光照强度、采集角度等诸多因素的影响,但它具有非接触式、可在人們毫无察觉的情况下进行图像采集和不易被仿造、识别率较高的优势,具有广泛的应用价值和市场前景。

基于STM32单片机的智能锁

基于STM32单片机的智能锁

0 引言与传统的机械门锁相比,智能锁的优势显而易见[2]。

智能锁凭借生物识别技术独特的安全性和便捷性[1],摒弃了传统钥匙容易丢失,操作不便的特性,越来越受人们的喜爱,已经成为现代社会的主流,是社会发展的必然趋势。

同时目前共享经济繁荣,在世界各地短期网上租房住宿是受欢迎的,这使很多人有多余房间或房屋出租,但如果他们为短期租户提供传统的钥匙,有可能面临钥匙被复制的风险[3]。

而使用智能锁可以有效地解决这一问题。

房东可以为租客设置一个短期有效的指纹或者数字密码,并在租期结束时取消密码的有效性,所以智能锁将是短期租房者的最佳选择[4]。

此外,由于智能锁发生异常或被破坏,还可以进行报警提示周围的人,从而降低被盗窃的风险。

在本文中使用了指纹识别传感器,RFID 射频技术和嵌入式技术来实现具有报警功能的智能锁系统[5]。

该系统通过指纹识别模块和RFID 射频读取器识别用户信息,通过串行液晶屏幕执行人机交互,并通过继电器打开和关闭控制电控锁,如果多次识别错误,就会被视为非法侵入警告。

系统主要功能模块的划分如下: (1)主控芯片:接收并解析模块发送来的数据,并对各模块进行控制。

(2)指纹识别模块:将采集到的指纹图像进行解析,并通过串口通信的方式,将结果发送至STM32主控芯片。

如果身份识别成功时,则打开电控锁,如果身份多次识别失败时,就会启动蜂鸣器报警模式。

(3)电源模块:将稳定的电源提供给需要的模块。

(4)串口液晶屏:优秀人机交互控制界面,用户可以控制系统的运行和显示相关信息。

(5)门禁开关:系统通过主控芯片发送指令,对继电器模块进行控制,从而控制门锁的开关。

1 智能锁系统总体结构本文研究的智能锁系统根据市场实际情况,具有智能化、低成本、和使用便捷等优势,该系统主要实现的功能包括以下几点:(1)指纹识别功能:当指纹模块采集到指纹图像时。

对其进行特征处理,并与模块中的指纹库数据进行匹配,最后将结果发送给STM32单片机,单片机再作出判断,发送相应的指令。

基于STM32的智能门禁系统的设计

基于STM32的智能门禁系统的设计

基于STM32的智能门禁系统的设计作者:杨晶晶来源:《数码设计》2018年第08期摘要:本文结合指纹识别技术和射频识别技术的原理和特点,介绍了一种以STM32为控制中心,采用指纹识别模块和射频识别模块来进行身份验证,从而实现对门禁系统的控制的系统。

关键词:STM32;指纹识别;射频识别随着智能化时代的到来,以及物联网概念的兴起,作为集多种先进技术于一体的智能建筑,向新时代的人们提供着高质量、高安全、舒适性、方便的综合陛家居服务,同时体现着高效、节能、绿色的生活理念,作为安全防范不可或缺的设施,门禁系统在智能建筑领域有着重要的作用。

当前,常见的门禁系统有密码门禁系统、非接触式IC卡门禁系统、生物识别门禁系统(如指纹、人脸、虹膜、掌纹等)、乱序键盘门禁系统等。

随着科技的不断进步,人们对门禁系统的要求越来越高,门禁系统不仅要安全可靠,而且追求方便实用。

因此,一种高效的安全的门禁系统已经成为社会迫切的需求。

生物识别技术是一种根据人体固有的生理特征和行为特征来验证身份的技术,作为目前最为方便与安全的、有效的身份认证技术,越来越受到人们的青睐,指纹识别技术作为生物识别技术中应用最早的,最为实用可靠的,又不对人体造成侵犯的较为成熟的一种,一直都是人们研究的重点。

1射频识别技术射频识别技术是一种非接触式的自动识别技术,它是利用射频信号的空间耦合(电感或电磁耦合)或反射的传输特性,实现对目标对象的识别和相关数据信息的获取。

1.1射频识别系统的组成。

一个完整的射频识别系统主要由阅读器、电子标签、RFID中间件和应用系统四个部分组成。

阅读器:也称为读写器或读出装置,用于实现对电子标签数据的读写功能,主要由天线、射频接口和逻辑控制单元三部分组成。

电子标签:由耦合元件及芯片组成,是射频识别系统中信息的载体,依据应用场合的不同表现为不同的形态。

RFID中间件:是一种独立的系统软件或服务程序,扮演着电子标签和应用程序之间的中介角色。

基于stm32的as608指纹模块实验报告

基于stm32的as608指纹模块实验报告

基于stm32的as608指纹模块实验报告基于STM32的AS608指纹模块实验报告引言本实验报告旨在介绍基于STM32的AS608指纹模块的应用和实验过程。

实验准备在开始实验之前,需要准备以下材料和环境: - STM32开发板 - AS608指纹模块 - USB数据线 - 电脑 - Keil开发环境 - ST-Link下载器实验步骤步骤一:搭建硬件环境1.将STM32开发板与AS608指纹模块通过USB数据线连接。

2.使用ST-Link下载器将Keil开发环境中编译好的程序烧录到STM32开发板上。

步骤二:编写程序1.在Keil开发环境中创建新的工程,并选择STM32系列的芯片。

2.在工程中添加AS608指纹模块的相关库文件。

3.编写程序实现以下功能:–初始化指纹模块。

–采集指纹图像。

–提取指纹特征。

–比对指纹特征。

–存储和删除指纹。

–控制指纹模块的其他功能。

步骤三:调试程序1.使用Keil开发环境编译程序,并生成可执行文件。

2.将可执行文件通过ST-Link下载器烧录到STM32开发板上。

3.在电脑上打开串口调试工具,连接到STM32开发板。

4.手动触发指纹模块功能,通过串口调试工具查看输出结果。

步骤四:实验结果根据实验步骤三的调试过程,获取以下实验结果: - 初始化指纹模块成功。

- 采集指纹图像成功。

- 指纹特征提取成功。

- 指纹比对结果准确。

- 指纹存储和删除操作正常。

- 其他控制功能正常。

实验总结通过本次实验,我们成功实现了基于STM32的AS608指纹模块的各项功能。

实验过程中需要注意硬件的连接和工程的配置,同时还需要熟悉AS608指纹模块的相关指令和功能。

该实验为后续指纹识别应用的开发和优化提供了基础。

参考资料暂无抱歉,由于文本限制,无法继续添加内容。

如果您有其他具体需求,可以告诉我,我将尽力提供帮助。

基于单片机的指纹识别电子密码锁设计

基于单片机的指纹识别电子密码锁设计

基于单片机的指纹识别电子密码锁设计引言指纹识别技术的发展得益于现代电子集成制造技术和快速可靠的算法的研究。

尽管指纹只是人体皮肤的小部分,但用于识别的数据量相当大,对这些数据进行比对也不是简单的相等与不相等的问题,而是使用需要进行大量运算的模糊匹配算法。

现代电子集成制造技术使得我们可以制造相当小的指纹图像读取设备,同时飞速发展的个人计算机运算速度提供了在微机甚至单片机上可以进行两个指纹的比对运算的可能。

另外,匹配算法可靠性也不断提高,指纹识别技术己非常实用。

指纹识别原理指纹识别技术的原理和其它生物识别技术的原理相似。

它是利用人体的指纹特征对个体身份进行区分和鉴定。

在所有的生物识别技术中指纹识别技术是目前最为成熟,也被应用最广的生物识别技术。

这主要因为指纹采用的过程对人们来讲非常简单,指纹识别的准确率高的原因。

严格来讲,指纹识别的原理包括指纹采集原理、指纹特征提取原理和指纹特征匹配原理三大部分。

指纹采集原理主要是根据指纹的几何特性或生理特性,通过各种传感技术把指纹表现出来,形成数字化表示的指纹图案。

由于指纹的嵴和峪的几何特征不同,主要表现为嵴是突起的,峪是凹下的,所以在接触到光线时,其反射光的强度也就不同。

在接触到平面时,其在平面上形成的压力也就不同。

另一方面,由于指纹的嵴和峪的生理特征不同,主要表现为:嵴和峪的温度不同,其导电性也不同,其对波长的反馈也就不同。

通过这些几何的、生理的特性的不同,把人的指纹采集到计算机系统中形成指纹图像。

指纹特征分析的原理是对指纹图案的整体特征和细节特征进行提取、鉴别的原理。

其分析的对象包括纹形特征和特征点的分布、类型,以及一组或多组特征点之间的平面几何关系。

特征点的平面几何关系表现为某个特征点之间的距离等,或者某三个或更多特征点之间组成的多边形的几何特性。

不论是特征点的单体特征,还是特征点的组合特征都是指纹特征的组成部分。

把这些指纹特征用数字模板的形式表示出来,就实现了一个指纹特征分析的过程。

基于STM32的嵌入式语音识别模块设计

基于STM32的嵌入式语音识别模块设计

基于STM32的嵌入式语音识别模块设计嵌入式语音识别模块是目前人工智能技术的重要组成部分,其应用广泛,包括语音控制、语音导航、语音交互等。

本文基于STM32单片机设计了一款嵌入式语音识别模块,具有高效、稳定、易用等多种优点。

一、方案设计该嵌入式语音识别模块采用STM32F407单片机作为核心,结合语音识别算法和音频处理技术,实现语音识别功能。

具体方案如下:1.采样:采用音频电路将采样音频转化为数字信号,采用PCM编码方式,采样频率为16KHz。

2.预处理:预处理包括去噪、滤波等处理,以消除环境噪音和语音信号之间的干扰。

3.特征提取:利用Mel频率倒谱系数(MFCC)算法将信号的音频特征提取出来,提取后的特征值可以表达出音频的不同特点。

4.模型匹配:根据提取出的特征值与已预设的模型进行匹配,找出最相符的模型。

5.识别、输出:识别出的结果通过串口输出到上位机,上位机对结果进行相应的处理和反馈。

二、实现过程1.硬件设计:由于STM32F407单片机片内有ADC、DAC、TIM3定时器、USART等模块,因此只需要添加少量的外围电路即可满足设计要求。

2.软件设计:主要采用C语言进行编程,使用Keil和STM32CubeMX开发工具,分别进行程序设计和引脚配置。

在嵌入式语音识别模块的整个流程中,程序的实现涉及到多个算法的实现,包括信号的预处理、特征提取、模型匹配等。

三、性能与应用经过多次测试,该嵌入式语音识别模块的识别率达到了95%以上,且实现了较好的去噪和滤波效果,可以满足大多数语音识别应用场景。

此外,该模块的具有硬件条件简单、体积小、功耗低等优势,既可以实现控制指令识别,也可以作为语音交互系统的基础组件使用。

综上所述,本文提出的基于STM32的嵌入式语音识别模块基于成熟的语音识别算法,在设计上更加简便实用,在性能上也能满足大部分嵌入式语音识别应用场景的需求,具有广泛的应用前景。

基于单片机的指纹门禁系统设计

基于单片机的指纹门禁系统设计

基于单片机的指纹门禁系统设计基于单片机的指纹门禁系统是一种可以通过指纹验证来开启门锁的现代化门禁系统。

该系统利用单片机控制芯片和指纹识别技术,让门锁的开关更加安全和智能化。

在这篇文章中,我将详细探讨基于单片机的指纹门禁系统设计原理和流程。

首先,我们需要了解单片机的指纹门禁系统在工作原理上的基本要求。

该系统需要对接指纹识别器,通过对指纹信号的识别,判断访问者是否有权限进入门禁区域。

如果有权限,则系统会控制驱动门锁开启。

而如果没有权限,系统会自动拒绝门禁申请。

接下来,我们需要考虑如何实现这个门禁系统的具体设计。

以下是一些基于单片机的指纹门禁系统的设计步骤:1. 硬件设计:首先设计一个基于单片机的指纹识别器。

这个指纹识别器需要与处理器和其他电子元件完美合作,确保系统的稳定和可靠性。

2. 指纹识别功能实现:指纹识别功能是该门禁系统的核心。

选择一款优秀的指纹识别算法,并在系统中实现。

系统需要对指纹进行采集、去噪、特征提取等处理,保证对指纹的识别率。

并在系统中实现对指纹库的管理,在数据库中存储和更新指纹信息。

3. 门锁控制设计:门锁的控制是另一个非常关键的组成部分。

通过单片机的控制,实现与门锁的电路连接,并且能够控制门锁开启和关闭。

4. 控制程序编写:编写控制程序,将硬件设计和指纹识别算法实现进行整合。

控制程序需要完成指纹识别、门锁控制和数据库管理等功能,保证门禁系统的运作。

5. 软件设计:除了控制程序,系统还需要一款易于操作的软件。

该软件用于管理用户、权限和门禁的参数设置等信息,对于使用者来说非常方便。

以上是基于单片机的指纹门禁系统设计的主要步骤,整个系统必须进行严格测试,以保证指纹识别准确率,门锁开关灵活性以及系统运行稳定性。

总之,基于单片机的指纹门禁系统可以提高门禁系统的安全性和可靠性。

随着科技的不断发展,这种门禁系统将会越来越受欢迎。

基于STM32指纹密码锁设计

基于STM32指纹密码锁设计

基于STM32指纹密码锁设计【摘要】为了提升智能门禁系统的安全性并控制设计成本,提出了基于STM32的指纹识别密码锁系统设计方案。

系统以STM32F103C8T6单片机为控制核心,采用触摸屏、指纹识别模块及继电器等器件,通过触摸屏输入开锁密码,并在指纹识别模块上输入指纹,系统在密码与指纹均正确的情况下,通过单片机控制继电器开锁,系统管理员可以根据需求修改密码、增加用户及删除用户。

测试结果表明:系统功能稳定,易于实现且成本较低,具有一定的应用价值【关键词】智能门禁;STM32;指纹;密码锁0 引言随着计算机控制技术的发展以及人们生活水平的提高,智能家居已成为现代家居生活发展的方向,而智能门禁系统是智能家居发展的方向之一,�T禁系统凭借其独特的优越性在安防系统中得到了飞速的发展和广泛的应用[1]。

目前门禁管理系统中应用较多的是机械锁及IC卡电子密码锁,但人们对门禁系统的要求越来越高,不仅要求门禁系统安全可靠,而且追求方便实用。

各种依靠指纹、虹膜及人脸等生物特征识别方式的电子锁,逐渐开始应用到人们的生活中[2-4]。

结合技术与成本等方面的考虑,本文提出一种智能门禁系统设计方案,通过指纹和密码识别方式进行双重保护,方便使用的同时又提高了安全性,具有一定的实用价值1 系统方案设计系统整体设计框图如图1所示。

以STM32单片机、触摸屏、指纹识别模块等器件为核心,实现指纹和密码开锁等功能。

系统的主控芯片为STM32F103C8T6,可以控制FPM10A指纹模块与MINI DGUS触摸屏的正常工作。

在触摸屏上输入的密码和在指纹模块上输入的指纹都正确时,系统控制继电器进行开锁。

同时通过片内资源IIC接口与外设存储器AT24C02进行通信,控制外设存储器存/取用户信息,达到断电保护的作用。

管理员可以根据需求进行相应设置(增加、修改密码、删除用户),整体功能满足正常密码锁的需求2 系统实现2.1 主控芯片控制功能的实现STM32F103C8T6最小系统由主控芯片及电源模块、晶振电路、复位电路、调试电路等构成。

基于STM32单片机开发光学指纹识别模块

基于STM32单片机开发光学指纹识别模块

基于STM32单片机开发光学指纹识别模块(FPM10A)全教程收藏人:共同成长8882014-05-08 | 阅:25 转:0 | 来源 | 分享基于STM32单片机开发光学指纹识别模块(FPM10A)全教程1.平台首先我使用的是奋斗STM32开发板 MINI板光学指纹识别模块(FPM10A)2.购买指纹模块,可以获得三份资料1.简要使用说明2.使用指纹模块的功能函数3.FPM10A用户手册.3.硬件搭建根据使用说明:FPM 10A使用标准的串口与外界通信,默认的波特率为57600,可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。

FPM10A光学指纹模块共有5个管脚1 为 VCC 电源的正极接 3.6V – 5.5V的电压均可。

2 为 GND 电源的负极接地。

3 为 TXD 串口的发送。

4 为 RXD 串口的接收。

5 为 NC 悬空不需要使用。

奋斗板上已经有5V的管脚,可以直接供给指纹模块,这里需要注意的是,指纹模块主要通过串口进行控制,模块和STM32单片机连接的时候,需要进行电平转换,这样只要把这个转接板插入STM32,接上5V的电,就可以工作了,将模块的发送端接转接板的接收端,接收端接转接板的发送端。

这样,我们的硬件平台就搭建好了!4.模块的测试工作模块成功上电后,指纹采集窗口会闪一下,表示自检正常,如果不闪,请仔细检查电源,是否接反,接错等。

指纹模块使用120MHZ的DSP全速工作,工作时芯片有一些热,经过严格的测试,这是没有问题的可以放心使用,在不使用的时候可以关闭电源,以降低功耗。

5.现在我们要进入编程环节了指纹模块主要是通过串口进行控制,所以这里我们需要用到单片机的串口模块。

我们需要用到两个关键函数1.使用串口发送一个字节的数据2.使用串口接收一个字节的数据这里我使用的STM32单片,所以这两个程序如下:view sourceprint?01.// 从 USART1 发送一个字节02.void USART1_SendByte(unsigned char temp)03.{04. USART_SendData(USART1, temp);05. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);06.}07.08.// 从 USART1 读取一个字节09.unsigned char USART1_ReceivByte()10.{11. unsigned char recev;12. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);13. recev = USART_ReceiveData(USART1);14. return recev;15.}6.查看FPM10A用户手册我们来实现比对一个指纹(我们这里假设指纹模块中已经存在指纹模板)首先我们需要让指纹模块检测是否有指纹输入(也就是是否有手指放在指纹模块上检测)我们来看手册上给的操作说明:我们需要发送给定的数据包给模块,发送的数据已经给我们了,现在我们参看给我们的C例程view sourceprint?01.//应答包数组02.unsigned char dat[18];03.04.//获得指纹图像05.06.unsigned char FP_Get_Img[6]={0x01,0x00,0x03,0x01,0x0,0x05};07.08.//协议包头09.10.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};11.12.//FINGERPRINT_获得指纹图像命令13.void FINGERPRINT_Cmd_Get_Img(void)14.{15. unsigned char i;16.17. for(i=0;i<6;i++) //发送包头18. USART1_SendByte(FP_Pack_Head[i]);19.20. for(i=0;i<6;i++) //发送命令 0x1d21. USART1_SendByte(FP_Get_Img[i]);22.23. for(i=0;i<12;i++)//读回应答信息24. dat[i]=USART1_ReceivByte();25.}说明:这个函数就是检测是否有指纹输入的信息,根据用户手册,当确认码返回值为0时,表示成功录入,所以,我们可以有下面的函数:view sourceprint?01.//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败02.unsigned char test_fig()03.{04. unsigned char fig_dat;05. FINGERPRINT_Cmd_Get_Img();06. Delay_ms1(20);07. fig_dat=dat[9];08. return(fig_dat);09.}10.11.因此,我们在主函数中可以这样调用:12.void main13.{14. if(test_fig()==0)15. {16. //do something17. }18.}7.如何录入一个新的指纹信息呢?步骤如下1.获得指纹图像2.检测是否成功的按了指纹3.将图像转换成特征码存放在Buffer1中4.再次获得指纹图像5.将图像转换成特征码存放在Buffer2中6.转换成特征码7.存储到指定地址上同样的,根据用户手册,我们可以得到以下这样的模块:当调用的时候,你只要给这个函数附上两个值就可以了,例如:unsigned char FP_add_new_user(00,01);如果你下次再次写入这个地址,以前存储的指纹模板信息将被覆盖view sourceprint?01.//添加一个新的指纹02.unsigned char FP_add_new_user(unsigned char ucH_user,unsign ed char ucL_user)03.{04. do05. {06. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像07. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹08.09. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中10.11. do12. {13. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像14. } while( dat[9]!=0x0 );15.16. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中18. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码19.20. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);21.22. return 0;23.}24.25.//存储模版到特定地址26.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned char ucL_Char)27.{28. unsigned long temp = 0;29. unsigned char i;30.31. FP_Save_Finger[5] = ucH_Char;32. FP_Save_Finger[6] = ucL_Char;33.34. for(i=0;i<7;i++) //计算校验和35. temp = temp + FP_Save_Finger[i];36.37. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据38. FP_Save_Finger[8]= temp & 0x0000FF;39.40.41. for(i=0;i<6;i++)42. USART1_SendByte(FP_Pack_Head[i]); //发送包头43.44. for(i=0;i<9;i++)45. USART1_SendByte(FP_Save_Finger[i]) ;//发送命令将图像转换成特征码存放CHAR_buffer146.47. for(i=0;i<12;i++)48. dat[i]=USART1_ReceivByte();49.}8.如何删除一个模板?view sourceprint?01.//删除所有指纹模版02.void FINGERPRINT_Cmd_Delete_All_Model(void)03.{04. unsigned char i;06. for(i=0;i<6;i++) //发送包头07. USART1_SendByte(FP_Pack_Head[i]);08.09. for(i=0;i<6;i++) //发送命令 0x1d10. USART1_SendByte(FP_Delet_All_Model[i]);11.12. for(i=0;i<12;i++)//读回应答信息13. dat[i]=USART1_ReceivByte();14.}9.如何获取已经存取的指纹模板信息?这个模块一共可以存储0~999枚指纹信息view sourceprint?01.//搜索全部用户999枚02.void FINGERPRINT_Cmd_Search_Finger(void)03.{04. unsigned char i;05. //发送命令搜索指纹库06. for(i=0;i<6;i++)07. {08. USART1_SendByte(FP_Pack_Head[i]);09. }10.11. for(i=0;i<11;i++)12. {13. USART1_SendByte(FP_Search[i]);14. }15.16. for(i=0;i<16;i++)17. {18. dat[i]=USART1_ReceivByte();19. }20.}根据用户手册,我们可以从应答包中得出模块中已经存在指纹数量的大小这样,我们就轻松把指纹模块搞定!下面我附上基于STM32单片机光学指纹识别模块(FPM10A)打包好的函数库第一个是 FPM10A.cview sourceprint?001.#include "stm32f10x.h"002.#include "stm32f10x_usart.h"003.#include "misc.h"004.unsigned char dat[18];005.006.//FINGERPRINT通信协议定义007.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头008.unsigned char FP_Get_Img[6] ={0x01,0x00,0x03,0x01,0x0,0x05}; //获得指纹图像009.unsigned char FP_Templete_Num[6]={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数010.unsigned char FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0 x0,0x03,0xA1,0x0,0xB2}; //搜索指纹搜索范围0 - 929011.unsigned char FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01,0 x0,0x0,0x0,0x13,0x0,0x21};//搜索0-9号指纹012.unsigned char FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x0 1,0x0,0x08}; //将图像放入到BUFFER1013.unsigned char FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x0 2,0x0,0x09}; //将图像放入到BUFFER2014.unsigned char FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09 }; //将BUFFER1跟BUFFER2合成特征模版015.unsigned char FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d,0x 00,0x11}; //删除指纹模块里所有的模版016.unsigned char FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01, 0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置017.unsigned char FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0x0 ,0x0,0x0,0x1,0x0,0x0}; //删除指定的模版018.019.020.//从 USART1 发送一个字节021.void USART1_SendByte(unsigned char temp)022.{023. USART_SendData(USART1, temp);024. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);025.}026.027.//从 USART1 读取一个字节028.unsigned char USART1_ReceivByte()029.{030. unsigned char recev;031. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);032. recev = USART_ReceiveData(USART1);033. return recev;034.}035.//FINGERPRINT命令字036.//FINGERPRINT_获得指纹图像命令037.void FINGERPRINT_Cmd_Get_Img(void)038.{039. unsigned char i;040.041. for(i=0;i<6;i++) //发送包头042. USART1_SendByte(FP_Pack_Head[i]);043.044. for(i=0;i<6;i++) //发送命令 0x1d045. USART1_SendByte(FP_Get_Img[i]);046.047. for(i=0;i<12;i++)//读回应答信息048. dat[i]=USART1_ReceivByte();049.}050.051.//删除所有指纹模版052.void FINGERPRINT_Cmd_Delete_All_Model(void)053.{054. unsigned char i;055.056. for(i=0;i<6;i++) //发送包头057. USART1_SendByte(FP_Pack_Head[i]);058.059. for(i=0;i<6;i++) //发送命令 0x1d060. USART1_SendByte(FP_Delet_All_Model[i]);061.062. for(i=0;i<12;i++)//读回应答信息063. dat[i]=USART1_ReceivByte();064.}065.066.//讲图像转换成特征码存放在Buffer1中067.void FINGERPRINT_Cmd_Img_To_Buffer1(void)068.{069. unsigned char i;070. for(i=0;i<6;i++) //发送包头071. {072. USART1_SendByte(FP_Pack_Head[i]);073. }074. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1075. {076. USART1_SendByte(FP_Img_To_Buffer1[i]);077. }078. for(i=0;i<12;i++)//读应答信息079. {080. dat[i]=USART1_ReceivByte();//把应答数据存放到缓冲区081. }082.}083.084.//将图像转换成特征码存放在Buffer2中085.void FINGERPRINT_Cmd_Img_To_Buffer2(void)086.{087. unsigned char i;088. for(i=0;i<6;i++) //发送包头089. {090. USART1_SendByte(FP_Pack_Head[i]);091. }092.093. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1094. {095. USART1_SendByte(FP_Img_To_Buffer2[i]);096. }097. for(i=0;i<12;i++)098. {099. dat[i]=USART1_ReceivByte();//读回应答信息100. }101.}102.103.//将BUFFER1 跟 BUFFER2 中的特征码合并成指纹模版104.void FINGERPRINT_Cmd_Reg_Model(void)105.{106. unsigned char i;107.108. for(i=0;i<6;i++) //包头109. {110. USART1_SendByte(FP_Pack_Head[i]);111. }112.113. for(i=0;i<6;i++) //命令合并指纹模版114. {115. USART1_SendByte(FP_Reg_Model[i]);117.118. for(i=0;i<12;i++)119. {120. dat[i]=USART1_ReceivByte();121. }122.}123.124.//存储模版到特定地址125.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned charucL_Char)126.{127. unsigned long temp = 0;128. unsigned char i;129.130. FP_Save_Finger[5] = ucH_Char;131. FP_Save_Finger[6] = ucL_Char;132.133.134. for(i=0;i<7;i++) //计算校验和135. temp = temp + FP_Save_Finger[i];136.137. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据138. FP_Save_Finger[8]= temp & 0x0000FF;139.140.141. for(i=0;i<6;i++)142. USART1_SendByte(FP_Pack_Head[i]); //发送包头143.144. for(i=0;i<9;i++)145. USART1_SendByte(FP_Save_Finger[i]); //发送命令将图像转换成特征码存放在 CHAR_buffer1146.147. for(i=0;i<12;i++)148. dat[i]=USART1_ReceivByte();149.}150.151.//获得指纹模板数量152.void FINGERPRINT_Cmd_Get_Templete_Num(void)153.{154. unsigned int i;155.156. for(i=0;i<6;i++) //包头157. USART1_SendByte(FP_Pack_Head[i]);159. //发送命令 0x1d160. for(i=0;i<6;i++)161. USART1_SendByte(FP_Templete_Num[i]);162.163. for(i=0;i<12;i++)164. dat[i]=USART1_ReceivByte();165.}166.167.//搜索全部用户999枚168.void FINGERPRINT_Cmd_Search_Finger(void)169.{170. unsigned char i;171. //发送命令搜索指纹库172. for(i=0;i<6;i++)173. {174. USART1_SendByte(FP_Pack_Head[i]);175. }176.177. for(i=0;i<11;i++)178. {179. USART1_SendByte(FP_Search[i]);180. }181.182. for(i=0;i<16;i++)183. {184. dat[i]=USART1_ReceivByte();185. }186.}187.188.//搜索用户0~9枚189.void FINGERPRINT_Cmd_Search_Finger_Admin(void) 190.{191. unsigned char i;192. for(i=0;i<6;i++) //发送命令搜索指纹库193. {194. USART1_SendByte(FP_Pack_Head[i]);195. }196.197. for(i=0;i<11;i++)198. {199. USART1_SendByte(FP_Search_0_9[i]);200. }201.202. for(i=0;i<12;i++)203. dat[i]=USART1_ReceivByte();204.}205.206.//添加一个新的指纹207.unsigned char FP_add_new_user(unsigned char ucH_user,unsig ned char ucL_user)208.{209. do210. {211. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像212. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹213.214. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中215.216. do217. {218. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像219. } while( dat[9]!=0x0 );220.221. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中222.223. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码224.225. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);226.227. return 0;228.}第2个 FPM10A.hview sourceprint?01.#ifndef _FPM10A_H02.#define _FPM10A_H03.#include <stdint.h>04.05.extern unsigned char dat[18];06.07.extern void FINGERPRINT_Cmd_Get_Img();08.extern void FINGERPRINT_Cmd_Img_To_Buffer1();09.extern void FINGERPRINT_Cmd_Img_To_Buffer2();10.extern void FINGERPRINT_Cmd_Reg_Model();11.extern void FINGERPRINT_Cmd_Delete_All_Model(void);12.extern void FINGERPRINT_Cmd_Search_Finger(void);13.extern void FINGERPRINT_Cmd_Get_Templete_Num(void);14.extern void FINGERPRINT_Cmd_Search_Finger_Admin(void);15.extern void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_ Char, unsigned charucL_Char);16.extern unsigned char FP_add_new_user(unsigned char ucH_user ,unsigned charucL_user);17.18.19.extern void USART1_SendByte(unsigned char temp);20.extern unsigned char USART1_ReceivByte();21.22.extern void Delay_ms1(uint32_t nCount);23.24.void Delay_nus1(uint32_t nCount)25.{26. uint32_t j;27. while(nCount--)28. {29. j=8;30. while(j--);31. }32.}33.34.void Delay_ms1(uint32_t nCount)35.{36. while(nCount--)37. Delay_nus1(1100);38.}39.40.unsigned char test_fig()//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败41.{42. unsigned char fig_dat;43. FINGERPRINT_Cmd_Get_Img();44. Delay_ms1(20);45. fig_dat=dat[9];46. return(fig_dat);47.}48.49.#endif有了这两个东西,加入到你的工程中,就可以直接调用啦!。

基于STM32的智能电子密码锁系统设计

基于STM32的智能电子密码锁系统设计

结论与展望
结论与展望
本次演示基于STM32单片机设计了一种智能电子密码锁系统,实现了较高的安 全性和便捷性。然而,在研究中仍存在一些不足之处,例如还可以进一步优化加 密算法提高系统安全性,同时还可以加入更多智能功能如指纹识别、面部识别等 提升锁具的全面性能。在未来的研究中,将进一步探索智能电子密码锁系统的优 化设计和多功能集成,以实现更加高效和安全的锁定功能。
三、硬件设计
2、指纹识别芯片:选用常见的指纹识别芯片,如FT-601或FT-600等,对该 模块进行开发,实现指纹图像的采集、处理和比对功能。
三、硬件设计
3、显示屏:选用LCD或LED显示屏,用于显示系统的操作界面、开锁状态等信 息。
4、键盘:提供按键输入功能,便于用户输入密码和进行系统设置。
三、硬件设计
三、硬件设计
三、硬件设计
基于STM32的指纹密码锁控制系统硬件部分主要包括STM32单片机、指纹识别 芯片、显示屏、键盘、电源等部分。
三、硬件设计
1、STM32单片机:作为控制系统的核心,STM32单片机负责整个系统的协调 与控制。它接收用户的指纹信息和密码输入,并控制指纹识别芯片和密码加密模 块等进行相应的处理。
六、应用前景
六、应用前景
基于STM32单片机的指纹密码锁控制系统具有较高的安全性和便利性,能够广 泛应用于家庭、办公室等各种场所。随着技术的不断发展,该系统还可以结合其 他智能家居技术,如物联网等,实现更加智能化和人性化的门禁控制系统,具有 广泛的应用前景和优势。
谢谢观看
2、重点模块设计
(1)按键模块
(1)按键模块
本系统采用4×4键盘矩阵,用户通过键盘输入密码。为提高密码输入的准确 性,系统采用去抖动处理,有效避免因按键抖动引起的误操作。

基于单片机的指纹识别系统设计毕业论文设计

基于单片机的指纹识别系统设计毕业论文设计

本科毕业论文基于单片机的指纹识别系统设计摘要科学技术的发展在让社会进步的同时,也让传统的安全管理系统受到威胁。

生物识别技术的出现给身份识别的研究带来了突飞猛进的发展。

每个人都有着自己特有的特征,用本身的特征来验证身份有着得天独厚的优势。

本文概述了自动指纹识别系统的研究现状和指纹识别系统的算法流程,以及在此基础上的指纹图像的分割算法和指纹图像细化算法,并完成基于单片机的指纹识别系统硬件电路设计。

应用TFS-M51指纹识别模块,设计基于单片机的指纹识别硬件电路,形成一个独立的指纹识别系统。

该系统实现单片机和指纹模块之间的串口通信。

通过操作独立式键盘按键,向指纹模块的DSP芯片发送相应指令,从而执行添加用户、删除指定用户、删除全部用户、认证用户,以及管理用户权限等功能。

关键词:生物识别技术;指纹识别;串口通信;单片机ABSTRACTThe development of science and technology made the social go forward, but at the same time it also makes the traditional safety management system under threaten at the same time. The emergence of biometric technologies brought a rapid development for the research of identification. For everyone has their own special features, with the characteristics of itself to verify identity has a unique advantage. Automatic fingerprint identification technology has been widely used in public security, such as the customs, the bank, the network security and other places which need identification. This article provides an overview of the research of fingerprint identification system in present situation and the algorithm flow of it. On this basis, to do an analysis of the fingerprint image segmentation algorithm and the fingerprint image thinning algorithm, including the microcontroller-based fingerprint identification system hardware circuit design.With the application of TFS-M51 fingerprint module, I designed a hardware circuit system of fingerprint identification based on the MCU, in order to form an independent fingerprint identification system. The means of communication between MCU and fingerprint module in the system is based on serial communication. MCU sends a corresponding instruction to the fingerprint DSP chip module through stand-alone keyboard keys, in order to execute the functions, such as Add User, Delete the Specified User, Delete All Users, Authenticated Users, and Manage User Permissions and so on.Key words: Biometric technology; Fingerprint identification; Serial Communications; MCU (Microcontroller Unit)目录1.绪论 (1)1.1.研究的背景及意义 (1)1.2.指纹识别技术 (1)1.2.1.指纹识别技术特点 (1)1.2.2.指纹识别技术发展现状 (2)1.3.系统概述 (3)2.指纹识别原理 (4)2.1.指纹图像的分割 (4)2.1.1.指纹图像分割概述 (4)2.1.2.均值方差法 (4)2.2.指纹图像的细化 (6)2.2.1.指纹图像细化的预处理 (6)2.3.指纹图像的特征提取 (8)2.3.1.指纹特征提取概述 (8)2.3.2.指纹特征提取和去伪特征 (8)2.4.指纹图像的匹配 (9)3.硬件系统设计 (10)3.1.系统总体设计 (10)3.1.1.系统功能简述 (10)3.1.2.系统电路设计 (10)3.2.系统核心部件单片机 (11)3.3.其他模块电路 (14)3.3.1.电源模块 (14)3.3.2.时钟模块 (14)3.3.3.按键模块 (15)3.3.4.显示模块 (15)3.3.5.复位模块 (16)3.3.6.下载口模块 (16)3.4.指纹模块 (17)3.4.1.TFS-M51指纹识别模块 (17)3.4.2.TMS320VC5501 芯片 (18)4.软件系统设计 (20)4.1.TFS-M51指纹识别模块指令系统 (20)4.1.1.通信方式 (20)4.1.2.主要通讯协议命令说明 (21)4.2.单片机的程序设计 (24)4.2.1.键盘管理及指示灯响应程序设计 (24)4.2.2.LED显示模块设计 (27)4.2.3.通信模块程序设计 (28)5.调试 (30)5.1.单片机的程序下载 (30)5.2.串口调试 (30)6.总结和展望 (35)参考文献 (36)致谢 (38)附录 (39)附录A 单片机最小系统电路图 (39)附录B PCB图 (40)附录C 元器件布局图 (41)附录D 单片机最小系统实物图 (42)附录E 单片机最小系统元器件清单 (43)附录F 程序清单 (44)1.绪论1.1. 研究的背景及意义科学技术的迅猛发展为人类的生产生活带来了极大的便利,大大地推动了社会的进步和发展。

指纹密码锁的设计

指纹密码锁的设计

指纹密码锁的设计陈钰闻巨永锋沈佳俊杜凯%长安大学电子与控制工程学院)摘 要 针对传统机械锁、卡片钥匙式电子锁及电子密码锁等存在的问题,提出基于单片机的以指纹和密码共同控制的指纹密码锁,使系统更加安全、便捷和智能化。

采用STM32F103ZET6单片机控制指纹模 块,同时与指纹模块进行信息交互,指纹模块正常响应后自动进入指纹识别过程;采用TFTLCD 液晶触摸屏实现对人体指纹的录入、清除等功能;指纹模块正常识别后,进入密码输入系统,用户根据TFTLCD 液 晶触摸屏的提示使用默认密码、进入管理员界面修改密码及掉电保存密码等功能;当密码输入符合要求时,电磁锁自动打开,用户可以进入室内或执行其他部件,完成后续功能。

关键词指纹密码锁单片机指纹模块密码输入模块显示模块中图分类号 3463.85+4文献标识码 B智能锁具在工厂、军械库、机要室、医院、智能建筑、银行、宾馆、车场、学校及快递等领域广泛运用。

传统的机械锁、卡片钥匙式电子锁及电子密码锁等存在一些问题,如机械锁必须使用机械钥匙开门,卡片钥匙式电子锁需要卡片作为钥匙开门,而且这两类锁都存在易复制、易被他人解锁和易丢失的问题;同样,传统电子密码锁也存在密码容易被盗等缺点。

为此,笔者基于 STM32F103ZET6单片机设计了一种以指纹和密码共同控制的指纹密码锁,将指纹的唯一性和多样性特征与现代科技相结合,使信息安全、经济安全、人身安全的保障相较于传统的锁具更加可靠、多样和便捷。

1总体方案基于STM32F103ZET6单片机的指纹密码锁主要由总控制器、指纹模块、密码输入模块、显示模块、执行机构、声光报警模块、字库存储模块及其他扩展模块等组成(图1 )。

通过总控制器控制指纹模块,实现指纹的识别;指纹模块实现指纹的采集和保存功能;密码输入模块实现密码的输 入、修改和保存,达到控制电磁锁的目的;显示模 块用于实时显示设备的工作状态;触摸屏用于实文章编号 1000-3932 (2021 )03-0283-05现录取和删除指纹的功能,也可以提醒使用者进行下一步操作;声光报警模块的主要作用是实现信号传递;执行机构是电磁锁,通过总控制器对指纹模块和密码输入模块进行控制,实现电磁锁 的打开与关闭功能;字库存储模块主要指SRAM和SD 卡,用于液晶显示汉字;其他扩展模块包括电源、继电器等,起到提供电源、控制电路等作 用。

基于单片机的指纹密码锁系统设计

基于单片机的指纹密码锁系统设计

参考内容
基于单片机的指纹密码锁是一种集成了生物识别技术和嵌入式系统技术的安 全装置。它通过采集并比对指纹信息来决定是否授予访问权限。这种密码锁具有 很高的安全性和便捷性,因此在家庭、办公场所、工业等领域得到了广泛应用。
指纹密码锁的发展可以追溯到20世纪90年代,当时人们开始研究生物识别技 术在安全领域的应用。随着科技的发展和人们安全意识的提高,指纹密码锁逐渐 普及。现在,指纹密码锁已经成为市场上的主流产品,需求量不断增长。
指纹密码锁是一种利用指纹识别技术来控制锁的开启与关闭的设备。它通过 采集用户的指纹信息并存储在芯片中,在开锁时进行比对,以判断是否为合法用 户。单片机作为控制核心,负责处理指纹信息、控制开关门等操作。
设计指纹密码锁的主要步骤包括硬件设计和软件设计。硬件设计主要包括指 纹采集模块、控制开关和报警模块等的设计。软件设计主要涉及指纹信息的采集、 存储和比对等操作。具体步骤如下:
1、选取合适的单片机作为控制核心,例如STM32系列单片机。
2、安装指纹采集模块,并连接单片机。该模块可采用光学或电容式指纹识 别技术。
3、设计控制开关,连接单片机,实现通过单片机的控制进行开关门操作。 4、添加报警模块,如遇到非法入侵,通过单片机控制触发报警系统。
5、在单片机中编写控制程序,实现指纹信息的采集、存储和比对等功能。
总之,基于单片机的指纹密码锁是一种非常实用的安全装置,具有很高的安 全性和便捷性。随着科技的不断进步和应用场景的不断扩展,我们有理由相信它 将成为未来安全领域的重要发展方向。
参考内容二
在当今社会,随着科技的不断发展,人们对于自身财产的安全性越来越重视。 其中,门锁作为保护家庭或重要场所的第一道防线,历来受到广泛。传统门锁存 在被钥匙遗忘、复制钥匙等风险,因此,指纹密码锁作为一种新兴的安全防护设 备,逐渐进入人们的视野。本次演示将介绍一种基于单片机的指纹密码锁的设计。

基于STM32系列单片机的智能手势识别多功能系统

基于STM32系列单片机的智能手势识别多功能系统

2020年33期众创空间科技创新与应用Technology Innovation and Application基于STM32系列单片机的智能手势识别多功能系统王娟(湖北文理学院理工学院,湖北襄阳441025)绪论基于STM32F401RBT6系列单片机的手势识别研究是顺应时代AI 人工智能发展的潮流[1]。

通过STM32为主控芯片的手势识别具有新颖的创新特点,手势的识别通过芯片的分解,信号的传输,控制芯片的捕获,形成一个人工智能的新窗口———手势识别控制技术。

为了继续寻找新的突破口,就必须研究人机交互中的手势的相关用法,从而确定合理的可行研究范围[2]。

手势识别的研究范围十分广泛,应用也十分多元,在我们日常所见的最多的便是关于计算机辅助哑语教学的、关于电影的制作中的特技特效的处理等方面[3],这样为我们的许多聋哑人士的生活学习与工作条件提供了极大便利,同时,对于手势研究牵扯的学科知识比较广泛,例如手势教学、机器人的运动学、计算机的图形学等多学科[4]。

1手势识别系统原理基于STM32F401RBT6手势识别的多功能系统模型如图1所示,当给入一个手势信号时,手势识别芯片将手势信号从给入的视频信号中进行分割,通过手势模型来进行手势的分析,其包括手势特征的分析和模型参数的分析,然后根据识别所得出来的不同手势结果从而可以形成不同的手势描述性语言,再接着就是通过生成的描述语言,通过主控芯片去驱动具体的应用,从而达到手势控制的作用[5]。

2手势传感器PAJ7620手势识别模块是由原相科技(PixArt )公司新推出的一款光学数组式传感器件,它的内部自带有一种集成的特殊LED ,该LED 里面内部是各种感测器和一些内置集成光源,可以在黑暗或者弱光的环境下仍然保持高度警觉的工作状态,更为强大的是它还支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的九个手势类型和输出的手势中断和结果[6]。

并且它内置了距离检测模块,还可以提供接近检测功能,可感测物体接近或离开。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于STM32单片机开发光学指纹识别模块(FPM10A)全教程收藏人:共同成长8882014-05-08 | 阅:25 转:0 | 来源| 分享基于STM32单片机开发光学指纹识别模块(FPM10A)全教程• 1.平台首先我使用的是奋斗STM32开发板 MINI板光学指纹识别模块(FPM10A)2.购买指纹模块,可以获得三份资料1.简要使用说明2.使用指纹模块的功能函数3.FPM10A用户手册.3.硬件搭建根据使用说明:FPM 10A使用标准的串口与外界通信,默认的波特率为57600,可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。

FPM10A光学指纹模块共有5个管脚1 为VCC 电源的正极接 3.6V – 5.5V的电压均可。

2 为GND 电源的负极接地。

3 为TXD 串口的发送。

4 为RXD 串口的接收。

5 为NC 悬空不需要使用。

奋斗板上已经有5V的管脚,可以直接供给指纹模块,这里需要注意的是,指纹模块主要通过串口进行控制,模块和STM32单片机连接的时候,需要进行电平转换,这样只要把这个转接板插入STM32,接上5V的电,就可以工作了,将模块的发送端接转接板的接收端,接收端接转接板的发送端。

这样,我们的硬件平台就搭建好了!4.模块的测试工作模块成功上电后,指纹采集窗口会闪一下,表示自检正常,如果不闪,请仔细检查电源,是否接反,接错等。

指纹模块使用120MHZ的DSP全速工作,工作时芯片有一些热,经过严格的测试,这是没有问题的可以放心使用,在不使用的时候可以关闭电源,以降低功耗。

5.现在我们要进入编程环节了指纹模块主要是通过串口进行控制,所以这里我们需要用到单片机的串口模块。

我们需要用到两个关键函数1.使用串口发送一个字节的数据2.使用串口接收一个字节的数据这里我使用的STM32单片,所以这两个程序如下:view sourceprint?01.// 从 USART1 发送一个字节02.void USART1_SendByte(unsigned char temp)03.{04. USART_SendData(USART1, temp);05. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);06.}07.08.// 从 USART1 读取一个字节09.unsigned char USART1_ReceivByte()10.{11. unsigned char recev;12. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);13. recev = USART_ReceiveData(USART1);14. return recev;15.}6.查看FPM10A用户手册我们来实现比对一个指纹(我们这里假设指纹模块中已经存在指纹模板)首先我们需要让指纹模块检测是否有指纹输入(也就是是否有手指放在指纹模块上检测)我们来看手册上给的操作说明:我们需要发送给定的数据包给模块,发送的数据已经给我们了,现在我们参看给我们的C例程view sourceprint?01.//应答包数组02.unsigned char dat[18];03.04.//获得指纹图像05.06.unsigned char FP_Get_Img[6]={0x01,0x00,0x03,0x01,0x0,0x05};07.08.//协议包头09.10.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};11.12.//FINGERPRINT_获得指纹图像命令13.void FINGERPRINT_Cmd_Get_Img(void)14.{15. unsigned char i;16.17. for(i=0;i<6;i++) //发送包头18. USART1_SendByte(FP_Pack_Head[i]);19.20. for(i=0;i<6;i++) //发送命令 0x1d21. USART1_SendByte(FP_Get_Img[i]);22.23. for(i=0;i<12;i++)//读回应答信息24. dat[i]=USART1_ReceivByte();25.}说明:这个函数就是检测是否有指纹输入的信息,根据用户手册,当确认码返回值为0时,表示成功录入,所以,我们可以有下面的函数:view sourceprint?01.//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败02.unsigned char test_fig()03.{04. unsigned char fig_dat;05. FINGERPRINT_Cmd_Get_Img();06. Delay_ms1(20);07. fig_dat=dat[9];08. return(fig_dat);09.}10.11.因此,我们在主函数中可以这样调用:12.void main13.{14. if(test_fig()==0)15. {16. //do something17. }18.}7.如何录入一个新的指纹信息呢?步骤如下1.获得指纹图像2.检测是否成功的按了指纹3.将图像转换成特征码存放在Buffer1中4.再次获得指纹图像5.将图像转换成特征码存放在Buffer2中6.转换成特征码7.存储到指定地址上同样的,根据用户手册,我们可以得到以下这样的模块:当调用的时候,你只要给这个函数附上两个值就可以了,例如:unsigned char FP_add_new_user(00,01);如果你下次再次写入这个地址,以前存储的指纹模板信息将被覆盖view sourceprint?01.//添加一个新的指纹02.unsigned char FP_add_new_user(unsigned char ucH_user,un signed char ucL_user)03.{04. do05. {06. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像07. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹08.09. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中10.11. do12. {13. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像14. } while( dat[9]!=0x0 );15.16. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中18. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码19.20. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);21.22. return 0;23.}24.25.//存储模版到特定地址26.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char , unsigned char ucL_Char)27.{28. unsigned long temp = 0;29. unsigned char i;30.31. FP_Save_Finger[5] = ucH_Char;32. FP_Save_Finger[6] = ucL_Char;33.34. for(i=0;i<7;i++) //计算校验和35. temp = temp + FP_Save_Finger[i];36.37. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据38. FP_Save_Finger[8]= temp & 0x0000FF;39.40.41. for(i=0;i<6;i++)42. USART1_SendByte(FP_Pack_Head[i]); //发送包头43.44. for(i=0;i<9;i++)45. USART1_SendByte(FP_Save_Finger[i]) ;//发送命令将图像转换成特征码存放CHAR_buffer146.47. for(i=0;i<12;i++)48. dat[i]=USART1_ReceivByte();49.}8.如何删除一个模板?view sourceprint?01.//删除所有指纹模版02.void FINGERPRINT_Cmd_Delete_All_Model(void)03.{04. unsigned char i;06. for(i=0;i<6;i++) //发送包头07. USART1_SendByte(FP_Pack_Head[i]);08.09. for(i=0;i<6;i++) //发送命令 0x1d10. USART1_SendByte(FP_Delet_All_Model[i]);11.12. for(i=0;i<12;i++)//读回应答信息13. dat[i]=USART1_ReceivByte();14.}9.如何获取已经存取的指纹模板信息?这个模块一共可以存储0~999枚指纹信息view sourceprint?01.//搜索全部用户999枚02.void FINGERPRINT_Cmd_Search_Finger(void)03.{04. unsigned char i;05. //发送命令搜索指纹库06. for(i=0;i<6;i++)07. {08. USART1_SendByte(FP_Pack_Head[i]);09. }10.11. for(i=0;i<11;i++)12. {13. USART1_SendByte(FP_Search[i]);14. }15.16. for(i=0;i<16;i++)17. {18. dat[i]=USART1_ReceivByte();19. }20.}根据用户手册,我们可以从应答包中得出模块中已经存在指纹数量的大小这样,我们就轻松把指纹模块搞定!下面我附上基于STM32单片机光学指纹识别模块(FPM10A)打包好的函数库第一个是FPM10A.cview sourceprint?001.#include "stm32f10x.h"002.#include "stm32f10x_usart.h"003.#include "misc.h"004.unsigned char dat[18];005.006.//FINGERPRINT通信协议定义007.unsigned char FP_Pack_Head[6] ={0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头008.unsigned char FP_Get_Img[6] ={0x01,0x00,0x03,0x01,0x0,0x05}; //获得指纹图像009.unsigned char FP_Templete_Num[6]={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数010.unsigned char FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0 ,0x0,0x03,0xA1,0x0,0xB2}; //搜索指纹搜索范围0 - 929011.unsigned char FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01 ,0x0,0x0,0x0,0x13,0x0,0x21};//搜索0-9号指纹012.unsigned char FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0 x01,0x0,0x08}; //将图像放入到BUFFER1013.unsigned char FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0 x02,0x0,0x09}; //将图像放入到BUFFER2014.unsigned char FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x 09}; //将BUFFER1跟BUFFER2合成特征模版015.unsigned char FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d, 0x00,0x11}; //删除指纹模块里所有的模版016.unsigned char FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x0 1,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置017.unsigned char FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0 x0,0x0,0x0,0x1,0x0,0x0}; //删除指定的模版018.019.020.//从 USART1 发送一个字节021.void USART1_SendByte(unsigned char temp)022.{023. USART_SendData(USART1, temp);024. while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);025.}026.027.//从 USART1 读取一个字节028.unsigned char USART1_ReceivByte()029.{030. unsigned char recev;031. while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);032. recev = USART_ReceiveData(USART1);033. return recev;034.}035.//FINGERPRINT命令字036.//FINGERPRINT_获得指纹图像命令037.void FINGERPRINT_Cmd_Get_Img(void)038.{039. unsigned char i;040.041. for(i=0;i<6;i++) //发送包头042. USART1_SendByte(FP_Pack_Head[i]);043.044. for(i=0;i<6;i++) //发送命令 0x1d045. USART1_SendByte(FP_Get_Img[i]);046.047. for(i=0;i<12;i++)//读回应答信息048. dat[i]=USART1_ReceivByte();049.}050.051.//删除所有指纹模版052.void FINGERPRINT_Cmd_Delete_All_Model(void)053.{054. unsigned char i;055.056. for(i=0;i<6;i++) //发送包头057. USART1_SendByte(FP_Pack_Head[i]);058.059. for(i=0;i<6;i++) //发送命令 0x1d060. USART1_SendByte(FP_Delet_All_Model[i]);061.062. for(i=0;i<12;i++)//读回应答信息063. dat[i]=USART1_ReceivByte();064.}065.066.//讲图像转换成特征码存放在Buffer1中067.void FINGERPRINT_Cmd_Img_To_Buffer1(void)068.{069. unsigned char i;070. for(i=0;i<6;i++) //发送包头071. {072. USART1_SendByte(FP_Pack_Head[i]);073. }074. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1075. {076. USART1_SendByte(FP_Img_To_Buffer1[i]);077. }078. for(i=0;i<12;i++)//读应答信息079. {080. dat[i]=USART1_ReceivByte();//把应答数据存放到缓冲区081. }082.}083.084.//将图像转换成特征码存放在Buffer2中085.void FINGERPRINT_Cmd_Img_To_Buffer2(void)086.{087. unsigned char i;088. for(i=0;i<6;i++) //发送包头089. {090. USART1_SendByte(FP_Pack_Head[i]);091. }092.093. for(i=0;i<7;i++) //发送命令将图像转换成特征码存放在CHAR_buffer1094. {095. USART1_SendByte(FP_Img_To_Buffer2[i]);096. }097. for(i=0;i<12;i++)098. {099. dat[i]=USART1_ReceivByte();//读回应答信息100. }101.}102.103.//将BUFFER1 跟 BUFFER2 中的特征码合并成指纹模版104.void FINGERPRINT_Cmd_Reg_Model(void)105.{106. unsigned char i;107.108. for(i=0;i<6;i++) //包头109. {110. USART1_SendByte(FP_Pack_Head[i]);111. }112.113. for(i=0;i<6;i++) //命令合并指纹模版114. {115. USART1_SendByte(FP_Reg_Model[i]);116. }117.118. for(i=0;i<12;i++)119. {120. dat[i]=USART1_ReceivByte();121. }122.}123.124.//存储模版到特定地址125.void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Cha r, unsigned charucL_Char)126.{127. unsigned long temp = 0;128. unsigned char i;129.130. FP_Save_Finger[5] = ucH_Char;131. FP_Save_Finger[6] = ucL_Char;132.133.134. for(i=0;i<7;i++) //计算校验和135. temp = temp + FP_Save_Finger[i];136.137. FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据138. FP_Save_Finger[8]= temp & 0x0000FF;139.140.141. for(i=0;i<6;i++)142. USART1_SendByte(FP_Pack_Head[i]); //发送包头143.144. for(i=0;i<9;i++)145. USART1_SendByte(FP_Save_Finger[i]); //发送命令将图像转换成特征码存放在 CHAR_buffer1146.147. for(i=0;i<12;i++)148. dat[i]=USART1_ReceivByte();149.}150.151.//获得指纹模板数量152.void FINGERPRINT_Cmd_Get_Templete_Num(void)153.{154. unsigned int i;155.156. for(i=0;i<6;i++) //包头157. USART1_SendByte(FP_Pack_Head[i]);158.159. //发送命令 0x1d160. for(i=0;i<6;i++)161. USART1_SendByte(FP_Templete_Num[i]);162.163. for(i=0;i<12;i++)164. dat[i]=USART1_ReceivByte();165.}166.167.//搜索全部用户999枚168.void FINGERPRINT_Cmd_Search_Finger(void)169.{170. unsigned char i;171. //发送命令搜索指纹库172. for(i=0;i<6;i++)173. {174. USART1_SendByte(FP_Pack_Head[i]);175. }176.177. for(i=0;i<11;i++)178. {179. USART1_SendByte(FP_Search[i]);180. }181.182. for(i=0;i<16;i++)183. {184. dat[i]=USART1_ReceivByte();185. }186.}187.188.//搜索用户0~9枚189.void FINGERPRINT_Cmd_Search_Finger_Admin(void) 190.{191. unsigned char i;192. for(i=0;i<6;i++) //发送命令搜索指纹库193. {194. USART1_SendByte(FP_Pack_Head[i]);195. }196.197. for(i=0;i<11;i++)198. {199. USART1_SendByte(FP_Search_0_9[i]);200. }201.202. for(i=0;i<12;i++)203. dat[i]=USART1_ReceivByte();204.}205.206.//添加一个新的指纹207.unsigned char FP_add_new_user(unsigned char ucH_user,u nsigned char ucL_user)208.{209. do210. {211. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像212. } while ( dat[9]!=0x0 ); //检测是否成功的按了指纹213.214. FINGERPRINT_Cmd_Img_To_Buffer1(); //将图像转换成特征码存放在Buffer1中215.216. do217. {218. FINGERPRINT_Cmd_Get_Img(); //获得指纹图像219. } while( dat[9]!=0x0 );220.221. FINGERPRINT_Cmd_Img_To_Buffer2(); //将图像转换成特征码存放在Buffer2中222.223. FINGERPRINT_Cmd_Reg_Model(); //转换成特征码224.225. FINGERPRINT_Cmd_Save_Finger(ucH_user,ucL_user);226.227. return 0;228.}第2个 FPM10A.hview sourceprint?01.#ifndef _FPM10A_H02.#define _FPM10A_H03.#include <stdint.h>04.05.extern unsigned char dat[18];06.07.extern void FINGERPRINT_Cmd_Get_Img();08.extern void FINGERPRINT_Cmd_Img_To_Buffer1();09.extern void FINGERPRINT_Cmd_Img_To_Buffer2();10.extern void FINGERPRINT_Cmd_Reg_Model();11.extern void FINGERPRINT_Cmd_Delete_All_Model(void);12.extern void FINGERPRINT_Cmd_Search_Finger(void);13.extern void FINGERPRINT_Cmd_Get_Templete_Num(void);14.extern void FINGERPRINT_Cmd_Search_Finger_Admin(void);15.extern void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char, unsigned charucL_Char);16.extern unsigned char FP_add_new_user(unsigned char ucH _user,unsigned charucL_user);17.18.19.extern void USART1_SendByte(unsigned char temp);20.extern unsigned char USART1_ReceivByte();21.22.extern void Delay_ms1(uint32_t nCount);23.24.void Delay_nus1(uint32_t nCount)25.{26. uint32_t j;27. while(nCount--)28. {29. j=8;30. while(j--);31. }32.}33.34.void Delay_ms1(uint32_t nCount)35.{36. while(nCount--)37. Delay_nus1(1100);38.}39.40.unsigned char test_fig()//检测指纹模块录入指纹情况,返回00表示录入成功;02无手指;03录入失败41.{42. unsigned char fig_dat;43. FINGERPRINT_Cmd_Get_Img();44. Delay_ms1(20);45. fig_dat=dat[9];46. return(fig_dat);47.}48.49.#endif有了这两个东西,加入到你的工程中,就可以直接调用啦!。

相关文档
最新文档