?? bc2018.c
字號(hào):
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x08,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
/********************************************************************
簡介:刪除模板(指令0x0D).
功能:刪除flash數(shù)據(jù)庫中指定ID號(hào)的指紋模板.
輸入?yún)?shù): iTimeOneMinuteCnt_PageId-指紋庫模板號(hào)
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 刪除模板成功;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤;
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();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>50)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x0D,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
#if NOUSE==1
/********************************************************************
簡介:查詢指紋庫(1:1搜索,指令0x28).
功能:查詢flash數(shù)據(jù)庫中指定ID號(hào)是否存在有效模板.
輸入?yún)?shù):iPageID-指紋模板號(hào)
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 指定位置存在有效模板;
MX_NO_TEMP(0x19) 指定位置沒有有效模板;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤。
編者:ZSJ
修改:
*********************************************************************/
bit CheckTemplet(Uint iPageID)
{ ES=1;
Delay_163us();
PackSendDat(0,3,0x28,5,0,iPageID);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x28,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
#endif
/********************************************************************
簡介:清空指紋庫(指令0x0E).
功能:刪除flash數(shù)據(jù)庫中所有指紋模板.
輸入?yún)?shù):無
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 清空成功;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤;
MX_CLEAR_TEMP_ERR(0x11) 清空失敗。
編者:ZSJ
修改:
*********************************************************************/
bit CmdEraseAllTemple()
{ ES=1;
Delay_163us();
PackSendDat(0,1,0x0E,0,0,0);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>50)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x0E,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
#if NOUSE==1
/********************************************************************
簡介:休眠(指令0x11).
功能:令模塊進(jìn)入低功耗狀態(tài),進(jìn)入休眠后,必須硬件復(fù)位才能重新喚醒.
輸入?yún)?shù):無
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 成功進(jìn)入休眠;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤;
MX_SLEEP_ERR(0x12) 不能進(jìn)入休眠。
編者:ZSJ
修改:
*********************************************************************/
bit CmdSleep()
{ ES=1;
PackSendDat(0,1,0x11,0,0,0);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x11,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
/********************************************************************
簡介:設(shè)置安全等級(jí)(可設(shè)1~5級(jí),缺省為3級(jí),指令0x12).
功能:設(shè)置模塊比對(duì)指紋時(shí)的安全等級(jí)(1~5).
輸入?yún)?shù):iSecurLevel-安全等級(jí)(1~5級(jí))
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 安全等級(jí)設(shè)置成功;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤。
編者:ZSJ
修改:
*********************************************************************/
bit CmdSetSecurLevel(Uchar iSecurLevel)
{ ES=1;
PackSendDat(0,2,0x12,7,0,iSecurLevel);
TimeDoorOpenCnt=0;
BPreventStop=1;
StartSeriSendDat();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x12,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
/********************************************************************
簡介:閃燈(指令0x16).
功能:命令模塊按要求閃燈指示。.
輸入?yún)?shù):iCode 閃燈指示(1B);iTime閃燈時(shí)間(1B)
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 閃燈成功;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤。
編者: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();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
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));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
#endif
/********************************************************************
簡介:移動(dòng)特征(指令0x20).
功能:將一個(gè)緩沖區(qū)中的特征文件移到另一個(gè)緩沖區(qū).
輸入?yún)?shù):iScrBufferID-源緩沖區(qū)(1B); iDstBufferID-目的緩沖區(qū)(1B)
當(dāng)為CHAR_BUFFER_A 表示緩沖區(qū)CharBufferA,代號(hào)0x01
當(dāng)為CHAR_BUFFER_B 表示緩沖區(qū)CharBufferB,代號(hào)0x02
當(dāng)為MODEL_BUFFER 表示緩沖區(qū)ModelBuffer,代號(hào)0x03
輸出參數(shù):無
返回值:(1B,如下列出情況)
MX_OK(0x00) 移動(dòng)完成;
MX_COMM_ERR(0x01) 收包有錯(cuò) (即通訊錯(cuò)誤)。
編者: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();//發(fā)協(xié)議頭0xC0,啟動(dòng)串口發(fā)送;然后在串口中斷中將緩沖區(qū)中的所有數(shù)據(jù)發(fā)送出去.
//BDatRevOk=0;
LableBitVar&=0xfe;
//while(!BDatRevOk); //等待串口應(yīng)答包完成
while((LableBitVar&0x01)==0x00)
{ DOG=~DOG;
if(TimeDoorOpenCnt>100)
{break;}
}
BPreventStop=0;
TimeDoorOpenCnt=0;
ES=0;
return(UnpackRevDat(/*0,*/0x20,InputPwCnt_RevDatLenth));//解開應(yīng)答包,并返回應(yīng)答碼及應(yīng)答結(jié)果.
}
/**************************************************************
簡介:中斷接收應(yīng)答包并解碼.
功能:中斷接收應(yīng)答包并解碼.
輸入?yún)?shù):無
輸出參數(shù):BDatRevOk-數(shù)據(jù)接收完成標(biāo)志;
返回值:(1B,如下列出情況)
MX_OK(0x00) 讀Flash用戶區(qū)信息成功;
MX_COMM_ERR(0x01) 通訊錯(cuò)誤。
編者:ZSJ
修改:
注意:解碼在中斷接收中做,當(dāng)收到0xDB時(shí),就需判斷下一個(gè)數(shù)據(jù)
是0xDC還是0xDD或是其它.中斷中解碼較方便.
0xDB 0xDC---------------->0xC0一數(shù)據(jù);
0xDB 0xDD---------------->0xDB一數(shù)據(jù);
0xDB 其它---------------->0xDB 其它兩數(shù)據(jù).
****************************************************************
void GetDatFromFingerprintModule()
{ //FactPackLenth; //應(yīng)答包里的實(shí)際包長度.
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)//是協(xié)議尾
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
//BDatRevOk=1;
LableBitVar|=0x01;
}//結(jié)束該條協(xié)議的接收
else//是協(xié)議頭
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
}
}
else//整個(gè)協(xié)議除頭尾部分
{ 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; //應(yīng)答包里的實(shí)際包長度.
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)//是協(xié)議尾
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
//BDatRevOk=1;
LableBitVar|=0x01;
}//結(jié)束該條協(xié)議的接收
else//是協(xié)議頭
{ //*PtRevOrSendDat++=TempRevDat;
//InputPwCnt_RevDatLenth++;
}
}
else//整個(gè)協(xié)議除頭尾部分
{
*PtRevOrSendDat++=TempRevDat;
InputPwCnt_RevDatLenth++;
}
}
}
void SendNextDatToFingerprintModule()
{ if(MarkKeyNum_SendDatLenth>0)//待發(fā)送數(shù)據(jù)長度
{
SBUF=*PtRevOrSendDat++;
MarkKeyNum_SendDatLenth--;
}
}
////////////////////////////////////////
////////////////////////////////////////
/**************指紋模塊程序結(jié)束********/
/***************主模塊程序**************/
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void InitHardware()
{ register i;
JiChecksum=0;
D1_OUT=1;
D0_OUT=1;
DOG=~DOG;
for(i=0;i<1000;i++)
{Delay_163us();}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -