导读
本文章主要是自己兴趣想学习和尝试玩一下指纹识别模块,也是帮没接触过指纹识别模块的同学踩一下坑,比较适合新手和需要作毕业设计的同学。网上买回来的模块即插即用,不用半天就可以实现功能,也可以做一些自己感兴趣的智能家居小用品。
模块和工具的准备
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
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45270358/article/details/111985252
|
|