【51单片机】AS608指纹锁设计


一、主要功能

系统运行后,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设计,视频分享,技术交流。

  • 3
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值