一、主要功能
系统运行后,LCD显示指纹锁主界面,显示模块指纹库剩余容量和指纹对比等级数。如果已经添加了指纹的话,直接在主界面中即可进行指纹识别开锁,识别成功后,LCD会显示当前指纹ID,匹配分数,并且蜂鸣器报警提示,开锁指示灯D2点亮开锁成功, 一段时间后再次关锁,且D2指示灯灭,LCD返回主界面显示。如果指纹错误,不进行动作响应。
在主界面时,若按下KEY3键进入指纹设置界面。进入指纹设置界面时,可通过KEY3键选择添加指纹或删除指纹模式。当需要添加指纹时,通过KEY3键选择指纹模式,按下KEY4键进入添加指纹界面,初始指纹ID为0(0-299),可通过KEY3键进行累加,选择好ID值后,按下KEY4键进入指纹录入,此时LCD会提示请录入指纹,指纹录入过程中LCD会伴有提示显示,且 蜂鸣器会报警提示,录入2次指纹匹配成功后LCD会显示剩余指纹容量,并返回主界面显示。若要删除指纹,可通过KEY3键选择删除指纹模式,按下KEY4键进入删除指纹界面,可通过KEY3键选择要删除的指纹ID,选择好后,按下KEY4键删除选定指纹,此时LCD会显示删除信息,并返回主界面显示,可重新添加指纹或删除指纹。此时可验证添加的指纹或删除的指纹识别,并且界面上显示的剩余指纹容量值会更新。如果要手动进行开锁,可在主界面时,按下KEY4键开锁,LCD会开锁提示信息,蜂鸣器报警提示,开锁指示灯D2亮,一段时间后再次关锁,且D2指示灯灭,LCD返回主界面显示。
二、硬件资源
1.硬件准备
项目所需要的硬件资源如下:
1、51单片机开发板1个
2、AS608指纹模块1个
3、LCD1602液晶模块1个
4、USB线1条(用于供电和程序下载)
5、杜邦线若干
2.硬件连接
按键模块-->单片机IO
K3-->P32
K4-->P33
蜂鸣器模块-->单片机IO
BEEP-->P25
AS608指纹模块-->单片机IO
VI-->3.3V
TX-->P30
RX-->P31
GND-->GND
LCD1602液晶-->单片机IO
RS->P26
RW->P25
E->P27
DB0-DB7-->P00-P07
三、软件设计
1.软件结构
2.主要代码
#include "app_demo.h"
#include "time.h"
#include "lcd1602.h"
#include "beep.h"
#include "key.h"
#include "uart.h"
#include "as608.h"
//控制管脚定义
sbit LED1=P2^0;
sbit LED2=P2^1;
//定义全局结构体变量
_finger finger;
u16 ValidN=0;//模块内有效指纹个数
xdata SysPara AS608Para;//指纹模块AS608参数
extern u16 UART_RX_STA;
//定时器0中断函数
void time0() interrupt 1
{
static u8 i=0;
TH0=0XDC; //给定时器赋初值,定时10ms
TL0=0X00;
i++;
if(i==100)//间隔1S读取温度
{
i=0;
}
}
//指示系统错误
void system_error(void)
{
while(1)
{
LED1=!LED1;
delay_ms(200);
}
}
//主菜单显示
void main_window_show(void)
{
u8 ensure=0;
MENU:
//默认刷指纹模式
if(finger.mode==0)
{
lcd1602_clear();
while(PS_HandShake(&AS608Addr))//与AS608模块握手
{
lcd1602_show_string(0,0,"AS608 Error!");
delay_ms(500);
lcd1602_clear();
}
lcd1602_show_string(0,0,"->FingerPrint-< ");
ensure=PS_ValidTempleteNum(&ValidN);//读库指纹个数
if(ensure!=0x00)
system_error();
ensure=PS_ReadSysPara(&AS608Para); //读参数
if(ensure==0)
{
lcd1602_show_string(0,1,"Cap:");
lcd1602_show_nums(4,1,AS608Para.PS_max-ValidN,3,0);
lcd1602_show_string(9,1,"Level:");
lcd1602_show_nums(15,1,AS608Para.PS_level,1,0);
}
else
system_error();
while(1)
{
press_FR();//刷指纹
goto MENU;//回到主菜单界面
}
}
}
//设置菜单显示
void setup_window_show(void)
{
u8 key=0;
u8 mode=0;
//指纹设置模式
if(finger.mode!=0)
{
lcd1602_clear();
lcd1602_show_string(0,0,"FingerPrint");
lcd1602_show_string(0,1,"->");
lcd1602_show_string(2,1,"Add");
lcd1602_show_string(10,1,"Delete");
while(1)
{
key=key_scan(0);
if(key==KEY3_PRESS)//选择模式
{
mode++;
lcd1602_show_string((mode-1)*8,1," ");//清除上次箭头指向
if(mode>=2)mode=0;
lcd1602_show_string(mode*8,1,"->");//箭头指向
}
else if(key==KEY4_PRESS)//确认
{
finger.mode=mode+1;
}
//添加指纹
if(finger.mode==1)
{
Add_FR();
mode=0;
finger.mode=0;
break;
}
//删除指纹
else if(finger.mode==2)
{
Del_FR();
mode=0;
finger.mode=0;
break;
}
}
}
}
//AS608指纹锁
void app_demo(void)
{
UART_Init();//波特率9600
// time0_init();//初始化定时器0,10ms
UART_RX_STA=0;
lcd1602_init();//LCD1602初始化
while(1)
{
main_window_show();
setup_window_show();
}
}
四、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
作者B站链接:https://space.bilibili.com/444388619
可提供手把手教学服务,资料获取请联系作者QQ:3443792007
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。