RFID——充值消费系统


前言

       射频识别(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("%.2f"),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();

	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("%.2f"),yue);	//余额
		str2.Format(_T("%.2f"),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();
	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("%.2f"),yue);	//消费
		str3.Format(_T("%.2f"),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/1de7lseleJFXQEJ2XosY0Pg
       提取码:4na5


总结

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

猜你喜欢

转载自blog.csdn.net/weixin_44935259/article/details/111392684