標(biāo)題:
51單片機(jī)實(shí)現(xiàn)指紋識(shí)別程序,首先錄入指紋,然后與庫(kù)中的指紋對(duì)比,來(lái)實(shí)現(xiàn)指紋的識(shí)別簽到
[打印本頁(yè)]
作者:
wyyxz
時(shí)間:
2022-4-20 23:47
標(biāo)題:
51單片機(jī)實(shí)現(xiàn)指紋識(shí)別程序,首先錄入指紋,然后與庫(kù)中的指紋對(duì)比,來(lái)實(shí)現(xiàn)指紋的識(shí)別簽到
51單片機(jī)實(shí)現(xiàn)指紋識(shí)別,首先錄入指紋,然后與庫(kù)中的指紋對(duì)比,來(lái)實(shí)現(xiàn)指紋的識(shí)別簽到
51hei圖片20220420234557.png
(189.74 KB, 下載次數(shù): 77)
下載附件
2022-4-20 23:47 上傳
單片機(jī)源程序如下:
/*******************************************************************************
**文件名:BIOVO.c
**說(shuō)明:指紋芯片數(shù)據(jù)處理
**編程人員:李
*******************************************************************************/
#include "config.h"
#define UART_BUF_LEN 8
#define BUF_N 8
unsigned char rBuf[UART_BUF_LEN]; //接收返回信息
unsigned char tBuf[UART_BUF_LEN]; //發(fā)送命令或者數(shù)據(jù)
unsigned char g_ucUartRxEnd ; //接收返回信息結(jié)束標(biāo)志
unsigned char g_ucUartRxLen ; //接收返回信息長(zhǎng)度
unsigned char l_ucFPID; //用戶(hù)編號(hào)
extern unsigned char p; // 串口接收地址
/*******************************************************************
**功能:延時(shí)程序
**參數(shù):
**返回:無(wú)
*******************************************************************/
void Delay_ms(unsigned int ms)
{
unsigned int i=0,j=0;
for(i=0;i<ms;i++)
for(j=0;j<123;j++);
}
/*******************************************************************************
**功能:等待數(shù)據(jù)包發(fā)送完成
**參數(shù):
**返回:無(wú)
*******************************************************************************/
unsigned char WaitFpData(void)
{
unsigned char i;
for(i=200; i>0; i--)//等待指紋芯片返回
{
Delay_ms(40);
if(g_ucUartRxEnd)break;
}
if(i==0)return FALSE;//指紋芯片沒(méi)有返回
else return TRUE;
}
/*******************************************************************************
**功能: 計(jì)算校驗(yàn)值
**參數(shù): 要發(fā)送的數(shù)據(jù)指針地址
**返回: 校驗(yàn)值
*******************************************************************************/
unsigned char CmdGenCHK(unsigned char wLen,unsigned char *ptr)
{
unsigned char i,temp = 0;
for(i = 0; i < wLen; i++)
{
temp ^= *(ptr + i);
}
return temp;
}
/*******************************************************************************
**功能: 發(fā)送控制指紋芯片指令
**參數(shù): wLen 數(shù)據(jù)長(zhǎng)度
cpPara 發(fā)送的數(shù)據(jù)
**返回:void
*******************************************************************************/
void UART_SendPackage(unsigned char wLen,unsigned char *ptr)
{
unsigned int i=0,len=0;
tBuf[0] = DATA_START;//指令包
for(i = 0; i < wLen; i++) // data in packet
{
tBuf[1+i] = *(ptr+i);
}
tBuf[wLen + 1] = CmdGenCHK(wLen, ptr); //Generate checkout data
tBuf[wLen + 2] = DATA_END;
len = wLen + 3;
g_ucUartRxEnd = 0;
g_ucUartRxLen = len ;
UartSend(tBuf,len);
}
/*******************************************************************************
**功能:返回信息處理
**參數(shù): cmd 不同命令不同處理
**返回:處理結(jié)果
*******************************************************************************/
unsigned char Check_Package(unsigned char cmd)
{
unsigned char flag = FALSE;
if(!WaitFpData()) return flag; //等待接收返回信息
p = 0 ;
if(g_ucUartRxEnd)
g_ucUartRxEnd = 0;//清數(shù)據(jù)包接收標(biāo)志
else
return flag;
if(rBuf[0] != DATA_START)return flag;
if(rBuf[1] != cmd)return flag;
if(rBuf[6] != CmdGenCHK(g_ucUartRxLen - 3, &rBuf[1]))return flag;
switch(cmd)
{
case CMD_ENROLL1:
case CMD_ENROLL2:
case CMD_ENROLL3:
if(ACK_SUCCESS == rBuf[4])flag = TRUE;
else if(ACK_USER_EXIST == rBuf[4])
{
// Spk_HaveUser();
Delay_ms(1500);
}
break;
case CMD_DELETE: //刪除指定編號(hào)指紋
case CMD_CLEAR: //清空所有指紋
case CMD_IDENTIFY: //1:1比對(duì)
if(ACK_SUCCESS == rBuf[4])flag = TRUE;
break;
case CMD_USERNUMB: //取用戶(hù)總數(shù)
if(ACK_SUCCESS == rBuf[4])
{
flag = TRUE;
l_ucFPID = rBuf[3];
}
break;
case CMD_SEARCH: //1:N比對(duì)
if((1 == rBuf[4])||(2 == rBuf[4])||(3 == rBuf[4]))
{
flag = TRUE;
l_ucFPID = rBuf[3];
}
break;
default:
break;
}
return flag;
}
/*******************************************************************************
**功能:以CharBuffer1 或CharBuffer2 中的特征文件搜索整個(gè)或部分指紋庫(kù)
**參數(shù):
**返回:無(wú)
*******************************************************************************/
void FP_Search(void)
{
unsigned char buf[BUF_N];
*buf = CMD_SEARCH; //1:N比對(duì)
*(buf+1) = 0x00;
*(buf+2) = 0x00;
*(buf+3) = 0x00;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**功能:清空 flash 指紋庫(kù)
**參數(shù):
**返回:無(wú)
*******************************************************************************/
void FP_Clear(void)
{
unsigned char buf[BUF_N];
*buf = CMD_CLEAR;
*(buf+1) = 0x00;
*(buf+2) = 0x00;
*(buf+3) = 0x00;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**功能:刪除指定編號(hào)指紋
**參數(shù):u_id
**返回:void
*******************************************************************************/
void FP_Delete(unsigned int u_id)
{
unsigned char buf[BUF_N];
*buf = CMD_DELETE;
*(buf+1) = u_id>>8;
*(buf+2) = u_id&0xff;
*(buf+3) = 0x00;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**功能:1:1比對(duì)
**參數(shù):u_id
**返回:void
*******************************************************************************/
void FP_Identify(unsigned int u_id)
{
unsigned char buf[BUF_N];
*buf = CMD_IDENTIFY;
*(buf+1) = u_id>>8;
*(buf+2) = u_id&0xff;
*(buf+3) = 0x00;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**注冊(cè)指紋
**輸入兩次指紋注冊(cè)一個(gè)指紋模板
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
void Enroll_Step1(unsigned int u_id)
{
unsigned char buf[BUF_N];
*buf = CMD_ENROLL1;
*(buf+1) = u_id>>8;
*(buf+2) = u_id&0xff;
*(buf+3) = 1;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**注冊(cè)指紋
**輸入兩次指紋注冊(cè)一個(gè)指紋模板
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
void Enroll_Step2(unsigned int u_id)
{
unsigned char buf[BUF_N];
*buf = CMD_ENROLL2;
*(buf+1) = u_id>>8;
*(buf+2) = u_id&0xff;
*(buf+3) = 1;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**注冊(cè)指紋
**輸入三次指紋注冊(cè)一個(gè)指紋模板
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
void Enroll_Step3(unsigned int u_id)
{
unsigned char buf[BUF_N];
*buf = CMD_ENROLL3;
*(buf+1) = u_id>>8;
*(buf+2) = u_id&0xff;
*(buf+3) = 1;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
}
/*******************************************************************************
**注冊(cè)指紋
**輸入三次指紋注冊(cè)一個(gè)指紋模板
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
unsigned char Finger_Enroll(unsigned int u_id)
{
Enroll_Step1(u_id);
if(FALSE == Check_Package(CMD_ENROLL1))return FALSE;
Delay_ms(100);
Enroll_Step2(u_id);
if(FALSE == Check_Package(CMD_ENROLL2))return FALSE;
Delay_ms(100);
Enroll_Step3(u_id);
return Check_Package(CMD_ENROLL3);
}
/*******************************************************************************
**清空指紋
**
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
unsigned char Finger_Clear(void)
{
FP_Clear();
// if(FALSE == WaitFpData())return FALSE;
return Check_Package(CMD_CLEAR);
}
/*******************************************************************************
**刪除指定指紋
**
**參數(shù):UserID 指紋號(hào)
*******************************************************************************/
unsigned char Finger_Delete(unsigned int u_id)
{
FP_Delete(u_id);
// if(FALSE == WaitFpData())return FALSE;
return Check_Package(CMD_DELETE);
}
/*******************************************************************************
**讀取用戶(hù)總數(shù)
**
**參數(shù)
*******************************************************************************/
unsigned char Finger_Read(void)
{
unsigned char buf[BUF_N];
*buf = CMD_USERNUMB;
*(buf+1) = 0x00;
*(buf+2) = 0x00;
*(buf+3) = 0x00;
*(buf+4) = 0x00;
UART_SendPackage(5, buf);
return Check_Package(CMD_USERNUMB);
}
/*******************************************************************************
**讀取用戶(hù)總數(shù)
**
**參數(shù)
*******************************************************************************/
unsigned char Finger_Search(void)
{
FP_Search();
return Check_Package(CMD_SEARCH);
}
復(fù)制代碼
Keil代碼下載:
FPC1020 _51單片機(jī).rar
(64.04 KB, 下載次數(shù): 47)
2022-4-20 23:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
Lsir666
時(shí)間:
2022-7-21 19:27
請(qǐng)問(wèn)用的是AS608嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1