📄 bc2018.c
字号:
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x08,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
/********************************************************************
简介:删除模板(指令0x0D).
功能:删除flash数据库中指定ID号的指纹模板.
输入参数: iTimeOneMinuteCnt_PageId-指纹库模板号
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 删除模板成功;
MX_COMM_ERR(0x01) 通讯错误;
MX_DEL_TEMP_ERR(0x10) 删除模板失败。
编者:ZSJ
修改:
*********************************************************************/
bit CmdDeletOneTemplet(Uint iTimeOneMinuteCnt_PageId)
{ ES=1;
Delay_163us();
PackSendDat(0,3,0x0D,5,0,iTimeOneMinuteCnt_PageId);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>50)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x0D,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#if NOUSE==1
/********************************************************************
简介:查询指纹库(1:1搜索,指令0x28).
功能:查询flash数据库中指定ID号是否存在有效模板.
输入参数:iPageID-指纹模板号
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 指定位置存在有效模板;
MX_NO_TEMP(0x19) 指定位置没有有效模板;
MX_COMM_ERR(0x01) 通讯错误。
编者:ZSJ
修改:
*********************************************************************/
bit CheckTemplet(Uint iPageID)
{ ES=1;
Delay_163us();
PackSendDat(0,3,0x28,5,0,iPageID);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x28,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#endif
/********************************************************************
简介:清空指纹库(指令0x0E).
功能:删除flash数据库中所有指纹模板.
输入参数:无
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 清空成功;
MX_COMM_ERR(0x01) 通讯错误;
MX_CLEAR_TEMP_ERR(0x11) 清空失败。
编者:ZSJ
修改:
*********************************************************************/
bit CmdEraseAllTemple()
{ ES=1;
Delay_163us();
PackSendDat(0,1,0x0E,0,0,0);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>50)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x0E,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#if NOUSE==1
/********************************************************************
简介:休眠(指令0x11).
功能:令模块进入低功耗状态,进入休眠后,必须硬件复位才能重新唤醒.
输入参数:无
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 成功进入休眠;
MX_COMM_ERR(0x01) 通讯错误;
MX_SLEEP_ERR(0x12) 不能进入休眠。
编者:ZSJ
修改:
*********************************************************************/
bit CmdSleep()
{ ES=1;
PackSendDat(0,1,0x11,0,0,0);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x11,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
/********************************************************************
简介:设置安全等级(可设1~5级,缺省为3级,指令0x12).
功能:设置模块比对指纹时的安全等级(1~5).
输入参数:iSecurLevel-安全等级(1~5级)
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 安全等级设置成功;
MX_COMM_ERR(0x01) 通讯错误。
编者:ZSJ
修改:
*********************************************************************/
bit CmdSetSecurLevel(Uchar iSecurLevel)
{ ES=1;
PackSendDat(0,2,0x12,7,0,iSecurLevel);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x12,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
/********************************************************************
简介:闪灯(指令0x16).
功能:命令模块按要求闪灯指示。.
输入参数:iCode 闪灯指示(1B);iTime闪灯时间(1B)
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 闪灯成功;
MX_COMM_ERR(0x01) 通讯错误。
编者:ZSJ
修改:
*********************************************************************/
bit CmdFlashLED(Uchar iCode,Uchar iTime)
{ Ulong Para;
ES=1;
Delay_163us();
Para=iCode;
Para=(Para<<8)+iTime;
PackSendDat(0,3,0x16,9,0,Para);
//ET0=0;
//ET1=0;
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>50)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
//ET0=1;
//ET1=1;
ES=0;
return(UnpackRevDat(/*0,*/0x16,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
#endif
/********************************************************************
简介:移动特征(指令0x20).
功能:将一个缓冲区中的特征文件移到另一个缓冲区.
输入参数:iScrBufferID-源缓冲区(1B); iDstBufferID-目的缓冲区(1B)
当为CHAR_BUFFER_A 表示缓冲区CharBufferA,代号0x01
当为CHAR_BUFFER_B 表示缓冲区CharBufferB,代号0x02
当为MODEL_BUFFER 表示缓冲区ModelBuffer,代号0x03
输出参数:无
返回值:(1B,如下列出情况)
MX_OK(0x00) 移动完成;
MX_COMM_ERR(0x01) 收包有错 (即通讯错误)。
编者:ZSJ
修改:
*********************************************************************/
bit CmdMoveTemplet(Uchar iScrBufferID,Uchar iDstBufferID)
{ Ulong Para;
ES=1;
Delay_163us();
Para=iScrBufferID;
Para=(Para<<8)+iDstBufferID;
PackSendDat(0,3,0x20,2,0,Para);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//发协议头0xC0,启动串口发送;然后在串口中断中将缓冲区中的所有数据发送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口应答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x20,InputPwCnt_RevDatLenth));//解开应答包,并返回应答码及应答结果.
}
/**************************************************************
简介:中断接收应答包并解码.
功能:中断接收应答包并解码.
输入参数:无
输出参数:BDatRevOk-数据接收完成标志;
返回值:(1B,如下列出情况)
MX_OK(0x00) 读Flash用户区信息成功;
MX_COMM_ERR(0x01) 通讯错误。
编者:ZSJ
修改:
注意:解码在中断接收中做,当收到0xDB时,就需判断下一个数据
是0xDC还是0xDD或是其它.中断中解码较方便.
0xDB 0xDC---------------->0xC0一数据;
0xDB 0xDD---------------->0xDB一数据;
0xDB 其它---------------->0xDB 其它两数据.
****************************************************************
void GetDatFromFingerprintModule()
{ //FactPackLenth; //应答包里的实际包长度.
Uchar TempRevDat;
//TempRevDat=0;
TempRevDat=SBUF;
//if((InputPwCnt_RevDatLenth==0)&&(BDatRevOk==0))
if(((LableBitVar&0x01)==0x00)&&(InputPwCnt_RevDatLenth==0))
{PtRevOrSendDat=&RevEepPageBytDatBuf;}
//if(!BDatRevOk)
if((LableBitVar&0x01)==0x00);
{ //TempRevDat=SBUF;
if((TempRevDat==0xE0)||(TempRevDat==0xC0))
{
if(InputPwCnt_RevDatLenth!=0)//是协议尾
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
//BDatRevOk=1;
LableBitVar|=0x01;
}//结束该条协议的接收
else//是协议头
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
}
}
else//整个协议除头尾部分
{ if(TempRevDat==0xdb)
{ BuzzerEvent_RevSameDatCnt++;
switch(BuzzerEvent_RevSameDatCnt)
{
case 1:
MinuteCnt_LastRevDat=TempRevDat;
break;
case 2:
*PtRevOrSendDat++=MinuteCnt_LastRevDat;
*PtRevOrSendDat++=TempRevDat;
BuzzerEvent_RevSameDatCnt=0;
InputPwCnt_RevDatLenth+=2;
break;
}
}
else
{ if(MinuteCnt_LastRevDat==0xdb)
{ switch(TempRevDat)
{
case 0xdc:
*PtRevOrSendDat++=0xc0;
InputPwCnt_RevDatLenth++;
break;
case 0xdd:
*PtRevOrSendDat++=0xdb;
InputPwCnt_RevDatLenth++;
break;
default:
*PtRevOrSendDat++=MinuteCnt_LastRevDat;
*PtRevOrSendDat++=TempRevDat;
InputPwCnt_RevDatLenth+=2;
break;
}
MinuteCnt_LastRevDat=0x00;
}
else
{ *PtRevOrSendDat++=TempRevDat;
InputPwCnt_RevDatLenth++;
}
}
}
}
}*/
void GetDatFromFingerprintModule()
{ //FactPackLenth; //应答包里的实际包长度.
Uchar TempRevDat;
//TempRevDat=0;
TempRevDat=SBUF;
//if((InputPwCnt_RevDatLenth==0)&&(BDatRevOk==0))
if(((LableBitVar&0x01)==0x00)&&(InputPwCnt_RevDatLenth==0))
{PtRevOrSendDat=&RevEepPageBytDatBuf;}
//if(!BDatRevOk)
if((LableBitVar&0x01)==0x00);
{
//if((TempRevDat==0xE0)||(TempRevDat==0xC0))
if(TempRevDat==0xC0)
{
if(InputPwCnt_RevDatLenth!=0)//是协议尾
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
//BDatRevOk=1;
LableBitVar|=0x01;
}//结束该条协议的接收
else//是协议头
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
}
}
else//整个协议除头尾部分
{
*PtRevOrSendDat++=TempRevDat;
InputPwCnt_RevDatLenth++;
}
}
}
void SendNextDatToFingerprintModule()
{ if(MarkKeyNum_SendDatLenth>0)//待发送数据长度
{
SBUF=*PtRevOrSendDat++;
MarkKeyNum_SendDatLenth--;
}
}
////////////////////////////////////////
////////////////////////////////////////
/**************指纹模块程序结束********/
/***************主模块程序**************/
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void InitHardware()
{ register i;
JiChecksum=0;
D1_OUT=1;
D0_OUT=1;
DOG=~DOG;
for(i=0;i<1000;i++)
{Delay_163us();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -