📄 decode.c
字号:
#include <intrins.h>
#include "reg52.h"
//data_2270为u2270的第二个引脚
extern unsigned char CardNum[4];
void Func_decode(void);
sbit data_2270 = P1 ^ 4;
bit bbrushcard = 0;
uchar data card_buffer[4]; // 4
//==============//调用解码程序,返回有无刷卡的标号及卡号==============
void Func_decode(void)
{
uchar i, j, tempreceive, tempH, tempL, temp_remote[12];
uint temptime;
bit bdata2270;
if (!data_2270) {
TH2 = card_timeH;
TL2 = card_timeL;
TR2 = 1;
while (!data_2270) {
if (TF2) {
TR2 = 0;
TF2 = 0;
return;
}
};//each time is 5mS.
TR2 = 0;
TH2 = card_syn_originH;
TL2 = card_syn_originL;
TR2 = 1;
while (data_2270) {
if (TF2) {
TF2 = 0;
TR2 = 0;
return;
}
}
TR2 = 0;
tempH = TH2;
tempL = TL2;
TF2 = 0;
TH2 = card_delayH;//card_syn_originH;
TL2 = card_delayL;//card_syn_originL;
TR2 = 1;
temptime = tempH * 256 + tempL;
if (temptime < card_1p_down) {
TR2 = 0;
return;
}
i = 0;
//********************************************************
while (1) //wait 8 number 1;
{
while (!TF2);
TR2 = 0;
TF2 = 0;
if (!data_2270) {
return;
}
i++;
TH2 = card_delayH;//delay 400us
TL2 = card_delayL;
while (data_2270) {
};
if (i >= 8) {
break; //有刷卡时
}
TR2 = 1;
}
//*****************************************************************
i = 0;
TR2 = 1;
bdata2270 = 1;
for (i = 0; i < 11; i++) {
tempreceive = 0;
for (j = 0; j < 5; j++) {
tempreceive <<= 1;
while (!TF2);
TR2 = 0;
TF2 = 0;
TH2 = card_code_originH;
TL2 = card_code_originL;
TR2 = 2;
if (!data_2270) {
bdata2270 = 0;
while (!data_2270) {
if (TF2) {
TR2 = 0;
TF2 = 0;
return;
}
}
} else {
bdata2270 = 1;
tempreceive |= 1;
while (data_2270) {
if (TF2) {
TR2 = 0;
TF2 = 0;
return;
}
}
}
TH2 = card_delayH;//delay 400us
TL2 = card_delayL;
TR2 = 1;
}
temp_remote[i] = tempreceive;
}
for (i = 0; i < 10; i++)//row checkout
{
tempreceive = temp_remote[i] >> 1;
switch (tempreceive) {
case 0x00:
bdata2270 = 0; break;
case 0x01:
bdata2270 = 1; break;
case 0x02:
bdata2270 = 1; break;
case 0x03:
bdata2270 = 0; break;
case 0x04:
bdata2270 = 1; break;
case 0x05:
bdata2270 = 0; break;
case 0x06:
bdata2270 = 0; break;
case 0x07:
bdata2270 = 1; break;
case 0x08:
bdata2270 = 1; break;
case 0x09:
bdata2270 = 0; break;
case 0x0A:
bdata2270 = 0; break;
case 0x0B:
bdata2270 = 1; break;
case 0x0C:
bdata2270 = 0; break;
case 0x0D:
bdata2270 = 1; break;
case 0x0E:
bdata2270 = 1; break;
case 0x0F:
bdata2270 = 0; break;
default:
break;
}
if ((bit) (temp_remote[i] & 0x01) != bdata2270) {
return;
}
}
tempH = temp_remote[10];
tempH >>= 1;
for (i = 0; i < 4; i++)//arrange checkout.
{
tempreceive = 0;
bdata2270 = 0;
for (j = 0; j < 10; j++) {
if ((temp_remote[j] >> (i + 1)) & 0x01)
tempreceive++;
}
if ((tempH >> i) & 0x01)
bdata2270 = 1;
if ((bit) (tempreceive % 2) != bdata2270) {
return;
}
}
for (i = 1; i < 5; i++) //ID卡号为4位卡号时
{
temp_remote[2 * i] >>= 1;
temp_remote[2 * i] <<= 4;
temp_remote[2 * i + 1] >>= 1;
card_buffer[i - 1] = temp_remote[2 * i] + temp_remote[2 * i + 1];
}
//刷卡时按键没有用,Key此时可用。
if ((Key[Key_Len-4] == card_buffer[0]) &&
(Key[Key_Len-3] == card_buffer[1]) &&
(Key[Key_Len-2] == card_buffer[2]) &&
(Key[Key_Len-1] == card_buffer[3])) {
bbrushcard = 1; //2006.12.8刷卡抗干扰处理
} else {
Key[Key_Len-4] = card_buffer[0];
Key[Key_Len-3] = card_buffer[1];
Key[Key_Len-2] = card_buffer[2] ;
Key[Key_Len-1] = card_buffer[3] ;
shuakatime=250;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -