指纹识别系统设计与系统
详细功能模块描述:
1、系统硬件模块设计与实现:
指纹通过指纹识别模块采集处理;并将处理后的指纹特征值等以数据包的形式发给主控模块;主控模块发送指令包对指纹识别模块进行控制以及对键盘模块、报警模块、液晶显示模块进行控制。在液晶显示屏上显示录入和识别成功的指纹号码。报警模块中以开发板自带的蜂鸣器为主,在不同的状态和结果下进行不同间隔和次数的蜂鸣。键盘模块主要通过三个按键分别实现模式转换、录入、清除等功能。
指纹模块拟选用光学指纹传感器,指纹识别模块能完成外部指纹的采集、存储、识别等功能,内部拥有存储空间,能够存储采集中同一个指纹的两个特征值的合并之和。完成此次设计最基本和核心的功能。也就是指纹的录入和识别。
液晶显示模块拟选用液晶显示屏,主要完成显示指纹的录入、识别、和清除等各个模式下的操作过程和操作结果。
键盘模块能让用户通过不同按键对应的操作指令,实现模式的切换、指纹的持续录入以及指纹的清除等功能。
报警模块拟通过对蜂鸣器的控制来实现,系统在接收到指纹识别设备在指纹录入、识别以及清除不同状态下执行结果的信号后,对蜂鸣器发送不同的信号和不同间隔进行控制。在进行不同操作时,响应不同的操作。
2、系统软件模块设计与实现:
主控制器作为主要的控制中心对其他四个模块进行控制,其中指纹识别主要接收主控制器的指令并发送数据给主控制器并且对输入指纹进行采集处理。显示屏显示各个状态特别是录入的指纹号和识别的指纹号。按键主要实现模式切换、指纹录入、指纹清除三个功能。报警程序以蜂鸣器为主,通过驱动程序实现不同状态下不同次数和间隔的蜂鸣。
编写代码实现硬件功能。拟添加一项安全保障体系,使用加密算法对指纹进行加密。该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两个指纹越相似,当两个指纹的数值差≤k时,这两个指纹的持有者会被系统判定为同一个人。
硬件清单:stm32f103zet6 AS608 key按键 oled显示屏 蜂鸣器(SG90舵机亦可)
WX:ng170607
功能实现截图:
硬件实现代码:
#include "sys.h"
#include "delay.h"
#include "oled_iic.h"
#include "stdio.h"
#include "key.h"
#include "timer.h"
#include "as608.h"
#include "usart3.h"
#include "led.h"
#include "usart.h"
int main(void)
{
extern const u8 BMP1[];
HZ= GB16_NUM();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
delay_init();
usart3_init(57600);
KEY_Init();
OLED_Init();
OLED_Clear();
uart_init(9600);
LED_Init();
printf("³õʼ»¯³É¹¦\r\n");
OLED_ShowCH(16,0,"Ö¸ÎÆËøÃŽûϵͳ");
OLED_ShowCH(16,2,"K1¼üÌí¼ÓÖ¸ÎÆ");
OLED_ShowCH(16,4,"K3¼üɾ³ýÖ¸ÎÆ");
OLED_ShowCH(16,6,"K5¼üÑéÖ¤Ö¸ÎÆ");
while(1)
{
key_num=KEY_Scan(0);
if(key_num==1)
{
key_num=0;
// printf("°´¼ü1");
OLED_Clear();
Add_FR();
GPIO_SetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
delay_ms(2000);
GPIO_ResetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
}
if(key_num==3)
{
key_num=0;
printf("°´¼ü3");
OLED_Clear();
Del_FR();
GPIO_SetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
delay_ms(1000);
GPIO_ResetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
delay_ms(1000);
GPIO_SetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
delay_ms(1000);
GPIO_ResetBits(GPIOB,GPIO_Pin_6); //·äÃùÆ÷±¨¾¯
}
if(key_num==5)
{
key_num=0;
OLED_Clear();
OLED_ShowCH(32,2,"Çë°´ÊÖÖ¸");
press_FR();
}
}
}