----------------------------------------------------------------------------------------

源码下载地址:

http://download.csdn.net/download/qq78442761/9971770

----------------------------------------------------------------------------------------


一开始写了一个控制台的,如下图所示:


核心代码如下:

#ifdef _msc_ver
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"maincrtstartup\"" )
#endif

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <windows.h>
#include "Serial.h"


char dataRecv[512] = { '\0' };
AfSerial com3;
char IDChar[128] = { '/0' };
char DataChar[128] = { '/0' };

void SaveData()	//保存文件
{
	FILE *fp = fopen("RFID_R", "w");
	for (int i = 0; i < strlen(IDChar); i++)
	{  
		fprintf(fp, "%c", IDChar[i]);
	}
	fprintf(fp, "\n");
	for (int i = 0; i < strlen(DataChar); i++)
	{
		fprintf(fp, "%c", DataChar[i]);
	}
	fclose(fp);
}

void SaveData2()	//保存文件
{
	//FILE *fp = fopen("./Data/RFID_R", "w");
	//for (int i = 0; i < strlen(IDChar); i++)
	//{
	//	fprintf(fp, "%c", IDChar[i]);
	//}
	//fclose(fp);
	char temp4[5];
	int j = 0;
	for (int i = strlen(IDChar)-1; j<4; i--,j++)
	{
		temp4[3-j] = IDChar[i];		//最后一位和最后一位对应
	}
	temp4[4] = '\0';
	printf_s("\n%s", temp4);

	FILE *fp = fopen("./Data/RFID_R", "w");
	for (int i = 0; i < strlen(temp4); i++)
	{
		fprintf(fp, "%c", temp4[i]);
	}
	fclose(fp);

}

void GetData()//得到数据
{
	int k = 0;	//冒号数量
	int j = 0;
	for (int i = 120; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
			k++;

		if (k == 2)
		{
			DataChar[j] = dataRecv[i];
			printf_s("%c", dataRecv[i]);
			j++;
		}
	}
}
void GetID()//得到ID
{
	int k = 0;
	//得到第一个冒号后的数字:
	for (int i = 0; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
		{
			for (int j = i; j < strlen(dataRecv) && j < 120; j++)	//提取ID
			{
				if (dataRecv[j] >= 48 && dataRecv[j] <= 57)
				{
					IDChar[k] = dataRecv[j];
					printf_s("%c", dataRecv[j]);
					k++;
				}
			}
		}
	}
}

int main()
{
	com3.Open("COM3", 9600, 'N', 8, 1);
	while (1)
	{
		if (com3.Recv(dataRecv, 512) != -1)
		{
			printf_s("%s\n", dataRecv);

			GetID();
			GetData();

			printf_s("\n%s", IDChar);
			//printf_s("\n%s", DataChar);

			//SaveData();
			system("pause");
			SaveData2();
			return 0;
		}
	}
	return 0;
}


随和做成了一个WIn32项目,就一个消息框,流程图如下所示:


如下所示:

注意:这里只有关键代码,本程序源码在文章开头有提供下载:

#define  _CRT_SECURE_NO_WARNINGS
#include <Windows.h>  
#include <stdio.h>
#include <windows.h>
#include "Serial.h"

char dataRecv[4096] = { '/0' };
AfSerial com3;
char IDChar[128] = { '/0' };
char DataChar[128] = { '/0' };

void SaveData()	//保存文件
{
	FILE *fp = fopen("RFID_R", "w");
	for (int i = 0; i < strlen(IDChar); i++)
	{
		fprintf(fp, "%c", IDChar[i]);
	}
	fprintf(fp, "\n");
	for (int i = 0; i < strlen(DataChar); i++)
	{
		fprintf(fp, "%c", DataChar[i]);
	}
	fclose(fp);
}

void SaveData2()	//保存文件
{
	//FILE *fp = fopen("./Data/RFID_R", "w");
	//for (int i = 0; i < strlen(IDChar); i++)
	//{
	//	fprintf(fp, "%c", IDChar[i]);
	//}
	//fclose(fp);
	char temp4[5];
	int j = 0;
	for (int i = strlen(IDChar) - 1; j < 4; i--, j++)
	{
		temp4[3 - j] = IDChar[i];		//最后一位和最后一位对应
	}
	temp4[4] = '\0';
	printf_s("\n%s", temp4);

	FILE *fp = fopen("./Data/RFID_R", "w");
	for (int i = 0; i < strlen(temp4); i++)
	{
		fprintf(fp, "%c", temp4[i]);
	}
	fclose(fp);

}

void GetData()//得到数据
{
	int k = 0;	//冒号数量
	int j = 0;
	for (int i = 120; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
			k++;

		if (k == 2)
		{
			DataChar[j] = dataRecv[i];
			printf_s("%c", dataRecv[i]);
			j++;
		}
	}
}
void GetID()//得到ID
{
	int k = 0;
	//得到第一个冒号后的数字:
	for (int i = 0; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
		{
			for (int j = i; j < strlen(dataRecv) && j < 120; j++)	//提取ID
			{
				if (dataRecv[j] >= 48 && dataRecv[j] <= 57)
				{
					IDChar[k] = dataRecv[j];
					printf_s("%c", dataRecv[j]);
					k++;
				}
			}
		}
	}
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	if (com3.Open("COM4", 9600, 'N', 8, 1) == 0)
	{
		while (1)
		{
			if (com3.Recv(dataRecv, 4096) != -1)
			{
				printf_s("%s\n", dataRecv);

				GetID();
				GetData();

				printf_s("\n%s", IDChar);
				//printf_s("\n%s", DataChar);

				//SaveData();
				SaveData2();

				com3.Close();
				MessageBox(NULL, TEXT("卡读取中"), TEXT("com4"), MB_OK);
				break;
			}
		}

	}
	return 0;
}

他会把读取到的数据存储在Data文件夹里面,如下图所示:



这里,只把卡号的后六位提取了出来,并没有对卡数据进行写入!



上一篇博文:

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

http://blog.csdn.net/qq78442761/article/details/77916313


下一篇博文:

大四课程设计之基于RFID技术的考勤管理系统(三)数据库设计

http://blog.csdn.net/qq78442761/article/details/77951377

Logo

快速构建 Web 应用程序

更多推荐