STM32F103RCT6Mini开发板搭建指纹识别系统

导读

本文章主要是自己兴趣想学习和尝试玩一下指纹识别模块,也是帮没接触过指纹识别模块的同学踩一下坑,比较适合新手和需要作毕业设计的同学。网上买回来的模块即插即用,不用半天就可以实现功能,也可以做一些自己感兴趣的智能家居小用品。

模块和工具的准备

1、开发板:STM32F103RCT6Mini开发板
2、显示屏:某宝上购买的1.44寸TFT显示屏(这个显示屏看个人喜欢,可有可无,可以用自己已经有的显示屏作显示,没有的话就直接打印串口的方式看运行过程)
3、指纹识别模块:某宝上购买的AS608指纹识别
4、按键板:自己用面包板焊接的按键

接线

1.44寸液晶屏电源接线

VCC——————>接5V DC
GND——————> 接地

液晶屏数据线接线

CS——————>接 PC7 片选信号
CLK——————>接 PB13 SPI时钟信号
SDI(DIN)——————>接 PB15 SPI数据总线

液晶屏控制线接线

LED——————>接 PB9 背光控制线,高电平电亮
RS——————>接 PC6 寄存器选择信号 RS=0发送命令 RS = 1发送像素数据
RST——————>接 PB12 液晶屏复位信号线,低电平复位。

指纹识别模块AS608接线

VCC——————>接3.3V (切记不可以接5V,会烧坏)
GND——————>接地
RX——————>PB10
TX——————>PB11

实物图:

开发板
在这里插入图片描述

接线图:

在这里插入图片描述

杜邦线接的有点乱,IO口的接线看个人喜好,除了RX和TX需要接开发板上的RX和TX之外,其他线可以随意更改,只需要修改对应的IO口初始化函数即可。

移植代码和使用方法

程序段

主函数:
int main(void)
{ 
  delay_init();              //延时函数初始化
  SystemInit();                //系统初始化
  Uart_Init(115200);           //打印串口初始化
  usart3_init(57600);          //指纹识别模块初始化
  KEY_Init();                  //按键初始化
  Lcd_Init();                  //LCD屏初始化
  LCD_LED_SET;                 //通过IO控制背光亮 
  Redraw_Mainmenu();           //绘制主菜单(部分内容由于分辨率超出物理值可能无法显示)
 while(1)
 {
       key_num = KEY_Scan();
       if(key_num == 1)
       {
        key_num = 0;
        Lcd_Clear(WHITE);
        Add_FR();
       }
       if(key_num == 3)
       {
        key_num = 0;
        Lcd_Clear(WHITE);
        Del_FR();
       }
       if(key_num == 5)
       {
        key_num=0;
        Lcd_Clear(WHITE);
        press_FR();
       }   
     }
     }
指纹添加函数Add_FR():
void Add_FR(void)
{
 u8 i, ensure, processnum = 0;
 u8 ID_NUM = 0;
char str[20];

 while(1)
 {
   switch (processnum)
   {
   case 0:
     i++;
   Gui_DrawFont_GBK16(35,15,RED,WHITE,"请按手指");
   showimage(gImage_Finger65,33,40,97,104,65,65);    //指纹图片显示示例
     ensure = PS_GetImage();
     if(ensure == 0x00)
     {
       ensure = PS_GenChar(CharBuffer1); //生成特征
       if(ensure == 0x00)
       {
    Gui_DrawFont_GBK16(35,15,GREEN,WHITE,"指纹正常");
    delay_ms(1500);
         i = 0;
         processnum = 1;                 //跳到第二步
       }
       else ShowErrMessage(ensure);
     }
     else
  {    
   ShowErrMessage(ensure);
  }
     break;
     .......
     .......
        //省略的部分后面摆放到网盘,自己下载查看
指纹删除函数Del_FR():
while(key_num != 3)
 {
  key_num = KEY_Scan();
  if(key_num == 2)
  {
   key_num = 0;
   if(ID_NUM > 0)
    ID_NUM--;
  }
  if(key_num == 4)
  {
   key_num = 0;
   if(ID_NUM < 99)
    ID_NUM++;
  }
  if(key_num == 1)
   goto MENU ;             //返回主页面
  if(key_num == 5) 
  {
   key_num = 0;
   ensure = PS_Empty();   //清空指纹库
   if(ensure == 0)
   {     
    Lcd_Clear(WHITE);
    Gui_DrawFont_GBK16(10,15,GREEN,WHITE,"清空指纹库成功");
    printf("清空指纹库成功 \r\n");
   }
   .........
   .........
   //省略的部分后面摆放到网盘,自己下载查看
指纹验证函数press_FR():
void press_FR(void)
{
SearchResult seach;
u8 ensure;
char str[20];
Gui_DrawFont_GBK16(35,15,RED,WHITE,"请按手指");
showimage(gImage_Finger65,33,40,97,104,65,65);    //指纹图片显示示例
while(key_num != 1)
{
 key_num = KEY_Scan();
 ensure = PS_GetImage();
 if(ensure == 0x00) 
 {
printf("获取图像成功 \r\n");
   ensure = PS_GenChar(CharBuffer1);
   if(ensure == 0x00) 
   {
 printf("生成特征成功 \r\n");
     ensure = PS_HighSpeedSearch(CharBuffer1, 0, 99, &seach);
     if(ensure == 0x00) 
     {
  printf("验证成功 \r\n");
  Lcd_Clear(WHITE);
       Gui_DrawFont_GBK16(16,15,GREEN,WHITE,"指纹验证成功");
       sprintf(str, " 指纹ID:%d  ", seach.pageID);
       Gui_DrawFont_GBK16(16,35,RED,WHITE,(u8*)str);
       delay_ms(1500);
       delay_ms(1500);
  break;
     }
     else
  .........
  .........
  //省略的部分后面摆放到网盘,自己下载查看

只需要移植一个按键C文件、串口初始化C文件、AS608C文件,文件路径和对应函数添加好,编译下载即可运行,方便快捷。

实验结果:

在这里插入图片描述

注意事项:

1、函数初始化切记不要漏掉
2、按键质量差的消抖需要注意
3、指纹识别模块电源不要接错,否则会烧坏。

心得总结

模块还是很方便使用的,接线简单,在学校参加项目或者初学C语言的人都可以埋来学习一下,兴趣之余可以创作一些类似智能的开关锁,指纹识别系统,签到系统等等,即学即用。如果需要交流请评论留言。显示函数和部分处理函数看你个人需要,可以优化得更好,处理逻辑可以看需要更改合适自己要求得,函数都是封装好的,直接调用就好。有更好玩的模块欢迎一起探讨学习。

资料下载:

链接:https://pan.baidu.com/s/1Z7DsftEdwSkulBhlbRwKWw
提取码:k9fv

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值