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

📄 bc2018.c

📁 上海大宇指纹机软件qqqfwefgergr
💻 C
📖 第 1 页 / 共 5 页
字号:
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			else
			{	D0_OUT=0;
				D1_OUT=1;
				Delay_163us();
				D1_OUT=1;
				D0_OUT=1;
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			TimeDoorOpenCnt<<=1;
		}
	}
	else//韦根34输出
	{
		for(i=0;i<16;i++)
		{	if(EveryOneMinuteCnt_TimeCnt&0x8000)
			{	D1_OUT=0;
				D0_OUT=1;
				Delay_163us();
				D1_OUT=1;
				D0_OUT=1;
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			else
			{	D0_OUT=0;
				D1_OUT=1;
				Delay_163us();
				D1_OUT=1;
				D0_OUT=1;
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			EveryOneMinuteCnt_TimeCnt<<=1;
		}
		for(i=0;i<16;i++)
		{	if(TimeDoorOpenCnt&0x8000)
			{	D1_OUT=0;
				D0_OUT=1;
				Delay_163us();
				D1_OUT=1;
				D0_OUT=1;
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			else
			{	D0_OUT=0;
				D1_OUT=1;
				Delay_163us();
				D1_OUT=1;
				D0_OUT=1;
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
				Delay_163us();
			}
			TimeDoorOpenCnt<<=1;
		}
	}
    //最后输出奇校验位
    //if((LableBitVar&0x02)==0x02)
	if(JiChecksum)
	{
		D1_OUT=0;
		D0_OUT=1;
		Delay_163us();
		D1_OUT=1;
		D0_OUT=1;
		Delay_163us();
		Delay_163us();
		Delay_163us();
		Delay_163us();
		Delay_163us();
	}
	else
	{	
		D0_OUT=0;
		D1_OUT=1;
		Delay_163us();
		D1_OUT=1;
		D0_OUT=1;
		Delay_163us();
		Delay_163us();
		Delay_163us();
		Delay_163us();
		Delay_163us();
	}
}
void SendWgDataToWgOutput(Uchar WgType)
{   //register i;
    //读出卡号
    ConverIntoWgData(WgType);
	BStartTime=1;
	DatOk=1;
	while(DatOk)
	{DOG=~DOG;}
}
void WgDataOutput()
{   register i;
	for(i=0;i<sizeof(RevEepPageBytDatBuf);i++)
	{RevEepPageBytDatBuf[i]=0x00;}
	Delay(1200);
	ReadDataFromAt28c256(16832,9,0,0);
	switch(RevEepPageBytDatBuf[8]&0x88)
	{
	case 0x00://00 以WG26格式输出卡号SR03-0
		SendWgDataToWgOutput(0);
		//BForthFinger=0;
		break;
	case 0x08://01 以WG34格式输出卡号SR03-1
		SendWgDataToWgOutput(1);
		//BForthFinger=1;
		break;
	}
}
void Delay_163us()
{	register j;
	for(j=0;j<40;j++)//40//125
	{DOG=~DOG;}
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////

/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/***************开关量读取子程序********************/
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void nwrite_latch(Uchar a,Uint add)
{
	XBYTE[add]=a;
}
Uchar nread_latch(Uint add)
{	Uchar idata temp;
	temp=XBYTE[add];
	return temp;
}
/*************************************
功能:读开关量输入状态
返回值:开关量的状态
工作人员:ZSJZSJ
修改人员:
***********************************/
Uint ReadStateofSwitch(void)
{
	Uchar idata P0FirBak,P0TempRec;
	nwrite_latch(0xff,0xffff);
    CS256_EN244=1;
	P0FirBak=(Uint)nread_latch(0xffff);
	CS256_EN244=0;
    P0TempRec=~P0FirBak;/*取反是为了避免去读了内存*/
    P0TempRec&=0x0f;
	return(P0TempRec);
}
/////////////////////////////////////////////////////
////////////////////////////////////////////////////

///////////////////////////////////////////////////////
/*****************************************************
 *************at28c256的读写子程序********************
******************************************************/
///////////////////////////////////////////////////////
void Delay(Uint n)
{	register i;
	//BStartBuzzerTime=0;//后来加 zsj
	//BuzzerCtl=1;       //后来加 zsj
	for(i=0;i<n;i++)
	{
	 DOG=~DOG;
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();
	 DOG=~DOG;
	}
}
/*******************************************************
功能:SDP使能算法,进入写保护状态,不退出就不能进行写操作
输入参数:无
输出参数:无
返回值:  无
编者:ZSJ
修改:
********************************************************/
void EnableAndEnterSdPtRevDatRevDattate()
{	AT28C256_COM1=0xaa;
	AT28C256_COM2=0x55;
	AT28C256_COM1=0xa0;
}
/*******************************************************
功能:SDP禁能算法,退出写保护状态,可以再次写操作
输入参数:无
输出参数:无
返回值:  无
编者:ZSJ
修改:
********************************************************/
void DisableAndOutSdPtRevDatRevDattate()
{	AT28C256_COM1=0xaa;
	AT28C256_COM2=0x55;
	AT28C256_COM1=0x80;
	AT28C256_COM1=0xaa;
	AT28C256_COM2=0x55;
	AT28C256_COM1=0x20;
}
/***************************************************************************
功能:对AT28C256进行字节或页写入.
输入参数:PageAddr-页地址;UintAddr-页内单元地址;
		  PageOrByteWrite-
		      0时页写入,
		      1~4时字节写入:1时单字节写入,2双字节写入,4时4字节写入.
输出参数:无
返回值:  无
编者:ZSJ
修改:
*****************************************************************************/
void WriteDataIntoAt28c256(Uint PageAddr,Uint UintAddr,Uchar PageOrByteWrite,bit BWriteTrue)
{	register i;
    Uint LastPageAddr;
	PtRevOrSendDat=&RevEepPageBytDatBuf;
	if(PageAddr!=LastPageAddr)
	{   LastPageAddr=PageAddr;
		CS256_EN244=0;
		if(!PageOrByteWrite)
		{	for(i=0;i<UintAddr;i++)
			{   DOG=~DOG;
		        if(BWriteTrue)
				{Delay(300);}/*必须加入此延时*/
				else
				{Delay(20);}
				DisableAndOutSdPtRevDatRevDattate();
				XBYTE[PageAddr+i]=*PtRevOrSendDat;
				if(BWriteTrue)
				{Delay(300);}/*必须加入此延时*/
				else
				{Delay(20);}
				EnableAndEnterSdPtRevDatRevDattate();
				XBYTE[PageAddr+i]=*PtRevOrSendDat++;
			}
		}
		else
		{	for(i=UintAddr;i<(UintAddr+PageOrByteWrite);i++)
			{	DOG=~DOG;
				//if(BWriteTrue)
				{Delay(600);}/*必须加入此延时 300*/
				//else
				//{Delay(20);}
				DisableAndOutSdPtRevDatRevDattate();
				XBYTE[PageAddr+i]=*PtRevOrSendDat;
				//if(BWriteTrue)
				{Delay(600);}/*必须加入此延时 300*/
				//else
				//{Delay(20);}
				EnableAndEnterSdPtRevDatRevDattate();
				XBYTE[PageAddr+i]=*PtRevOrSendDat++;
			}
		}
		CS256_EN244=1;
		//Delay(999);/*必须加入此延时*/
	}
}
bit ReadDataFromAt28c256(Uint PageAddr,Uint UintAddr,Uchar PageOrByteWrite,Uchar ReadType)
{	Uchar i;
    Uint LastPageAddr;
	bit  BReturn;
	BReturn=0;
	if(!PageOrByteWrite)
	{LastPageAddr=0;}
	if(PageAddr!=LastPageAddr)
	{   LastPageAddr=PageAddr;
		if(!PageOrByteWrite)
		{	if(!ReadType)//非验证操作而只是读出所需的参数.
			{	CS256_EN244=0;
				for(i=0;i<UintAddr;i++)
				{   DOG=~DOG;
					Delay(10);/*必须加入此延时*/
					RevEepPageBytDatBuf[i]=XBYTE[PageAddr+i];
				}
				CS256_EN244=1;
			}
			else//验证操作
			{	switch(ReadType)
				{
				case 1://读出开门时间,报警时间或状态字(1B)以验证写入.
					CS256_EN244=0;
					for(i=0;i<UintAddr;i++)
					{   DOG=~DOG;
						Delay(10);/*必须加入此延时*/
						RevEepPageBytDatBuf[i+1]=XBYTE[PageAddr+i];
					}
					CS256_EN244=1;
					for(i=0;i<1;i++)
					{	DOG=~DOG;
						if(RevEepPageBytDatBuf[i]==RevEepPageBytDatBuf[i+1])
						{
							BReturn=1;
							continue;
						}
						else
						{   BReturn=0;
							break;
						}
					}
					break;
				case 2://读出开门密码,解警密码或管理员操作密码(2B)以验证写入.
					CS256_EN244=0;
					for(i=0;i<UintAddr;i++)
					{   DOG=~DOG;
						Delay(10);/*必须加入此延时*/
						RevEepPageBytDatBuf[i+2]=XBYTE[PageAddr+i];
					}
					CS256_EN244=1;
					for(i=0;i<2;i++)
					{	if(RevEepPageBytDatBuf[i]==RevEepPageBytDatBuf[i+2])
						{
							BReturn=1;
							continue;
						}
						else
						{   BReturn=0;
							break;
						}
					}
					break;
				case 9://读出所有缺省设置(9B)以验证写入.
					CS256_EN244=0;
					for(i=0;i<UintAddr;i++)
					{   DOG=~DOG;
						Delay(10);/*必须加入此延时*/
						RevEepPageBytDatBuf[i+9]=XBYTE[PageAddr+i];
					}
					CS256_EN244=1;
					for(i=0;i<7;i++)
					{	DOG=~DOG;
						if(RevEepPageBytDatBuf[i]==RevEepPageBytDatBuf[i+9])
						{
							BReturn=1;
							continue;
						}
						else
						{   BReturn=0;
							break;
						}
					}
					break;
				}
			}
		}
		else
		{	if(!ReadType)//非验证操作而只是读出所需的参数.
			{	CS256_EN244=0;
				for(i=UintAddr;i<(UintAddr+PageOrByteWrite);i++)
				{	DOG=~DOG;
					Delay(10);/*必须加入此延时*/
					RevEepPageBytDatBuf[i-UintAddr]=XBYTE[PageAddr+i];
				}
				CS256_EN244=1;
			}
			else

⌨️ 快捷键说明

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