📄 read_card.c
字号:
uchar Search_Card(void)
{uint i,n=0;
tx0[0]=0x3c;
tx0[1]=0x04;
tx0[2]=0x01;
tx0[3]=0x70;
tx0[4]=0x00;
tx0[5]=0x00;
tx0[6]=0x49;
tx0[7]=0x0d;
tx0_num=8;
SBUF0=*p_tx0++;
while(tx0_over!=1);
rx0_num=0;
while(n<65535)
{if((rx0[1]==0x05)&&(rx0_num>=9)) break;
if((rx0[1]==0x01)&&(rx0_num>=5)) break;
n++;
}
Delay_10ms();
rx0_num=0;
if(rx0[1]==0x05)
{for(i=0;i<4;i++)
newCardNo[i]=rx0[i+2];
return 1;
}
else
return 0;
}
//=====================================密码验证
uchar Psd_Verify(uchar tmpKeyType,uchar tmpBlockNo,uchar *tmpCardNo)
{uchar i;
uint n=0;
tx0[0]=0x3c;
tx0[1]=0x08;
tx0[2]=0x01;
tx0[3]=0x6a;
tx0[4]=tmpKeyType;
tx0[5]=tmpBlockNo;
for(i=0;i<4;i++)
tx0[6+i]=tmpCardNo[i];
tx0[10]=0;
for(i=0;i<10;i++)
tx0[10]^=tx0[i];
tx0[11]=0x0d;
tx0_num=12;
SBUF0=*p_tx0++;
while(tx0_over!=1);
rx0_num=0;
while(n<65535)
{if((rx0[1]==0x02)&&(rx0_num>=6)) break;
if((rx0[1]==0x01)&&(rx0_num>=5)) break;
n++;
}
Delay_10ms();
rx0_num=0;
if(rx0[1]==0x02)
return 1;
else
return 0;
}
//=====================================读卡命令
uchar Read_Card(uchar BlockNo)
{uchar i;
uint n=0;
tx0[0]=0x3c;
tx0[1]=0x04;
tx0[2]=0x01;
tx0[3]=0x66;
tx0[4]=BlockNo;
tx0[5]=0x00;
tx0[6]=0;
for(i=0;i<6;i++)
tx0[6]^=tx0[i];
tx0[7]=0x0d;
tx0_num=8;
SBUF0=*p_tx0++;
while(tx0_over!=1);
rx0_num=0;
while(n<65535)
{if((rx0[1]==0x12)&&(rx0_num>=21)) break;
if((rx0[1]==0x01)&&(rx0_num>=5)) break;
n++;
}
Delay_10ms();
rx0_num=0;
if (rx0[1]==0x12)
{*p_CardBufIn++ = (((uint)rx0[4]<<8)&0xff00)|((uint)rx0[3]&0x00ff);
CardCountRead++;
if(p_CardBufIn==p_CardBufEnd)
p_CardBufIn=p_CardBufBegin;
return 1;
}
else
return 0;
}
//=====================================关闭卡片
void Close_Card(void)
{uint n=0;
tx0[0]=0x3c;
tx0[1]=0x04;
tx0[2]=0x01;
tx0[3]=0x68;
tx0[4]=0x00;
tx0[5]=0x00;
tx0[6]=0x51;
tx0[7]=0x0d;
tx0_num=8;
SBUF0=*p_tx0++;
while(tx0_over!=1);
rx0_num=0;
while(n<65535)
{if((rx0[1]==0x02)&&(rx0_num>=6)) break;
if((rx0[1]==0x01)&&(rx0_num>=5)) break;
n++;
}
Delay_10ms();
rx0_num=0;
}
//=====================================蜂鸣器响一声
void Buzz_One(uchar Time)
{uint n;
tx0[0]=0x3c;
tx0[1]=0x03;
tx0[2]=0x01;
tx0[3]=0x6b;
tx0[4]=Time;
tx0[5]=0x65;
tx0[6]=0x0d;
tx0_num=7;
SBUF0=*p_tx0++;
while(tx0_over!=1);
rx0_num=0;
while(n<65535)
{if((rx0[1]==0x02)&&(rx0_num>=6)) break;
if((rx0[1]==0x01)&&(rx0_num>=5)) break;
n++;
}
Delay_10ms();
rx0_num=0;
}
//===============================================
//=====================================
void config(void)
{
//-------------------------------------
// 系统振荡配置
//-------------------------------------
uchar n = 0;
WDTCN = 0xDE; WDTCN = 0xAD;//-----------------
OSCXCN = 0x67;
for (;n < 255;n++); while ((OSCXCN & 0x80) == 0 );
OSCICN = 0x88;
//-----------------
RSTSRC = 0x00;
//-------------------------------------
// 输入输出端口配置
//-------------------------------------
P0MDOUT = 0x11;
P1MDOUT = 0x00;
P2MDOUT = 0x00;
P3MDOUT = 0x00;
P74OUT = 0x00;
P1MDIN = 0xFF;
P0 = 0x00;
P1 = 0x00;
P2 = 0x00;
P3 = 0x00;
P4 = 0x00;
P5 = 0x00;
P6 = 0x00;
P7 = 0x00;
EMI0CF = 0x00;
XBR0=0x15;
XBR1=0x00;
XBR2=0x44;
//-------------------------------------
// 模拟资源配置
//-------------------------------------
REF0CN = 0x02;
//-----------------
AMX0CF = 0x00;
AMX0SL = 0x00;
ADC0CF = 0xF8; //?????????
ADC0CN = 0x84;
ADC0LTH = 0x00;
ADC0LTL = 0x00;
ADC0GTH = 0xFF;
ADC0GTL = 0xFF;
AMX1SL = 0x00;
ADC1CF = 0xF8;
ADC1CN = 0x00;
//-----------------
DAC0CN = 0x00;
DAC0L = 0x00;
DAC0H = 0x00;
DAC1CN = 0x00;
DAC1L = 0x00;
DAC1H = 0x00;
//-----------------
CPT0CN = 0x00;
CPT1CN = 0x00;
//-------------------------------------
// 串行通讯配置
//-------------------------------------
SPI0CN = 0x00;
SPI0CFG = 0x00;
SPI0CKR = 0x00;
//-----------------
SCON0 = 0x50;
SCON0 &= 0xFC; SADEN0 = 0x00;
PCON = 0x00;
SCON1 = 0x50;
SCON1 &= 0xFC; SADEN1 = 0x00;
//-----------------
SMB0CN = 0x42;
SMB0ADR = 0x00;
SMB0CR = 0xe5;
//-------------------------------------
// 定时计数捕捉配置
//-------------------------------------
CKCON = 0x00;
TCON = 0x00;
TMOD = 0x21;
TH0 = 0xf1; //2ms
TL0 = 0x9a;
TH1 = 0x00;
TL1 = 0x00;
T2CON = 0x34;
RCAP2H = 0xff;
RCAP2L = 0xb8;
TH2 = 0x00;
TL2 = 0x00;
TMR3CN = 0x00;
TMR3RLL = 0x00;
TMR3RLH = 0xF4;
TMR3H = 0xF4;
TMR3L = 0x00;
T4CON = 0x34;
RCAP4H = 0xff;
RCAP4L = 0xB8;
TH4 = 0x00;
TL4 = 0x00;
//-----------------
PCA0MD = 0x00;
PCA0CN = 0x00;
PCA0H = 0x00;
PCA0L = 0x00;
PCA0CPM0 = 0x21;
PCA0CPL0 = 0x00;
PCA0CPH0 = 0x00;
PCA0CPM1 = 0x21;
PCA0CPL1 = 0x00;
PCA0CPH1 = 0x00;
PCA0CPM2 = 0x00;
PCA0CPL2 = 0x00;
PCA0CPH2 = 0x00;
PCA0CPM3 = 0x00;
PCA0CPL3 = 0x00;
PCA0CPH3 = 0x00;
PCA0CPM4 = 0x00;
PCA0CPL4 = 0x00;
PCA0CPH4 = 0x00;
// 中断配置
//-------------------------------------
IE = 0x92;
IP = 0x00;
EIE1 = 0x00;
EIE2 = 0x40;
EIP1 = 0x00;
EIP2 = 0x00;
}
//-------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -