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