⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfid.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 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 + -