RFID综合项目实训 | 基于C#的一卡通管理系统

article/2025/8/21 3:21:32

目录

基于C#的一卡通管理系统

【实验目的】

【实验设备】

【实验内容】

【实验步骤】

实验准备

第一部分 界面布局设计

​第二部分 添加串口通讯函数及高频标签操作功能函数(部分代码)

第五部分 实验运行效果


基于C#的一卡通管理系统

【实验目的】

  1. 熟悉 Visual Studio 的使用
  2. 熟练掌握 C#语言 WinForm 开发
  3. 熟悉 13.56M TypeA 标签卡操作协议

【实验设备】

1、硬件:13.56M 高频 RFID 模块、ISO14443 TypeA 标签卡,miniUSB 线,PC 电脑;

2、软件: PC 机操作系统 Windows(XP、7、10) + Visual Studio 2022开发环境

【实验内容】

在Visual Studio 平台上使用C#语言Winform 开发基于 13.56M TypeA 标签卡的一卡通管理系统。

【实验步骤】

  实验准备

1、在visual Studio 2022中安装和配置C#环境

参考博客:C#学习visual Studio 2022安装与配置详细过程_vs2022怎么配置c#环境-CSDN博客

第一部分 界面布局设计

1、设计界面布局,需要设计一个主界面。通过 Visual Studio 自带的组件完成布局操作。主界面布局参考:(主要包含 Label、TextBox、ComboBox、RadioButton、GroupBox、Button、StatusStrip、ToolStripStatusLabel 组件)

2、各组件属性与事件设置

第二部分 添加串口通讯函数及高频标签操作功能函数(部分代码)

        1、在主界面代码中,添加动态获取电脑上的串口并自动添加到串口设置列表中的函数,代码如下:

private void initComComboBox()
{RegistryKey keyCom =         Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");                 mSerialComboBox.Items.Clear();if (keyCom != null){string[] sSubKeys = keyCom.GetValueNames(); foreach (string sName in sSubKeys){string sValue = (string)keyCom.GetValue(sName); mSerialComboBox.Items.Add(sValue); mSerialComboBox.SelectedIndex = 0;}}
}

        2、然后添加串口操作函数,包括打开串口,关闭串口,串口发送和串口接收,其中串口接收使用线程来完成,使用的非阻塞方式,所以间隔 50 毫秒读取一次串口数据,将串口数据存储到缓冲区 byteRecBuff 内,代码如下:

//打开串口
private void openSerial()
{try{SwitchCOMThread(mSerialComboBox.Text); btnSerialConnect.Enabled = false;         btnSerialDisconnect.Enabled = true;showMsg("串口:连接成功!");}catch (Exception ex){showMsg("串口:" + ex.Message);}
}
//关闭串口
private void closeSerial()
{try{if (mSerialPort.IsOpen){mSerialPort.Close();}//清空缓冲区 iDataIn = 0;iDataOut = 0; btnSerialConnect.Enabled = true; btnSerialDisconnect.Enabled = false;showMsg("串口:断开连接!");}catch (Exception ex){showMsg("串口:" + ex.Message);}
}
//串口数据发送
private bool serialSend(byte[] msg)
{if (mSerialPort.IsOpen){try{mSerialPort.Write(msg, 0, msg.Length); return true;}catch (Exception ex){showMsg("串口:" + ex.Message); return false;}}else{showMsg("串口:请先建立连接!");}return false;
}
//串口数据接收
private void serialReceive()
{if (mSerialPort.IsOpen){try{int i = 0;int iDataLen = mSerialPort.BytesToRead; if (iDataLen > 50) iDataLen = 50;//读取缓冲区的数据到数组mSerialPort.Read(bytesData, 0, iDataLen); if (bLock == false){bLock = true;if (iDataIn + iDataLen <= MaxLen){for (i = 0; i < iDataLen; i++){byteRecBuff[iDataIn + i] = bytesData[i];}iDataIn += iDataLen;}else if (iDataIn + iDataLen == MaxLen){for (i = 0; i < iDataLen; i++){byteRecBuff[iDataIn + i] = bytesData[i];}iDataIn = 0;}else{for (i = iDataIn; i < MaxLen; i++){byteRecBuff[i] = bytesData[i - iDataIn];}for (i = 0; i < iDataLen - MaxLen + iDataIn; i++){byteRecBuff[i] = bytesData[i + MaxLen - iDataIn];}iDataIn = iDataLen - MaxLen + iDataIn;}bLock = false;}}catch (Exception ex){showMsg("串口:" + ex.Message);bLock = false;}
}
//接收数据线程
private void serialThreadReceive()
{while (bThread){serialReceive(); Thread.Sleep(50);}
}
//启动接收线程
private void recvThreadStart()
{Thread newthread = new Thread(new ThreadStart(serialThreadReceive));     newthread.Start();
}
//关闭接收线程
private void recvThreadStop()
{bThread = false;
}

3、再添加从串口缓冲区内将数据读取并初步提取的函数,代码如下:

private void scanData()
{if (bLock == false){bLock = true;int iValidLen, iPacketLen; while (iDataIn != iDataOut){if (byteRecBuff[dataOutAdd(0)] == (byte)0x00 && byteRecBuff[dataOutAdd(1)]== (byte)0x00 && byteRecBuff[dataOutAdd(2)] == (byte)0xFF)//判断包头{if (byteRecBuff[dataOutAdd(3)] == (byte)0x00){iDataOut = dataOutAdd(6); bLock = false;//包含有效数据长度iValidLen = validReceiveLen(); if (iState == 0 && iValidLen < 8){HF1356MReadUid();}return;}else{//包含有效数据长度 iValidLen = validReceiveLen();if (iValidLen < 8){ bLock = false;return;}iPacketLen = byteRecBuff[dataOutAdd(3)] + 7; if (iValidLen < iPacketLen){bLock = false;return;}// 判断数据包是否完整if (iPacketLen > 7 && iPacketLen < 40){//读出一个数据包byte[] Packet = new byte[iPacketLen]; for (int i = 0; i < iPacketLen; i++){Packet[i] = byteRecBuff[dataOutAdd(i)];}handleData(Packet);iDataOut = dataOutAdd(iPacketLen);bLock = false;return;}}}iDataOut = dataOutAdd(1);}bLock = false;
}
//返回数据缓冲区内的有效数据长度 
private int validReceiveLen()
{if (iDataOut < iDataIn){return (iDataIn - iDataOut);}else if (iDataOut > iDataIn){return (MaxLen - iDataOut + iDataIn);}return 0;
}
//返回后面第 iNum 有效数据的位置
private int dataOutAdd(int iNum)
{int ret = 0;if (iDataOut + iNum < MaxLen){ret = iDataOut + iNum;}else if (iDataOut + iNum > MaxLen){ret = iDataOut + iNum - MaxLen;}return ret;
}

第五部分 实验运行效果

1、将实验箱通电,使用 MiniUSB 线连接 PC 机和 13.56M 模块,同时将模块上的拨码开关拨到右边(USB),这样才能保证模块和 PC 能够正常通讯;

2、运行程序“EcardSystem.exe”,程序运行成功后主登录界面,此时暂时无法操作扣费系统也无法操作充值系统,如下图:

3、软件中选择正确的串口号(在设备管理器当中查看 USB 转串口的串口号,如果未出现串口号,需要先安装 CP2102 USB 转串口驱动)并点击连接,此时程序会自动发送唤醒模块的指令,如果唤醒成功,扣费系统和充值系统就可以正常使用了;


http://www.hkcw.cn/article/VSVqporGMc.shtml

相关文章

Java基于SpringBoot的医院挂号系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版

1.题目描述 2.思路 &#xff08;1&#xff09;主函数&#xff0c;存储图结构 &#xff08;2&#xff09;主函数&#xff0c;visit数组表示已访问过的元素 &#xff08;3&#xff09;辅助函数&#xff0c;用递归&#xff08;深搜&#xff09;&#xff0c;遍历以已访问过的元素&…

重温经典算法——插入排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法&#xff0c;其核心思想是将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&…

数字孪生数据监控如何提升汽车零部件工厂产品质量

一、汽车零部件工厂的质量挑战 汽车零部件作为汽车制造的基础&#xff0c;其质量直接关系到整车的性能、可靠性和安全性。在传统的汽车零部件生产过程中&#xff0c;质量问题往往难以在早期阶段被发现和解决&#xff0c;导致生产效率低下、生产成本上升&#xff0c;甚至影响到…

气象局谈端午期间天气情况 南北温差大降水分布不均

气象局谈端午期间天气情况 南北温差大降水分布不均!5月29日,中国气象局举行新闻发布会。国家气候中心副主任贾小龙在会上发布了端午天气预报和6月气候趋势预测及气象服务提示。关于气温,预计端午假日期间(5月31日至6月2日),河北南部、山东北部、河南西部、广西、新疆盆地…

新版《汽车侧面碰撞的乘员保护》国标发布

新版《汽车侧面碰撞的乘员保护》国标发布,“新”在哪里?记者今天(30日)从市场监管总局了解到,市场监管总局、国家标准委发布了新版《汽车侧面碰撞的乘员保护》国家标准,这将全面提高汽车对于驾乘人员的保护。现行的《汽车侧面碰撞的乘员保护》国家标准发布于2006年,目前…

海上石油钻井平台人员安全管控解决方案

一、行业挑战与需求分析 海上钻井平台面临复杂环境风险&#xff08;如易燃易爆、金属干扰、极端气象&#xff09;和人员管理难题&#xff08;如定位模糊、应急响应延迟&#xff09;。传统RFID或蓝牙定位技术存在精度不足&#xff08;1-5米&#xff09;、抗干扰能力差等问题&am…

央视曝光当天岳阳书记市长带队督导 严打违规垂钓

5月29日,中央广播电视总台报道了洞庭湖禁钓区违规钓鱼乱象后,湖南岳阳市委、市政府高度重视。省委常委、市委书记谢卫江和市长李挚迅速部署整改工作,并分别带队前往东洞庭湖和南洞庭湖督导执法,要求各级各部门提高思想认识,举一反三,持续开展十年禁渔执法监管水生生物特别…

AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁​

近年来&#xff0c;人工智能正在改变法律行业的游戏规则。从最初的“工具属性”——帮律师干些重复的杂活儿&#xff0c;到如今逐渐变身为“认知引擎”——能够理解法律逻辑、分析案例&#xff0c;法律AI产品正在迎来一场华丽的转身。这篇文章将带你一探究竟&#xff0c;看看这…

回文数-leetCode-009

回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都相同的整数。例如&#xff0c;121 是回文数&#xff0c;而 -121 和 10 不是。本文将介绍两种解法&#xff1a;字符串转换法和反转一半数字法&#xff0c;并分析它们的复杂度。 解法一…

广东东莞发生小车坠桥事故,5人死亡 事故引发广泛关注

广东东莞发生小车坠桥事故,5人死亡 事故引发广泛关注!近日,广东东莞环莞快速路虎门段发生了一起交通事故,引起了广泛关注。5月29日晚,虎门镇“519”事故工作专班发布了情况通报。责任编辑:0882

高校校长被曝论文涉嫌抄袭 校长职务被免

近日,有网民向媒体反映“烟台科技学院校长硕士论文涉嫌严重抄袭”,引发社会广泛关注。经核查,情况属实。学校董事会高度重视,为严肃学术纪律,维护高校声誉和教育公信力,决定免去马红坤同志烟台科技学院校长职务。感谢社会各界对高等教育学术规范的关注。烟台科技学院将以…

多模态大语言模型arxiv论文略读(九十八)

Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文标题&#xff1a;Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文作者&#xff1a;Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…

Triton推理服务器部署YOLOv8(onnxruntime后端和TensorRT后端)

文章目录 一、Trition推理服务器基础知识1)推理服务器设计概述2)Trition推理服务器quickstart(1)创建模型仓库(Create a model Repository)(2)启动Triton (launching triton)并验证是否正常运行(3)发送推理请求(send a inference request)3)Trition推理服务器架…

端午连休3天高速收费 假期出行需注意

根据国务院办公厅《关于2025年部分节假日安排的通知》,端午节放假时间为5月31日(周六)至6月2日,共3天。此次端午节放假不调休。责任编辑:zx0176

6月北方旱区旱情将有所缓和 降水增多缓解干旱

5月29日,中国气象局举行新闻发布会,会上回顾了5月全国天气气候特征,并发布了“端午”假期天气预报及6月气候趋势预测。5月全国天气气候特征包括:今年首次高温过程影响华北、华中、西北等地;陕甘宁晋豫等地气象干旱阶段性发展;有6次强对流天气过程和4次沙尘天气过程影响我…

Git 全平台安装指南:从 Linux 到 Windows 的详细教程

目录 一、Git 简介 二、Linux 系统安装指南 1、CentOS/RHEL 系统安装 2、Ubuntu/Debian 系统安装 3、Windows 系统安装 四、安装后配置&#xff08;后面会详细讲解&#xff0c;现在了解即可&#xff09; 五、视频教程参考 一、Git 简介 Git 是一个开源的分布式版本控制系…

Spring:从青铜到王者,你的Java修炼手册

一、Spring家族宇宙&#xff1a;原来你是这样的框架&#xff08;青铜段位&#xff09; 1.1 Spring的"前世今生"&#xff1a;从泡面到满汉全席 ​​2002年的泡面哲学​​&#xff1a;Rod Johnson在厨房煮泡面时突然顿悟&#xff1a;"Java开发为什么不能像泡面一…

SpringSecurity

SpringSecurity 一&#xff1a;快速入门&#xff1a; 创建好一个springboot-maven项目&#xff0c;写好启动类&#xff0c;并且编写简单的controller&#xff0c;加上以下依赖&#xff1a; </dependency><dependency><groupId>org.springframework.boot&l…

SQL Server 代理作业故障排查:关键任务失败的根因分析

关键词:SQL Server 代理作业故障,MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb,BizTalk Server,数据库维护,关键任务失败,作业异常,根因分析,死锁,事务日志,磁盘空间,权限问题,SQL Server Agent,故障排查 SQL Server 代理作业(SQL Server Agent Jobs)…