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

📄 061110.c

📁 上海大宇指纹机软件qqqfwefgergr
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 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();}
	/*DOG=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	DOG=0;*/
	DOG=1;
	for(i=0;i<1000;i++)
	{Delay_163us();}
	DOG=0;
	for(i=0;i<1000;i++)
	{Delay_163us();}
	TMOD=0X11; /*T0作为定时器工作于方式1,T1作为定时器工作于方式1*/
	IE=0X8A;   /*EA - - ES ET1 EX1 ET0 EX0中断允许设置0X8A*/
	//IP=0X82;   /*- - - PS PT1 PX1 PT0 PX0*/
	//IP=0X0A;
	IP=0X10;
	//TH0=0Xb7;
	//TL0=0Xff;//11M
	//TH0=0X97;
	//TL0=0XD4;//16M
	TH0=0X6f;
	TL0=0Xff;//22M
	//TH1=0XCA;
	//TL1=0X4A;//11M
	//TH1=0XB1;
	//TL1=0XDF;//16M
	TH1=0X93;
	TL1=0Xff;//22M

	TCON=0X50; /*TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0*/
	//P1=0XF8;
	BuzzerCtl=1;
	ALARM_1=1;
	RELAY=1;
	//IE=0X90;       //EA - - ES ET1 EX1 ET0 EX0中断允许设置
	//EA=1;ES=0;  //JJ
	//T2MOD=0X00;
	SCON   = 0x53;
	RCAP2H = 0xFF;
	RCAP2L = 0xF4; //11.0592MHZ---28800bps(计算时)
	TH2    = 0xFF;
	TL2    = 0xF4; //22.1184MHZ---57600bps(实际值)
	T2CON  = 0x34;//定时器2作为波特率发生器TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2.
	TR2=1;
	/*启动对aux_ram的访问*/
	//CHPENR=0X87;
	//CHPENR=0X59;
	//CHPCON=0X10;
	//CHPENR=0X00;
	//WriteDataIntoAt28c256(PAGE_ADDR(OpenDoorPasswordAddr(0)),At28c256PageLenth,1);
}
void InitSoftware()
{
	PtRevOrSendDat=&RevEepPageBytDatBuf;
	TimeOneMinuteCnt_PageId=0;
	RecordInputCondit_CodingDatCnt=0;
	MarkKeyNum_SendDatLenth=0;
	InputPwCnt_RevDatLenth=0;
	LableBitVar=0;
	BuzzerCnt_DecodeDatCnt=0;
	BuzzerEvent_RevSameDatCnt=0;
	LedEvent_TimeBuzzerCnt=0;
	MinuteCnt_LastRevDat=0;
	TempVar_TimeGlintCnt=0;
	NumCnt=0;
	Good_Good=0;
	BMaybeRecord=0;
	//CardNumHighWord=0;
	//CardNumLowWord=0;

	BStartBuzzerTime=0;
	BStopCheckBuz=0;
	BStopCheck=0;
	BStartLedGlintTime=0;
	BStartTimeCnt=0;
	TimeNumCnt=0;
	BstartDoorOpenTime=0;
	TimeDoorOpenCnt=0;
	BstartLawlessOpenDoorTime=0;
	BEndOneMinuteTime=0;
	EveryOneMinuteCnt_TimeCnt=0;
	AffairDone=0;
	BPressKey=0;
	TimeDoorOpenCnt=9999;
	BWaitForSetAffairBring=0;
	BOpenDoorAffairBring=0;

	BForgetCloseDoor=0;
	BLawlessOpe

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -