本人对WG26为刷卡器传递数据,写了程序但是就是数据传递不上来 求大神看看,不胜感激程序如下:
#include"LCD.H"//用LCD来显示我的卡号
#include<string.h>
#include<intrins.h>
uchar temp; //标志位
uchar buf[27]; //韦根26数据存储位
uchar table[]={0,0,0}; //卡号存储数组
uchar ICNo[]={1,1,1,1,1,0x3};
void exter_init(void );
void transform(void);
void data_check();
void main(void)
{
exter_init();
while(1)
{
data_check();
transform();
string_dat(0xc0,ICNo);
}
}
void data_check(void)//数据验证
{
uchar i,j,even=0,odd=1;
temp=0; //初始化标志位
while(temp==26); //等待读取完26位
even=0; //判断奇偶校验是否正确
for(j=1;j<13;j++)
{
if(buf[j]==1)
even=(~even)&0x01;
}
if(even!=buf[0])
{
temp=0; //清除标志
goto end;
}
odd=1;
for(i=13;i<25;i++)
{
if(buf[i]==1)
odd=(~odd)&0x01;
}
if(odd!=buf[25])
{
temp=0; //清除标志
goto end;
}
temp=0;//清除标志
for(i=0;i<3;i++)
{
for(j=(i*8);j<i*8+8;j++)
{
table[i]=table[i]<<1|buf[j+1];
}
}
end:
temp=0;
}
void transform(void)//用转换为字符
{
//直接转换
ICNo[0]=((table[0]&0xF0)<<4)+'0'; //取wiegand[0]的高4位
ICNo[1]=(table[0]&0x0F)+'0'; //取wiegand[0]的低4位
ICNo[2]=((table[1]&0xF0)<<4)+'0';
ICNo[3]=(table[1]&0x0F)+'0';//
ICNo[4]=((table[2]&0xF0)<<4)+'0';
ICNo[5]=(table[2]&0x0F)+'0';//
}
void exter_init(void )
{
init_1602();
string_dat(0x80,word1);
EX0=1;EX1=1;
IT0=1;IT1=1;
EA=1;
}
void wigenISR0 (void) interrupt 0
{
EX0=0;
buf[temp++]=0; //DATA0=0;
EX0=1;
}
void wigenISR1 (void ) interrupt 1
{
EX1=0;
buf[temp++]=1;//data1=1;
EX1=1;
}
|