基于STM32单片机设计指纹考勤机+上位机管理

发布者:红尘清梦最新更新时间:2022-09-14 来源: csdn关键字:STM32  单片机  指纹考勤机  上位机管理 手机看文章 扫描二维码
随时随地手机看文章

1. 前言

随着信息科学技术的不断进步,信息科学技术已进入到了当今生活的方方面面,尤其是每个行业的经管领域,这类智能化信息技术处理是提高效率、从严管制、公平审查较为有效的方法。考勤登记,作为企业职工的基本管理,是对职工每日出勤管理的根本根据。但是,目前我国绝大多数企业在考勤登记时,依然利用的是古板的考勤方法,比如: 人工注册、打卡、机器打卡等,不光考勤速度较为缓慢,并且在考勤登记时候要专门职员在一边进行记载、统计数据、制成EXCEL表,而报表做完后最终交到主管手里时,有时候时间已过了好几天,根本不行,也不可以施展考勤真实的监视作用。并且还有可能呈现考勤数据不准确,考勤职员纪录犯错,乃至卖弄虚假的这种现象,极度破坏了企业对职工的日常管制。如今使用电脑来管制考勤的事情,很大程度上降低了就业人员的任务量,促使作事效率得以升高,使本来繁杂、索然无味的工作变的简单。提高中小型企业的考勤效率、体现现代化考勤的气氛。


设计总结:


(1)单片机采集指纹数据。将指纹ID传递给上位机进行管理。


(2)考勤记录、打卡全部在上位机完成。 单片机只是完成指纹的采集。

image-20220427101331395

image-20220427101419140

image-20220427101548703

image-20220427101653029

image-20220427101730939

image-20220427100346181

image-20220427100110644

image-20220427100135627

image-20220427100151748

image-20220427100212981

image-20220427100247351

2. 硬件选型

2.1 STM32系统板

主控CPU采用STM32F103RCT6,这颗芯片包括48 KB SRAM、256 KB Flash、2个基本定时器、4个通用定时器、2个高级定时器、51个通用IO口、5个串口、2个DMA控制器、3个SPI、2个I2C、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口,芯片属于大容量类型,配置较高,整体符合硬件选型设计。当前选择的这款开发板自带了一个1.4寸的TFT-LCD彩屏,可以显示当前传感器数据以及一些运行状态信息。

image-20220319202557220

2.2 指纹模块

AS608指纹识别模块是⼀款⾼性能的光学指纹识别模块。AS608模块采⽤了国内著名指纹识别芯⽚公司杭州晟元芯⽚技术有限公司(Synochip)的 AS608指纹识别芯⽚。芯⽚内置DSP运算单元,集成了指纹识别算法,能⾼效快速采集图像并识别指纹特征。模块配备了串⼝、USB通讯接⼝,⽤户⽆需研究复杂的图像处理及指纹识别算法,只需通过简单的串⼝、USB 按照通讯协议便可控制模块。本模块可应⽤于各种考勤机、保险箱柜、指纹门禁系统、指纹锁等场合。


供电电压:3.3V(切勿接5V,容易烧毁芯片)

供电电流:< 60mA

指纹图像录入时间:< 1s

搜索时间:< 1.0s(1:500时,均值)

可录入指纹数量:300

通讯接口:USB/USART

image-20220417220251999

image-20220421164759567

image-20220421164814904

3. 上位机程序设计

3.1 开发环境

上位机软件采用Qt框架设计,Qt是一个跨平台的C++图形用户界面应用程序框架。Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。简单来说,QT可以很轻松的帮你做带界面的软件,甚至不需要你投入很大精力。


QT官网: https://www.qt.io/

image-20220314143105032

QT学习入门实战专栏文章: https://blog.csdn.net/xiaolong1126626497/category_11400392.html


QT5.12.6的下载地址:

https://download.qt.io/archive/qt/5.12/5.12.6/


打开下载链接后选择下面的版本进行下载:


qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details


软件安装时断网安装,否则会提示输入账户。


安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。

image-20220417145923643

选择MinGW 32-bit 编译器:

image-20220417150002770

选择MinGW 32-bit 编译器:

image-20220417150031913

3.2 设计效果

image-20220421173414325

image-20220427100009358

4. STM32程序设计

如果需要完整的资料,可以去这里下载:

https://download.csdn.net/download/xiaolong1126626497/85896720


这是本项目演示视频:

基于STM32设计指纹考勤机+上位机管理


4.1 程序下载

点击下载编程之后,按下开发板上的复位键,启动下载。

image-20220427095346961

4.2 硬件接线

硬件连接方式:

1. 指纹模块接线

PA2(TX)---指纹模块的RX(白线)

PA3(RX)---指纹模块的TX(黄线)

VCC---3.3v(红线)

GND---GND(黑线)

VCC---3.3V(绿线)--触摸感应电源线

PA6---触摸感应线-高电平有效(蓝线)



2. 板载LED灯接线

LED1---PA8

LED2---PD2


3. 板载按键接线

K0---PA0 

K1---PC5 

K2---PA15


4.3 keil工程

image-20220427095823393

4.4 通信协议约定

上位机下发指令:


//录入指纹 1表示ID

$dev_cmd_lu_ru_zhi_wen:1


//删除指纹

$dev_cmd_del_zhi_wen:1


设备上传指令:


//录入OK

$update_lu_ru_ok,


//录入error

$update_lu_ru_error,


//查找成功ID--指纹查找成功

$update_find,1,


4.5 main.c代码

#include "stm32f10x.h"

#include "led.h"

#include "delay.h"

#include "key.h"

#include "usart.h"

#include

#include "timer.h"

#include

#include

#include "as608.h"


u16 ValidN;//模块内有效模板个数

SysPara AS608Para;//指纹模块AS608参数


void Add_FR(int ID); //录指纹

void Del_FR(int num); //删除指纹

void press_FR(void);//刷指纹

void ShowErrMessage(u8 ensure);


int ID=0;

char *data_p;

int main()

{

    u8 ensure;

    u32 i=0;

    u8 key=0;

    u32 time_cnt=0;

    JTAG_Set(JTAG_SWD_DISABLE); //释放PA15

    LED_Init();  //LED灯初始化

    KEY_Init();  //按键初始化


    delay_init(72);

    USART1_Init(115200);   //串口1初始化-打印调试信息

    TIMER1_Init(72,20000); //定时器2初始化

    USART2_Init(57600);     //串口2初始化-打印调试信息  

    TIMER2_Init(72,20000); //定时器2初始化

    PS_StaGPIO_Init();    //初始化FR读状态引脚

  

    printf("系统正常运行!rn");

    

    //与AS608模块握手

    while(PS_HandShake(&AS608Addr))

    {

      printf("连接指纹模块失败....rn");

      delay_ms(1000);   

    }    

    printf("指纹模块连接成功.....rn");

    

    printf("开始读库指纹个数.rn");

    ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数

    if(ensure!=0x00)

    {

        printf("ensure:%srn",ensure);//显示确认码错误信息

    }


     printf("开始读AS608模块参数 .rn");

    ensure=PS_ReadSysPara(&AS608Para);  //读AS608模块参数 

    if(ensure==0x00)

    {

        printf("RemainNum:%d    Level:%drn",AS608Para.PS_max-ValidN,AS608Para.PS_level);//显示剩余指纹数量和安全等级

    }

    else

    {

        printf("ensure:%srn",ensure);

    }

      

    

    //如果第一次使用,有必要全部清除之后再使用

    //PS_Empty();//清空指纹库

    


  

   // printf("开始删除指纹 .rn");

    //Del_FR();

    

    while(1)

    {

      

      if(USART1_RX_FLAG)

      {

          USART1_RX_BUFFER[USART1_RX_CNT]='';

          printf("RX:%srn",USART1_RX_BUFFER);

          

          //如果是录入指纹

          if(strstr((char*)USART1_RX_BUFFER,"$dev_cmd_lu_ru_zhi_wen:"))

          {

                printf("开始录指纹 .rn");

                

                 data_p=strstr((char*)USART1_RX_BUFFER,"$dev_cmd_lu_ru_zhi_wen:");

                  

                  if(data_p)

                  {

                      data_p+=strlen("$dev_cmd_lu_ru_zhi_wen:");

                      ID=atoi(data_p);

                      printf("ID=%drn",ID);

                      if(ID>=0)

                      {

                          //录指纹

                          Add_FR(ID);  

                      }

                  }

                  else

                  {

                      printf("指纹ID解析失败.rn");

                  }   

          }

        

          //如果是删除指纹

          if(strstr((char*)USART1_RX_BUFFER,"$dev_cmd_del_zhi_wen:"))

          {

                printf("开始录指纹 .rn");

                

                 data_p=strstr((char*)USART1_RX_BUFFER,"$dev_cmd_del_zhi_wen:");

                  

                  if(data_p)

                  {

                      data_p+=strlen("$dev_cmd_del_zhi_wen:");

                      ID=atoi(data_p);

                      printf("ID=%drn",ID);

                      if(ID>=0)

                      {

                          //删除指纹

                          Del_FR(ID);  

                      }

                  }

                  else

                  {

                      printf("指纹ID解析失败.rn");

                  }   

          }

          

        

          USART1_RX_FLAG=0;

          USART1_RX_CNT=0;

          memset(USART1_RX_BUFFER,0,sizeof(USART1_RX_BUFFER));

      }

      

          

         //刷指纹

        press_FR();

    

      

        LED1=!LED1;

        delay_ms(100);

    }

}



//录指纹

void Add_FR(int ID)

{

u8 i=0,ensure,processnum=0;

while(1)

{

switch (processnum)

{

case 0:

i++;

        printf("请按下手指.rn");

ensure=PS_GetImage();

if(ensure==0x00) 

{

ensure=PS_GenChar(CharBuffer1);//生成特征

if(ensure==0x00)

{

            printf("指纹正确.rn");

i=0;

processnum=1;//跳到第二步

}else ShowErrMessage(ensure);

}else ShowErrMessage(ensure);

break;

case 1:

i++;

printf("再按一次手指.rn");

ensure=PS_GetImage();

if(ensure==0x00) 

{

ensure=PS_GenChar(CharBuffer2);//生成特征

if(ensure==0x00)

{

printf("指纹正确.rn");

i=0;

processnum=2;//跳到第三步

}else ShowErrMessage(ensure);

}else ShowErrMessage(ensure);

break;


case 2:

printf("对比两次指纹.rn");

[1] [2]
关键字:STM32  单片机  指纹考勤机  上位机管理 引用地址:基于STM32单片机设计指纹考勤机+上位机管理

上一篇:基于STM32动态密码锁(手机APP)
下一篇:基于STM32设计的老人防摔倒报警设备(OneNet)

推荐阅读最新更新时间:2024-11-16 22:28

STM32】GPIO的相关配置寄存器、库函数、位操作
STM32F1xx官方资料: 《STM32中文参考手册V10》-第8章通用和复用功能IO(GPIO和AFIO) 《Cortex-M3权威指南(中文)》第5章 位带操作 硬件连接 假设跑马灯实验的硬件连接如上图所示,LED0连接PB5,LED1连接PE5。由于在LED的另一端是VCC3.3,所以当PB5或PE5为低电平的时候,LED灯会亮。此时GPIO应采取推挽输出的模式。 GPIO的相关配置寄存器 STM32的每组GPIO口包括7个寄存器。也就是说,每个寄存器可以控制一组GPIO的16个GPIO口。这7个寄存器分别为: GPIOx_CRL:端口配置低寄存器(32位) GPIOx_CRH:端口配置高寄存器(32
[单片机]
【<font color='red'>STM32</font>】GPIO的相关配置寄存器、库函数、位操作
单片机交通灯控制程序和设计原理
同学们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。有些时候你考虑的和真理就差一点点了,没有坚持下去,别人告诉你后才恍然大悟。这样得到的结论,可以让你学到知识,但是却培养不了你的逻辑思维能力。不是不能问,而是要在认真思考的基础上再发问。 有同学有疑问,板子上只有 8 个流水灯,那如果我要做很多个流水灯一起花样显示怎么办呢?那我们在讲课的时候其实都提到过了,板子上是有 8 个流水灯,还有 6 个数码管,还有 1 个点阵 LED,一个数码管相当于 8 个小灯,一个点阵相当于 64 个小灯,那如果全部算上的话,我们板子上实际共接了 8+6*8+64=120 个小灯,你如果单独只接小灯,花样灯就做出来了。 还有同学问,
[单片机]
51单片机+LCD12864的万年历Proteus仿真
原理图如下 部分程序如下 单片机源程序如下: #include reg51.h #include DS18B20.h #include DS1302.h #include LCD12864.h char a; sbit KEY1=P3^4; sbit KEY2=P3^5; sbit KEY3=P3^6; bit flag=1; //进入/退出设置标志 uchar choose=0x01; //切换标志 void delay10(void) //延时10ms { unsigned char i,j; for(i=0;i 255;i++) for(j=0;j 200;j++); } voi
[单片机]
51<font color='red'>单片机</font>+LCD12864的万年历Proteus仿真
基于单片机的多功能数字钟系统设计与分析
0 引言 随着科技的发展,电子技术也在不断地向前飞速发展。本设计是制作一款多功能数字钟,其具有显示年、月、日,时、分、秒、星期及闹钟功能,而且秒、分、时、日、月、年可自动关联进位。秒具备清零功能,分、时、日、月、年可自动修改、手动设置等功能。它是以一块AT89S52芯片作为主控模块,采用DS1302作为定时来源的多功能数字钟。多功能数字钟结构较简单,因此便于操作使用。它具有高度的智能化和集成化,是现代人办公、生活、学习的好帮手,具有广阔的市场前景。同时,它具有闹铃和播放音乐等功能,由于这些完善的功能,它必将越来越受到社会各界人士的欢迎。 1 系统方案的论证与选择 1.1 各模块方案的论证与选择 1.1.1 主控模块的论证与选
[单片机]
基于<font color='red'>单片机</font>的多功能数字钟系统设计与分析
51单片机-----------四向交通灯
一 实验目的: 实验4:运用AT89C51芯片实现四向交通灯: (1) 掌握C语言编程单片机控制程序的方法。 (2) 掌握使用Keil4软件编写、编译、调试程序的方法。 (3) 掌握使用Proteus软件绘制电路原理图、硬件仿真和程序调试。 (4) 理解和掌握共阴极数码管的显示原理和编码(记忆)。 (5) 熟悉使用51单片机I/O端口实现对外部用电器和电路的控制。 二、实验硬件和软件: 计算机1台、并安装Proteus8.6软件和Keil4软件。 Proteus8.6中会运用的部件:7SEG-MPX2-CC、AT89C51、BUTTON、LED-GREENREDYELLOW、RESPACK-8d 三、试验任务: 1.
[单片机]
51<font color='red'>单片机</font>-----------四向交通灯
串行接口键盘控制器SK5278及其在单片机系统中的应用
摘要:SK5278是一种可管理16个按键的键盘控制器,该器件内部具有去抖动处理电路,可直接输出按键的键值编码,并采用串行方式与单片机或微处理器进行接口,使用该器件可简化单片机系统软硬件的键盘接口。文中给出了该器件的特点、管脚说明和使用方法,并以AT89C2051单片机为例给出了相应的接口电路及相应程序。 关键词:键盘控制 串行接口 单片机 SK5278 对于以单片机为核心构成的智能仪器、仪表、工控设备及家用电器而言,构成人机交互的键盘接口电路是必不可少的,而相应的键盘管理软硬件设计却比较麻烦。简单的矩阵键盘存在着占用CPU软硬件资源多、响应速度慢、监控软件编制复杂等问题,专用的键盘接口器件如INTE8279、HD7219又往往
[应用]
基于Atmega48单片机的太阳能路灯控制器的设计
太阳能控制器是太阳能路灯系统中的核心部分,设计了一种基于Atmega48 单片机 的太阳能路灯控制器。该控制器采用PWM脉冲调制控制技术通过对蓄电池电压、充电电流等参数进行检测,控制开关管的关断,来实现充放电控制和保护功能。测试表明,该控制器运行稳定、可靠性高、性价比高,具有良好的市场前景。 作为一种新兴的绿色能源,太阳能具有取之不尽、用之不竭、清洁安全的特点,是理想的可再生能源。而太阳能光伏发电技术作为太阳能利用的一个重要组成部分,被认为是目前最具发展潜力的一种发电技术。太阳能光伏发电系统的研究对于缓解能源危机,减少环境污染和温室效应具有重要的意义。 太阳能路灯就是典型的太阳能光伏发电应用产品之一,它是以太阳能作为电
[单片机]
基于Atmega48<font color='red'>单片机</font>的太阳能路灯控制器的设计
飞思卡尔推全球Flexis微控制器系列研讨班 现已开始注册
90多场强化培训将帮助工程师用业内首款兼容8位和32位的超低功率MCU进行开发 德州奥斯汀讯--2007年9月19日-- 飞思卡尔半导体近日推出全球系列研讨班,旨在为嵌入式开发人员提供全面的动手培训,让他们学会飞思卡尔Flexis QE128器件—业内首款兼容8位和32位的微控制器(MCU)的使用。Flexis系列研讨会的注册现已开始,从现在开始直到12月份,在全球的90多个地点同时进行。 此次为期一天的研讨班旨在让工程师学会如何在基于S08内核的8位MCU MC9S08QE128和第一款基于V1 ColdFire内核的32位MCU MCF51QE128间进行移植。Flexis QE128 MCU具有业内领先的超低功率功能,
[焦点新闻]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved