#include <reg52.h>
#include "fingerprint_identification.h"
//定义按键输入端口
sbit KEY_DOWN=P1^4;
sbit KEY_OK=P1^5;
sbit KEY_CANCEL=P1^6;
sbit SRD = P3^7;//继电器
volatile unsigned char FPM10A_RECEICE_BUFFER[32];
unsigned int finger_id = 0;
//FINGERPRINT通信协议定义
code unsigned char FPM10A_Get_Device[10] ={0x01,0x00,0x07,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};//口令验证
code unsigned char FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头
code unsigned char FPM10A_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05}; //获得指纹图像
code unsigned char FPM10A_Get_Templete_Count[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数
code unsigned char FPM10A_Search[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x03,0xE7,0x00,0xF8}; //搜索指纹搜索范围0 - 999,使用BUFFER1中的特征码搜索
code unsigned char FPM10A_Search_0_9[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x13,0x00,0x21}; //搜索0-9号指纹
code unsigned char FPM10A_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08}; //将图像放入到BUFFER1
code unsigned char FPM10A_Img_To_Buffer2[7]={0x01,0x00,0x04,0x02,0x02,0x00,0x09}; //将图像放入到BUFFER2
code unsigned char FPM10A_Reg_Model[6]={0x01,0x00,0x03,0x05,0x00,0x09}; //将BUFFER1跟BUFFER2合成特征模版
code unsigned char FPM10A_Delete_All_Model[6]={0x01,0x00,0x03,0x0d,0x00,0x11};//删除指纹模块里所有的模版
volatile unsigned char FPM10A_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置
//volatile:系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据
/*------------------ FINGERPRINT命令字 --------------------------*/
void Delay_Us(int i)
{
while(--i);
}
void Delay_Ms(int m)
{
while(m--)
{
Delay_Us(125);
}
}
//发送包头
void FPM10A_Cmd_Send_Pack_Head(void)
{
int i;
for(i=0;i<6;i++) //包头
{
Uart_Send_Byte(FPM10A_Pack_Head[i]);
}
}
//发送指令
void FPM10A_Cmd_Check(void)
{
int i=0;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<10;i++)
{
Uart_Send_Byte(FPM10A_Get_Device[i]);
}
}
//接收反馈数据缓冲
void FPM10A_Receive_Data(unsigned char ucLength)
{
unsigned char i;
for (i=0;i<ucLength;i++)
FPM10A_RECEICE_BUFFER[i] = Uart_Receive_Byte();
}
//FINGERPRINT_获得指纹图像命令
void FPM10A_Cmd_Get_Img(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<6;i++) //发送命令 0x1d
{
Uart_Send_Byte(FPM10A_Get_Img[i]);
}
}
//讲图像转换成特征码存放在Buffer1中
void FINGERPRINT_Cmd_Img_To_Buffer1(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
{
Uart_Send_Byte(FPM10A_Img_To_Buffer1[i]);
}
}
//将图像转换成特征码存放在Buffer2中
void FINGERPRINT_Cmd_Img_To_Buffer2(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送包头
{
Uart_Send_Byte(FPM10A_Pack_Head[i]);
}
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
{
Uart_Send_Byte(FPM10A_Img_To_Buffer2[i]);
}
}
//搜索全部用户999枚
void FPM10A_Cmd_Search_Finger(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<11;i++)
{
Uart_Send_Byte(FPM10A_Search[i]);
}
}
void FPM10A_Cmd_Reg_Model(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<6;i++)
{
Uart_Send_Byte(FPM10A_Reg_Model[i]);
}
}
//删除指纹模块里的所有指纹模版
void FINGERPRINT_Cmd_Delete_All_Model(void)
{
unsigned char i;
for(i=0;i<6;i++) //包头
Uart_Send_Byte(FPM10A_Pack_Head[i]);
for(i=0;i<6;i++) //命令合并指纹模版
{
Uart_Send_Byte(FPM10A_Delete_All_Model[i]);
}
}
//保存指纹
void FPM10A_Cmd_Save_Finger( unsigned int storeID )
{
unsigned long temp = 0;
unsigned char i;
FPM10A_Save_Finger[5] =(storeID&0xFF00)>>8;
FPM10A_Save_Finger[6] = (storeID&0x00FF);
for(i=0;i<7;i++) //计算校验和
temp = temp + FPM10A_Save_Finger[i];
FPM10A_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据
FPM10A_Save_Finger[8]= temp & 0x0000FF;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<9;i++)
Uart_Send_Byte(FPM10A_Save_Finger[i]); //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
}
//添加指纹
void FPM10A_Add_Fingerprint()
{
unsigned char id_show[]={0,0,0};
LCD1602_WriteCMD(0x01); //清屏
finger_id=0;
while(1)
{
LCD1602_Display(0x80," Add finger ",0,16);
LCD1602_Display(0xc0," ID is ",0,16);
//按返回键直接回到主菜单
if(KEY_CANCEL == 0)
{
while(KEY_CANCEL==0);
break;
}
//按切换键指纹iD值加1
if(KEY_DOWN == 0)
{
while(KEY_DOWN==0);
if(finger_id == 1000)
{
finger_id = 0;
}
else
finger_id = finger_id + 1;
}
//指纹iD值显示处理
LCD1602_WriteCMD(0xc0+10);
LCD1602_WriteDAT(finger_id/100+48);
LCD1602_WriteDAT(finger_id%100/10+48);
LCD1602_WriteDAT(finger_id%100%10+48);
//按确认键开始录入指纹信息
if(KEY_OK == 0)
{
while(KEY_OK==0);
LCD1602_Display(0x80," Please finger ",0,16);
LCD1602_Display(0xc0," ",0,16);
while(KEY_CANCEL == 1)
{
//按下返回键退出录入返回fingerID调整状态
if(KEY_CANCEL == 0)
{
while(KEY_CANCEL==0);
break;
}
FPM10A_Cmd_Get_Img(); //获得指纹图像
FPM10A_Receive_Data(12);
//判断接收到的确认码,等于0指纹获取成功
if(FPM10A_RECEICE_BUFFER[9]==0)
{
Delay_Ms(100);
FINGERPRINT_Cmd_Img_To_Buffer1();
FPM10A_Receive_Data(12);
LCD1602_Display(0x80,"Successful entry",0,16);
Buzz_Times(1);
Delay_Ms(1000);
LCD1602_Display(0x80," Please finger ",0,16);
LCD1602_Display(0xc0," ",0,16);
while(1)
{
if(KEY_CANCEL == 0)
{
while(KEY_CANCEL==0);
break;
}
FPM10A_Cmd_Get_Img(); //获得指纹图像
FPM10A_Receive_Data(12);
//判断接收到的确认码,等于0指纹获取成功
if(FPM10A_RECEICE_BUFFER[9]==0)
{
Delay_Ms(200);
LCD1602_Display(0x80,"Successful entry",0,16);
LCD1602_Display(0xc0," ID is ",0,16);
//指纹iD值显示处理
LCD1602_WriteCMD(0xc0+10);
LCD1602_WriteDAT(finger_id/100+48);
LCD1602_WriteDAT(finger_id%100/10+48);
LCD1602_WriteDAT(finger_id%100%10+48);
FINGERPRINT_Cmd_Img_To_Buffer2();
FPM10A_Receive_Data(12);
FPM10A_Cmd_Reg_Model();//转换成特征码
FPM10A_Receive_Data(12);
FPM10A_Cmd_Save_Finger(finger_id);
FPM10A_Receive_Data(12);
Buzz_Times(1);
Delay_Ms(1000);
finger_id=finger_id+1;
break;
}
}
break;
}
}
// ClrScreen(); //清空显示屏
}
// Delay_Ms(500);
}
}
//搜索指纹
void FPM10A_Find_Fingerprint()
{
unsigned int find_fingerid = 0;
unsigned char id_show[]={0,0,0};
do
{
LCD1602_Display(0x80," Please finger ",0,16);
LCD1602_Display(0xc0," ",0,16);
FPM10A_Cmd_Get_Img(); //获得指纹图像
FPM10A_Receive_Data(12);
//判断接收到的确认码,等于0指纹获取成功
if(FPM10A_RECEICE_BUFFER[9]==0)
{
Delay_Ms(100);
FINGERPRINT_Cmd_Img_To_Buffer1();
FPM10A_Receive_Data(12);
FPM10A_Cmd_Search_Finger();
FPM10A_Receive_Data(16);
if(FPM10A_RECEICE_BUFFER[9] == 0) //搜索到
{
LCD1602_Display(0x80," Search success ",0,16);
LCD1602_Display(0xc0," ID is ",0,16);
Buzz_Times(1);
//拼接指纹ID数
find_fingerid = FPM10A_RECEICE_BUFFER[10]*256 + FPM10A_RECEICE_BUFFER[11];
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
基于51单片机AS608指纹识别系统 - 自版.zip (72个子文件)
新建 Microsoft Word 文档.docx 25KB
程序
my_work.lnp 115B
lcd_1602.c 4KB
key.c 131B
FPM10A.OBJ 22KB
main.c 2KB
my_work.uvgui.JOKER 91KB
delay.OBJ 1KB
FPM10A.h 515B
AS60x.LST 21KB
my_work 33KB
hex
zhiwen1602.lnp 155B
main_program.obj 5KB
zhiwen1602.build_log.htm 1KB
delay.obj 1KB
lcd_1602.obj 8KB
buzz.obj 2KB
others.obj 5KB
main.obj 6KB
uart.obj 2KB
zhiwen1602.hex 9KB
zhiwen1602.plg 216B
FPM10A.obj 22KB
key.obj 1KB
AS60x.obj 23KB
lcdl602.obj 8KB
zhiwen1602 32KB
buzz.LST 1KB
my_work_uvopt.bak 57KB
others.c 1KB
my_work.uvgui_Tree.bak 77KB
main_program.LST 6KB
others.LST 3KB
my_work_Uv2.Bak 2KB
lcdl602.LST 8KB
my_work_uvproj.bak 14KB
fingerprint_identification.h 1020B
my_work.plg 4KB
key.LST 1KB
my_work.uvopt 57KB
key.h 172B
delay.LST 1KB
my_work.uvproj 13KB
uart.LST 2KB
AS60x.c 10KB
delay.h 115B
lcd_1602.h 800B
my_work_Opt.Bak 2KB
main_program.c 2KB
delay.c 132B
my_work.uvgui.Administrator 77KB
FPM10A.LST 21KB
my_work.Uv2.bak 2KB
zhiwen1602.m51 38KB
my_work.uvgui_Administrator.bak 77KB
FPM10A.c 10KB
my_work.opt.bak 2KB
main.LST 6KB
my_work.uvgui.Tree 77KB
buzz.c 199B
FPM10A.__i 45B
uart.h 146B
zhiwen.m51 40KB
my_work.M51 42KB
lcd_1602.LST 7KB
uart.OBJ 2KB
main.OBJ 5KB
buzz.h 123B
key.OBJ 1KB
lcdl602.c 4KB
uart.c 732B
原理图.SchDoc 260KB
共 72 条
- 1
Luhe
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0