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

📄 main.c

📁 通用曼彻斯特RFID读卡程序
💻 C
字号:
#include<reg52.h>
#include"EM4100.h"
#include"I2C.h"
#include<stdio.h>
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

#define PAGE0 0xa0
#define PAGE1 0xa1
#define PAGE2 0xa2
#define PAGE3 0xa3

#define MASTER_ADDRESS 0x00
#define COUNTER_ADDRESS 0x04

sbit OPEN_LOCK=P1^0;
sbit RESET=P1^1;
sbit LED=P3^6;
sbit BEEP=P3^7;
sbit DebugLED=P1^3;

uchar Master_Buffer[4];
uchar Temp_Buffer1[4];
uchar Temp_Buffer2[4];
uchar Temp_Address;
ulong Temp_SN;

void Convert(ulong SN,uchar * Buffer)
{
	Buffer[0]=(uchar)(SN>>24);
	Buffer[1]=(uchar)(SN>>16);
	Buffer[2]=(uchar)(SN>>8);
	Buffer[3]=(uchar)SN;
}

void Delay(ulong i)
{
	while(i--);
}

uchar Compare(uchar * Buffer1,uchar * Buffer2,uchar Length)
{
	uchar i;
	for(i=0;i<Length;i++)
	{
		if(Buffer1[i]!=Buffer2[i])return 0;
	}
	return 1;
}

uchar Search()
{
	uchar i;
	for(i=0x10;i<Temp_Address;i+=0x04)
	{
		ReceiveStringOneDataAddress(PAGE0,i,Temp_Buffer2,4);
		Delay(200);
		if(Compare(Temp_Buffer1,Temp_Buffer2,4))return 1;
	}
	return 0;
}


void Open_Lock()
{
	OPEN_LOCK=0;
	Delay(1000);
	OPEN_LOCK=1;
}


void Card_Manage()
{
	//ulong i=1000000;
	while(1)
	{
		if(EM4100_READY())
		{
		//	i=1000000;		
			LED=0;
			Temp_SN=Get_SN();
			Convert(Temp_SN,Temp_Buffer1);
			Delay(20000);
			LED=1;
			Get_Enable();
			if(Compare(Master_Buffer,Temp_Buffer1,4))
			{
				Delay(40000);
				return;
			}
			else if(Search());
			else
			{
				SendStringOneDataAddress(PAGE0,Temp_Address,Temp_Buffer1,4);
				Delay(200);
				Temp_Address+=0x04;
				SendStringOneDataAddress(PAGE0,COUNTER_ADDRESS,&Temp_Address,1);
				Delay(200);
			}
		}
	}
}

void SYS_INI()
{
	LED=0;
	BEEP=0;
	Delay(20000);
	LED=1;
	Delay(20000);
	LED=0;
	Delay(20000);
	LED=1;
	BEEP=1;
	OPEN_LOCK=1;
	RESET=1;
	EM4100_INI();
	Get_Enable();
/*	ReceiveStringOneDataAddress(PAGE0,MASTER_ADDRESS,Master_Buffer,4);	
	Delay(200);
	ReceiveStringOneDataAddress(PAGE0,COUNTER_ADDRESS,&Temp_Address,1);	
	if(RESET&&(Master_Buffer[0]!=0xff)&&(Temp_Address!=0xff));
	else
	{
		Master_Buffer[0]=0xff;
		SendStringOneDataAddress(PAGE0,MASTER_ADDRESS,Master_Buffer,4);
		while(EM4100_READY()==0);
		LED=0;
		Temp_SN=Get_SN();
		Convert(Temp_SN,Master_Buffer);
		Delay(20000);
		LED=1;	
		Get_Enable();
		SendStringOneDataAddress(PAGE0,MASTER_ADDRESS,Master_Buffer,4);
		Temp_Address=0x10;
		Delay(200);
		SendStringOneDataAddress(PAGE0,COUNTER_ADDRESS,&Temp_Address,1);
	}
  */
}

void COM_INI()
{
	PCON=0x80;
	TMOD=0x21;
	SCON=0x50;
	TL1=0xff;
	TH1=0xff;
	TR1=1;
	TI=1;
	EA=1;
}

void main()
{
	SYS_INI();
	COM_INI();
	while(1)
	{
		if(EM4100_READY())
		{
			LED=0;
			BEEP=0;
			Temp_SN=Get_SN();
			//Convert(Temp_SN,Temp_Buffer1);
			Delay(20000);
			LED=1;
			BEEP=1;
			
			printf("\n卡号:%ld",Temp_SN); 
			Get_Enable();
			/*if(Compare(Master_Buffer,Temp_Buffer1,4))
			{
				Delay(40000);
				if(EM4100_READY())
				{
					LED=0;
					Temp_SN=Get_SN();
					Convert(Temp_SN,Temp_Buffer1);
					Delay(80000);
					LED=1;
					Get_Enable();
					if(Compare(Master_Buffer,Temp_Buffer1,4))
					{
						DebugLED=0;
						Delay(40000);
						Card_Manage();
						DebugLED=1;
					}
					else if(Search())Open_Lock();
				}
				else Open_Lock();
			}
			else
			{
				if(Search())Open_Lock();
			}	 
			  */
		}
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -