3

RFID——充值消费系统

 2 years ago
source link: https://blog.csdn.net/weixin_44935259/article/details/111392684
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.



       射频识别(RFID)是 Radio Frequency Identification 的缩写。
       其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID 的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。


提示:以下是本篇文章正文内容,下面案例可供参考

一、编译环境

       本系统基于VC++6.0版本,如果没有安装此软件的读者,可以通过百度网盘下载该软件。
       链接:https://pan.baidu.com/s/1_pUq7swULst7plceOAQpSA
       提取码:l0x5

二、实现充值消费系统

1.创建工程

        打开软件->文件->新建,可看到下面的界面,依次按照提示操作即可完成创建工程!!!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.添加mwf32相关API文档

(1)将API文件夹下的三个文件mwrf32.*复制到你所创建的工程的文件夹中。

在这里插入图片描述
   相关文件已放入整个系统工程中!!!

(2)添加头文件

在这里插入图片描述
(3)工程->设置->连接->对象/库模块
在这里插入图片描述

3.常用函数介绍

    函数                                              说明
rf_usbinit()                         初始化USB通讯
rf_get_status()                        获取版本号
rf_load_key()                 向读写器下载授权密码
rf_beep()                                 蜂鸣器鸣叫
rf_card()                                        寻卡
rf_authentication()                         认证
rf_write()                                        写卡
rf_read()                                         读卡
rf_halt()                                     终止卡操作
rf_exit()                                       关闭串口

4.搭建界面

   通过控件选择静态文本,编辑框,按钮,列表框,搭建如下界面

在这里插入图片描述

5.设置变量

       右键->建立类向导->Member variables->Add Variable,选择变量名及变量类型

在这里插入图片描述

6.编写程序

       双击读卡,初始化信息,充值,消费即可直接编写程序。

(1)【定义全局变量】相应代码如下:

	HANDLE icdev;
	int st;
	int sector=1;

	CString str1;	//余额
	CString str2;	//充值金额
	CString str3;	//消费金额

(2)【读卡】相应代码如下:

	icdev=rf_usbinit();
	if (icdev>0) {list.AddString("设备连接成功!");}
	else {list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {list.AddString("认证失败!");}

	//UpdateData();

	unsigned char databuff[17];
	ZeroMemory(databuff,17); 
	st=rf_read(icdev,sector*4,databuff);
	if(st==0) {list.AddString((char*)databuff);xingming=databuff;}

	st=rf_read(icdev,sector*4+1,databuff);
	if(st==0) {list.AddString((char*)databuff);xuehao=databuff;}

	st=rf_read(icdev,sector*4+2,databuff);
	str1=databuff;	//类型转换
	if(st==0) {list.AddString((char*)databuff);yue=atof(str1);}

	UpdateData(false);

	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	if(st==0) {list.AddString("断开连接!");}
}

(3)【初始化信息】相应代码如下:

	icdev=rf_usbinit();
	if (icdev>0) {list.AddString("设备连接成功!");}
	else {list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) 
	{
		list.AddString("认证失败!");
	}
	
	else
	{
		UpdateData();
		str1.Format(_T("%lf"),yue);	//余额

		char* data1=xingming.GetBuffer(xingming.GetLength());	//姓名
		char* data2=xuehao.GetBuffer(xuehao.GetLength());	//学号
		char* data3=str1.GetBuffer(str1.GetLength());	//余额

		st=rf_write(icdev,sector*4,(unsigned char*)data1);
		if(st==0) {list.AddString("写姓名成功!");}
		else {list.AddString("写姓名失败!");}

		st=rf_write(icdev,sector*4+1,(unsigned char*)data2);
		if(st==0) {list.AddString("写学号成功!");}
		else {list.AddString("写学号失败!");}

		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {list.AddString("写余额成功!");}
		else {list.AddString("写余额失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4,databuff);
		if(st==0) {list.AddString((char*)databuff);}
		st=rf_read(icdev,sector*4+1,databuff);
		if(st==0) {list.AddString((char*)databuff);}
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {list.AddString((char*)databuff);}

		UpdateData(false);
	}

	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	if(st==0) {list.AddString("断开连接!");}

(4)【充值】相应代码如下:

	icdev=rf_usbinit();
	if (icdev>0) {list.AddString("设备连接成功!");}
	else {list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {list.AddString("认证失败!");}

	else	//读卡才能进行操作
	{
		UpdateData();
		yue=yue+chongzhi;	//充值
		chongzhi=0;	//充值置零
		str1.Format(_T("%lf"),yue);	//余额
		str2.Format(_T("%lf"),chongzhi);  //充值置零

		char* data3=str1.GetBuffer(str1.GetLength());	//余额
		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {list.AddString("充值成功!");}
		else {list.AddString("充值失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {list.AddString((char*)databuff);}

		UpdateData(false);
    }
	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	if(st==0) {list.AddString("断开连接!");}

(5)【消费】相应代码如下:

	icdev=rf_usbinit();
	if (icdev>0) {list.AddString("设备连接成功!");}
	else {list.AddString("连接失败!");}

	unsigned long snr;
	st=rf_card(icdev,1,&snr);
	if(st!=0) {list.AddString("请放置卡片!!!");}

    st=rf_authentication(icdev,0,sector);
	if(st!=0) {list.AddString("认证失败!");}

	else	//读卡才能操作
	{
		UpdateData();
		yue=yue-xiaofei;	//消费
		xiaofei=0;	//消费置零
		str1.Format(_T("%lf"),yue);	//消费
		str3.Format(_T("%lf"),xiaofei);	//消费置零

		char* data3=str1.GetBuffer(str1.GetLength());	//余额
		st=rf_write(icdev,sector*4+2,(unsigned char*)data3);
		if(st==0) {list.AddString("消费成功!");}
		else {list.AddString("消费失败!");}

		unsigned char databuff[17];
		ZeroMemory(databuff,17);
		st=rf_read(icdev,sector*4+2,databuff);
		if(st==0) {list.AddString((char*)databuff);}

		UpdateData(false);
	}
	st=rf_halt(icdev);
	st=rf_exit(icdev); 
	if(st==0) {list.AddString("断开连接!");}

本系统工程文件,大家可以通过百度网盘进行下载。
       链接:https://pan.baidu.com/s/17jQPCLfoFZ-8Vo9MxAtGsg
       提取码:akvh


       首先,作为一名大三的学生,真的感觉大三好累,仿佛有干不完的事情。哈哈,真该好好吐槽一下!!!此充值消费系统作为我们RFID课程的一个小测试,感觉还是挺有意义的,让我们了解到了我们生活中的所谓“刷卡”的基本原理,真的是让我这个井底之蛙涨了见识。马上就要毕业了,就写了这篇博客来纪念即将逝去的RFID课程。也许真的是永别了~bye

在这里插入图片描述

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK