#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "usart2.h"
#include "AS608.h"
#include "timer.h"
#include "oled.h"
#define usart2_baund 57600 //
SysPara AS608Para; //
u16 ValidN; //
void Add_FR(void); //添加指纹
void Del_FR(void); //删除指纹
void press_FR(void);//比对指纹
int main(void)
{
u8 ensure;
u8 key_num;
char *str;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(); //初始化延时函数
uart_init(115200); //初始化串口1波特率为115200,用于支持USMART
usart2_init(usart2_baund);//初始化串口2,用于与指纹模块通讯
PS_StaGPIO_Init(); //初始化FR读状态引脚
OLED_Init(); //OLED初始化 //初始化显示
OLED_ShowStr(0,0,(unsigned char*)" FINGERPRINT ID ",2);
OLED_ShowStr(0,2,(unsigned char*)" ",2);
OLED_ShowStr(0,4,(unsigned char*)" ",2);
OLED_ShowStr(0,6,(unsigned char*)" ",2);
//与指纹模块握手
while(PS_HandShake(&AS608Addr))
{
OLED_ShowStr(0,2,(unsigned char*)" ShakHands....",2);
}
//握手通过
OLED_ShowStr(0,2,(unsigned char*)" Ready To Work ",2);
delay_ms(100);
while(1)
{
press_FR();
//添加指纹
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==0)
{
//setup=setup+2000;
Add_FR();
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
}
}
//对比指纹
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0)
{
Del_FR();
OLED_ShowStr(0,4,(unsigned char*)" FUN:DEL FRIGER ",2);
}
}
}
}
void ShowErrMessage(u8 ensure)
{
}
void Add_FR(void)
{
u8 i=0,ensure ,processnum=0;
u16 ID;
while(1)
{
switch (processnum)
{
case 0:
i++;
OLED_ShowStr(0,6,(unsigned char*)" Touch finger! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
ensure=PS_GetImage();
if(ensure==0x00)
{
ensure=PS_GenChar(CharBuffer1);//????
if(ensure==0x00)
{
OLED_ShowStr(0,6,(unsigned char*)" Figer Correct ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
i=0;
processnum=1;
}else ShowErrMessage(ensure);
}else ShowErrMessage(ensure);
break;
case 1:
i++;
OLED_ShowStr(0,6,(unsigned char*)" Touch Again! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
ensure=PS_GetImage();
if(ensure==0x00)
{
ensure=PS_GenChar(CharBuffer2);//
if(ensure==0x00)
{
OLED_ShowStr(0,6,(unsigned char*)" Figer Correct ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
i=0;
processnum=2;
}else ShowErrMessage(ensure);
}else ShowErrMessage(ensure);
break;
case 2:
OLED_ShowStr(0,6,(unsigned char*)" Figer Compare ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
ensure=PS_Match();
if(ensure==0x00)
{
OLED_ShowStr(0,6,(unsigned char*)" Figer are same ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
processnum=3;
}
else
{
ShowErrMessage(ensure);
i=0;
processnum=0;
}
delay_ms(1000);
break;
case 3:
OLED_ShowStr(0,6,(unsigned char*)" Touch Again! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
ensure=PS_RegModel();
if(ensure==0x00)
{
OLED_ShowStr(0,6,(unsigned char*)" Comper Success!",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
processnum=4;//?????
}else {processnum=0;ShowErrMessage(ensure);}
delay_ms(1000);
break;
case 4:
do
ID=1;
while(!(ID<300));
ensure=PS_StoreChar(CharBuffer2,ID);
if(ensure==0x00)
{
OLED_ShowStr(0,6,(unsigned char*)" ADD Success! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:ADD FRIGER ",2);
PS_ValidTempleteNum(&ValidN);
delay_ms(1500);
return ;
}else {processnum=0;ShowErrMessage(ensure);}
break;
}
delay_ms(800);
if(i==5)//
{
break;
}
}
}
/**************************************************************
DESC:对比指纹
*****************************************************************/
void press_FR(void)
{
SearchResult seach;
u8 ensure;
OLED_ShowStr(0,6,(unsigned char*)" Begin Compare ",2);
ensure=PS_GetImage();
if(ensure==0x00)//
{
ensure=PS_GenChar(CharBuffer1);
if(ensure==0x00) //
{
ensure=PS_HighSpeedSearch(CharBuffer1,0,300,&seach);
if(ensure==0x00)//
{
OLED_ShowStr(0,6,(unsigned char*)" Comper PASS! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);
}
else
{
OLED_ShowStr(0,6,(unsigned char*)" Comper Fail! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);
}
}
else
{
OLED_ShowStr(0,6,(unsigned char*)" Comper Fail! ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:CPR FRIGER ",2);
}
delay_ms(1000);//
}
}
/******************************************************************************
DESC:删除指纹
*******************************************************************************/
void Del_FR(void)
{
u8 ensure;
delay_ms(50);
ensure=PS_Empty();//?????
if(ensure==0)
{
OLED_ShowStr(0,6,(unsigned char*)" FINGER DELL OK ",2);
OLED_ShowStr(0,4,(unsigned char*)" FUN:DEL FRIGER ",2);
}
delay_ms(1500);//???????
}