Слияние кода завершено, страница обновится автоматически
#include "stc12c5a60s2.h"
#include "fingerprint.h"
#include "uart.h"
#include "lcd.h"
#include "intrins.h"
#include "others.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
volatile u8 FPM10A_RECEICE_BUFFER[32] = {0};
//FINGERPRINT通信协议定义
code u8 FPM10A_Set_Device[10] ={0x01,0x00,0x07,0x12,0x00,0x00,0x00,0x00,0x00,0x1a};//口令设置
code u8 FPM10A_Get_Device[10] ={0x01,0x00,0x07,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};//口令验证
code u8 FPM10A_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头
code u8 FPM10A_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05}; //获得指纹图像
code u8 FPM10A_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08}; //将图像放入到BUFFER1
code u8 FPM10A_Img_To_Buffer2[7]={0x01,0x00,0x04,0x02,0x02,0x00,0x09}; //将图像放入到BUFFER2
code u8 FPM10A_Search[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x03,0xE7,0x00,0xF8}; //搜索指纹搜索范围0 - 999,使用BUFFER1中的特征码搜索
code u8 FPM10A_Reg_Model[6]={0x01,0x00,0x03,0x05,0x00,0x09}; //将BUFFER1跟BUFFER2合成特征模版
code u8 FPM10A_Delete_All_Model[6]={0x01,0x00,0x03,0x0d,0x00,0x11};//删除指纹模块里所有的模版
volatile u8 FPM10A_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//将CHAR BUFFER1中的特征码存放到指定的位置
u8 as608_error = 0;
extern u8 pwd_len;
extern u8 input_pwd[6];
extern u8 time_LCD1602_A;
void Delay1ms(u16 count) //@11.0592MHz
{
unsigned char i, j;
while(count--)
{
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
}
/*-------------------- FINGERPRINT基本函数 --------------------------*/
//发送包头
void FPM10A_Cmd_Send_Pack_Head(void)
{
u8 i;
for(i=0;i<6;i++) //包头
{
Uart1_Send_Byte(FPM10A_Pack_Head[i]);
}
}
//发送设置口令指令
void FPM10A_Cmd_Set(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<10;i++)
{
Uart1_Send_Byte(FPM10A_Set_Device[i]);
}
}
//发送验证口令指令
void FPM10A_Cmd_Check(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<10;i++)
{
Uart1_Send_Byte(FPM10A_Get_Device[i]);
}
}
//接收反馈数据缓冲
void FPM10A_Receive_Data(u8 ucLength)
{
u8 i;
for (i=0;i<ucLength;i++)
{
FPM10A_RECEICE_BUFFER[i] = Uart1_Receive_Byte();
}
}
//FINGERPRINT_获得指纹图像命令
void FPM10A_Cmd_Get_Img(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<6;i++) //发送命令 0x1d
{
Uart1_Send_Byte(FPM10A_Get_Img[i]);
}
}
//将图像转换成特征码存放在Buffer1中
void FINGERPRINT_Cmd_Img_To_Buffer1(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
{
Uart1_Send_Byte(FPM10A_Img_To_Buffer1[i]);
}
}
//将图像转换成特征码存放在Buffer2中
void FINGERPRINT_Cmd_Img_To_Buffer2(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 Char_buffer1
{
Uart1_Send_Byte(FPM10A_Img_To_Buffer2[i]);
}
}
//搜索全部用户999枚
void FPM10A_Cmd_Search_Finger(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<11;i++)
{
Uart1_Send_Byte(FPM10A_Search[i]);
}
}
//将BUFFER1跟BUFFER2合成特征模版
void FPM10A_Cmd_Reg_Model(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<6;i++)
{
Uart1_Send_Byte(FPM10A_Reg_Model[i]);
}
}
//删除指纹模块里的所有指纹模版
void FINGERPRINT_Cmd_Delete_All_Model(void)
{
u8 i;
FPM10A_Cmd_Send_Pack_Head(); //发送通信协议包头
for(i=0;i<6;i++) //命令合并指纹模版
{
Uart1_Send_Byte(FPM10A_Delete_All_Model[i]);
}
}
//保存指纹
void FPM10A_Cmd_Save_Finger(u16 storeID)
{
u8 temp = 0;
u8 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++)
{
Uart1_Send_Byte(FPM10A_Save_Finger[i]); //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
}
}
/*-------------------- FINGERPRINT用户函数 --------------------------*/
//校对指纹模块是否接入正确,液晶做出相应的提示......
void Device_Check(void)
{
FPM10A_RECEICE_BUFFER[9] = 1;//串口数组第九位可判断是否通信正常
Lcd_Show_Data(2,1,"Loading",7);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading.",8);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading..",9);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading...",10);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading....",11);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading.....",12);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Loading......",13);//设备加载中界面
Delay1ms(100);
Lcd_Show_Data(2,1,"Docking failure!",16);//液晶先显示对接失败,如果指纹模块插对的话会将其覆盖
/*-------------------- 设置口令指令 --------------------------*/
// FPM10A_Cmd_Set();//发送设置口令指令
// FPM10A_Receive_Data(12);//将串口接收到的数据转存
// if(FPM10A_RECEICE_BUFFER[9] == 0)//判断数据低第9位是否接收到0
// {
// Lcd_Show_Data(2,1,"true",4);//符合成功条件则显示对接成功
// }
//
// Delay100ms();
// Delay100ms();
// Delay100ms();
// Delay100ms();
// Delay100ms();
// Delay100ms();
// Delay100ms();
/*-------------------- 设置口令指令 --------------------------*/
/*-------------------- 验证口令指令 --------------------------*/
while(1)
{
FPM10A_Cmd_Check();//单片机向指纹模块发送校对命令
FPM10A_Receive_Data(12);//将串口接收到的数据转存
if(FPM10A_RECEICE_BUFFER[9] == 0)//判断数据低第9位是否接收到0
{
Lcd_Show_Data(2,1,"Docking success!",16);//符合成功条件则显示对接成功
break;
}
else
{
Delay1ms(500);
continue;
}
}
// FPM10A_Cmd_ReadSysPara();//读取模块的基本参数
// FPM10A_Receive_Data(28);
// PS_Num |= (FPM10A_RECEICE_BUFFER[14] << 8) + FPM10A_RECEICE_BUFFER[15];
/*-------------------- 验证口令指令 --------------------------*/
}
//搜索指纹
void FPM10A_Find_Fingerprint(void)
{
u16 find_fingerid = 0;
u8 bai = 0, shi = 0, ge = 0;
u8 i;
Lcd_Show_Data(1,1," ",16);
Lcd_Show_Data(2,1," ",16);
FPM10A_Cmd_Get_Img();//获得指纹图像
FPM10A_Receive_Data(12);
/******************调试程序1*******************/
// Uart1_Send_Byte(0x01);//调试第一步
// Uart1_Send_String(FPM10A_RECEICE_BUFFER,12);
/******************调试程序1*******************/
if(FPM10A_RECEICE_BUFFER[9]==0)
{
Delay1ms(50);
FINGERPRINT_Cmd_Img_To_Buffer1();
FPM10A_Receive_Data(12);
/******************调试程序2*******************/
// Uart1_Send_Byte(0x02);//调试第一步
// Uart1_Send_String(FPM10A_RECEICE_BUFFER,12);
/******************调试程序2*******************/
if(FPM10A_RECEICE_BUFFER[9]==0)
{
Delay1ms(50);
FPM10A_Cmd_Search_Finger();
FPM10A_Receive_Data(16);
/******************调试程序3*******************/
// Uart1_Send_Byte(0x03);//调试第一步
// Uart1_Send_String(FPM10A_RECEICE_BUFFER,16);
/******************调试程序3*******************/
//显示重置
LCD1602_A = 1; //开背光
time_LCD1602_A = 15; //背光时间重置为15s
if(FPM10A_RECEICE_BUFFER[9]==0)
{
as608_error = 0;
Lcd_Show_Data(1,1," Search success ",16);
Lcd_Show_Data(2,1," ID is ",16);
find_fingerid = FPM10A_RECEICE_BUFFER[10]*256 + FPM10A_RECEICE_BUFFER[11];
bai = find_fingerid / 100 + 0x30;
shi = find_fingerid % 100 / 10 + 0x30;
ge = find_fingerid % 10 + 0x30;
Lcd_Show_Data(2,11,&bai,1);
Lcd_Show_Data(2,12,&shi,1);
Lcd_Show_Data(2,13,&ge ,1);
relay = 1;
Delay1ms(1500);
relay = 0;
Delay1ms(2000); //这个延时不可少,需要等待电磁锁完全关断
/*重新初始化LCD1602,因为开锁会失效*/
LcdInit();
LCD1602_A = 1; //开背光
Lcd_Show_Data(1,1," Dumpling-Lock ",16);
Lcd_Show_Data(2,1,"input:",6);
/*重新初始化LCD1602,因为开锁会失效*/
}
else
{
as608_error++;
Lcd_Show_Data(1,1," Search failed ",16);
if(as608_error>=3)
{
Beep_Open(10000);
}
Delay1ms(2000);
Lcd_Show_Data(1,1," Dumpling-Lock ",16);
Lcd_Show_Data(2,1,"input:",6);
}
//按键密码重置
pwd_len = 0;
for(i=0;i<6;i++)
{
input_pwd[i] = 0;
}
}
else
{
Lcd_Show_Data(1,1," Buffer1 failed ",16);
Delay1ms(2000);
}
}
else
{
Lcd_Show_Data(1,1," Get_Img failed ",16);
Delay1ms(2000);
}
// Lcd_Show_Data(1,1," ",16);
// Lcd_Show_Data(2,1," ",16);
Lcd_Show_Data(1,1," Dumpling-Lock ",16);
Lcd_Show_Data(2,1,"input: ",16);
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )