📄 061110.c
字号:
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 + -