文章目录
- 一、主要功能
- 二、硬件资源
- 1.硬件准备
- 2.硬件连接
- 三、软件设计
- 1.软件结构
- 2.主要代码
- 四、实验现象
- 联系作者
一、主要功能
系统运行后,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.硬件连接
按键模块-->单片机IOK3-->P32K4-->P33蜂鸣器模块-->单片机IOBEEP-->P25AS608指纹模块-->单片机IOVI-->3.3VTX-->P30RX-->P31GND-->GNDLCD1602液晶-->单片机IORS->P26RW->P25E->P27DB0-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; //给定时器赋初值,定时10msTL0=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);}elsesystem_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,10msUART_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设计,视频分享,技术交流。