📄 rfid.c
字号:
/*
* Copyright (c) 2004,成都港顺科技发展有限公司
* All rights reserved.
*
* 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
* 工程名称:POS-Test.UV2
* 文件名称:Windows.C
* 摘 要:窗体显示
*
* 单 片 机:uPSD3254
* 当前版本:0.4
* 作 者:范小飞
* 完成日期:2004-12-7 14:45
*/
#include "Main.h"
#define BeepOn P47=0,P4&=0xF0
#define BeepOff P4|=0X0F,P47=1
void delay(ulong i)
{
int j;
for(j=0;j<i;j++);
}
void InitiateCommand(uchar *str)
{
uchar temp[3];
temp[0]=0x02;
temp[1]=0x06;
temp[2]=0x00;
RfidWr(0x01,3,temp);
delay(1000);
RfidRd(0x01,8,str);
}
void SelectCommand(uchar i,uchar *str)
{
uchar temp[3];
temp[0]=0x02;
temp[1]=0x0e;
temp[2]=i;
RfidWr(0x01,3,temp);
delay(1000);
RfidRd(0x01,2,str);
}
void CompletionCommand(uchar *str)
{
uchar temp[2];
temp[0]=0x01;
temp[1]=0x0f;
RfidWr(0x01,2,temp);
delay(1000);
RfidRd(0x01,1,str);
}
void RestCommand(uchar *str)
{
uchar temp[2];
temp[0]=0x01;
temp[1]=0x0c;
RfidWr(0x01,2,temp);
delay(1000);
RfidRd(0x01,1,str);
}
void ReadblockCommand(uchar address,uchar *str)
{
uchar temp[3];
temp[0]=0x02;
temp[1]=0x08;
temp[2]=address;
RfidWr(0x01,3,temp);
delay(1000);
RfidRd(0x01,5,str);
}
void WriteblockCommand(uchar address,uchar *str,uchar *ack)
{
xdata uchar temp[7];
uchar k;
temp[0]=0x06;
temp[1]=0x09;
temp[2]=address;
for(k=0;k<4;k++)
{
temp[3+k]=str[k];
}
RfidWr(0x01,7,temp);
delay(1000);
RfidRd(0x01,1,ack);
}
void GetuidCommand(uchar *str)
{
uchar temp[2];
temp[0]=0x01;
temp[1]=0x0b;
RfidWr(0x01,2,temp);
delay(1000);
RfidRd(0x01,9,str);
}
void Pcall16Command(uchar *str)
{
uchar temp[3];
temp[0]=0x02;
temp[1]=0x06;
temp[2]=0x04;
RfidWr(0x01,3,temp);
delay(1000);
RfidRd(0x01,19,str);
}
void SlotmarkerCommand(uchar i,uchar *str)
{
uchar temp[2];
uchar k;
k=i&0xf0;
temp[0]=0x01;
temp[1]=k|0x06;
RfidWr(0x01,2,temp);
delay(1000);
RfidRd(0x01,2,str);
}
uchar RfidWrite(uchar add,uchar *str)
{
uchar temp[10];
uchar temp2[4];
uchar temp3[4];
uchar temp4[5];
uchar temp5[4];
uchar i,j,k;
j=0x70;
k=0;
for(i=0;i<4;i++)temp5[i]=0;
for(i=0;i<5;i++)temp4[i]=0;
RfidWr(0x00,1,&j);
RfidRd(0x00,1,&k);
if(k!=j)
{
LcdDisplay(32,0,"读卡器操作错误",3);
return 0;
}
temp2[1]=0;
while(temp2[1]==0)
{
InitiateCommand(temp2);
if(GetKey()==K_TC)return 8;
}
temp2[1]=0;
while(temp2[1]==0)
{
InitiateCommand(temp2);
if(GetKey()==K_TC)return 8;
}
SelectCommand(temp2[1],temp);
WriteblockCommand(add,str,temp3);
Beep(10000);
RestCommand(temp3);
}
uchar RfidRead(uchar add,uchar *str)
{
uchar temp[10];
uchar temp2[4];
uchar j,k;
j=0x70;
RfidWr(0x00,1,&j);
RfidRd(0x00,1,&k);
if(k!=j)
{
LcdDisplay(32,0,"读卡器操作错误",3);
return 0;
}
temp2[1]=0;
while(temp2[1]==0)
{
InitiateCommand(temp2);
if(GetKey()==K_TC)return 8;;
}
temp2[1]=0;
while(temp2[1]==0)
{
InitiateCommand(temp2);
if(GetKey()==K_TC)return 8;
}
SelectCommand(temp2[1],temp);
ReadblockCommand( add,str);
RestCommand(temp);
return 1;
}
void RfidTest(void)
{
uchar testrd[5];
uchar temp[5];
uchar ty[10];
ulong rfid_adr;
gyt4 rfid_dat;
uchar xdata str[10];
ulong i;
uchar k;
while(1)
{
WindowsSet(3);
strcpy(&WinHint[0][1],"1.RFID卡登陆演示");
strcpy(&WinHint[1][1],"2.RFID卡修改测试");
strcpy(&WinHint[2][1],"3.RFID卡识别测试");
str[0]=K_TC;
str[1]=K_HJ;
str[2]=0;
k=Windows(1,0,str);
if(str[0]==K_TC)return;
switch(k)
{
case 1:
while(1)
{
for(i=0;i<5;i++)
{
testrd[i]=0;
}
LcdDisplay(0,64,"登 陆",3);
LcdDisplay(48,0,"请将RFID卡拿到读卡器范围",0);
i=RfidRead(0x20,testrd);
if(i==8)break;
else if(i==0)
{
return;
}
for(i=0;i<4;i++)
{
rfid_dat.str[i]=testrd[i+1];
}
i=rfid_dat.dat;
k=1;
switch(i)
{
case 1111:
LcdDisplay(32,64,"张三",3);
break;
case 2222:
LcdDisplay(32,64,"李四",3);
break;
case 3333:
LcdDisplay(32,64,"王五",3);
break;
case 4444:
LcdDisplay(32,64,"老六",3);
break;
default:
LcdDisplay(16,0,"你不是本公司员工",3);
LcdDisplay(48,0,"登陆失败",0);
k=0;
break;
}
if(k!=0)LcdDisplay(48,0,"登陆成功",0);
Beep(30000);
break;
}
break;
case 2:
LcdDisplay(0,0,"请输入需要修改卡片的地址",3);
ty[0]=K_HJ;
ty[1]=K_TC;
ty[2]=0;
rfid_adr = GetInt(16,0,0,2,0,ty);//获得键盘输入的值地址
RfidRead(rfid_adr,testrd);
for(i=0;i<4;i++)
{
rfid_dat.str[i]=testrd[i+1];
}
NumToStr(rfid_dat.dat,temp,0);
LcdDisplay(16,64,temp,0);
LcdDisplay(32,0,"输入修改内容:",0);
ty[0]=K_HJ;
ty[1]=K_TC;
ty[2]=0;
rfid_dat.dat = GetInt(48,0,0,4,0,ty);//获得键盘输入的值。
RfidWrite(rfid_adr,rfid_dat.str);
break;
case 3:
while(1)
{
for(i=0;i<5;i++)
{
testrd[i]=0;
}
LcdDisplay(0,16,"RFID卡识别测试",3);
LcdDisplay(48,0,"请将RFID卡拿到读卡器范围",0);
i=RfidRead(0x20,testrd);
if(i==8)
{
break;
}
else if(i==0)
{
return;
}
for(i=0;i<4;i++)
{
rfid_dat.str[i]=testrd[i+1];
}
if(rfid_dat.dat==1234)
{
LcdDisplay(48,16,"测试数据正确",3);
}
else
{
LcdDisplay(48,16,"测试数据错误",3);
}
Beep(30000);
}
break;
default:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -