⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bc2018.c

📁 上海大宇指纹机软件qqqfwefgergr
💻 C
📖 第 1 页 / 共 5 页
字号:
		{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 + -