基于RFID的学生一卡通管理系统的设计与实现

news/2023/9/27 7:25:51

目 录
摘 要 I
ABSTRACT II
第1章 绪论 1
1.1选题背景及意义 1
1.2国内外研究现状 1
1.3研究主要内容 2
第2章 系统设计 4
2.1需求分析 4
2.1.1可行性分析 4
2.1.2功能需求概述 5
2.1.3 UML用例图 5
2.2学生一卡通的基本组成结构 7
2.2.1天线 7
2.2.2阅读器 7
2.2.3电子标签 11
2.3硬件模板设计 15
2.3.1能量传送 15
2.3.2数据传送 15
2.4软件模块设计 17
2.4.1功能模块设计 17
2.4.2程序流程图设计 18
2.4.3数据库(E-R)图设计 18
第4章 系统实现 20
5.1硬件电路设计实现 20
5.1.1考勤管理 20
5.1.2开锁装置 24
5.1.3拿取快递 26
5.2软件程序设计实现 27
5.2.1考勤管理 27
5.2.2开锁装置 31
5.2.3拿取快递 36
第6章 系统测试 37
6.1程序调试 37
6.2程序的测试 37
6.2.1 测试的重要性及目的 37
6.2.2 测试的步骤 39
6.2.3 测试的主要内容 39
总结与展望 41
致 谢 42
参考文献 42
1.3研究主要内容
RFID技术应用到学生一卡通系统中对于校园内部人员和财物的管理作用重大、意义深刻。传统的学生一卡通往往只有简单的食堂、超市刷卡消费、宿舍开锁自行车管理和图书馆借阅书籍等功能,“一卡通”的功能并没有真正意义上的实现。本文在原有学生一卡通系统的基础上加入考勤管理、自行车开锁装置和拿取快递等功能,真正意义上实现一卡在手校内万事不愁的情形。
(1)考勤管理
人员考勤一直以来都是比较繁琐的事务,传统的人员考勤主要是靠记录人员点到或自行签到的方式。在出席人员较多的场合,点到会占用大量时间,而自行签到又会出现代签的问题。在需要进行考勤的场合安装阅读器,通过阅读器识别出席人员携带的标签(一卡通)完成考勤工作。考勤管理可以不单单仅在学生上课出勤管理上应用,也可以使用到教职工会议出勤、行政人员和后勤人员上班出勤、教师上课出勤等方面。在学生上课出勤管理上还可以与宿舍开锁自行车管理相结合,确认未到课学生是否有在宿舍。
(2)开锁装置
在校园里,RFID的校园学生卡自行车开锁装置, 开发出一种利用学生一卡通就能打开自行车锁的新 方式,这样在校园里既方便学生开锁,收费也更简便。 这也是RFID频射卡技术在控制自行车锁方面的一个 应用,达到在校园局部刷学生卡就能快速方便开启自 行车锁的装置。其原理是RC-522 RFID频射卡模块作 为识别装置,用STM32 F103单片机设置为主控制器, 并通过该控制器来完成对舵机转动的控制,进而达到对自行车锁的控制。有了共享单车的新模式,在校园 内会得到更好的普及,尤其现在很多大学校园很大,更多的学生会选择共享单车这一新的出行方式。科技 给我们带来了新的生活方式,在校园里大面积地推广 共享单车,需要和学校内部管理接轨,而使用校园卡 开锁是一种新的管理模式,这种方式比手机扫码开锁的传统方式效率更高,真正做到了随开随用。而且在 校园使用一卡通还能监控学生的一些用车方式等,学生卡开锁也能控制学生将共享单车骑出校外,与此同 时,通过Global Posi-tioning System(全球定位系统)等 方式定位,可有效监控共享单车的运行轨迹,方便运 营企业对大数据进行处理,进而降低运行成本。总之, 本文转载自http://www.biyezuopin.vip/onews.asp?id=14204利用学生一卡通打开自行车锁的新方式,对企业来说远远胜于普通的手机扫码开锁,充分利用大学校园的封闭性,减少企业的维护成本,方便学生的使用,这就是科技给我们生活带来的便利。
(3)拿取快递
在未来的10年内,在5G时代RFID将用于各行各 业,RFID技术将用于智能货架。考虑到大学生经常上网购物,我们可以将RFID技术用于各种物流自提点的货架,通过给包裹添加电子标签,在货物自提点设置自助提货机,并将货物信息与本人学生一卡通关联,并且搭建一个数据库用于实时获取各物流公司的货物物流信息,将物流信息与学生信息相匹配。在自助提货机上添加读写器用于读取电子标签内部的关于包裹的详细信息。学生找到货物后无须在前台扫描二位码,填写手机号签名,只需使用学生一卡通刷卡,读卡器识别货物信息后,即可取货成功。为在校师生的生活提供了便捷的服务。

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include <intrins.h>
#include "delay.h"
#include "rc522.h"
#include "1602.h"sbit key = P1^1;  //接口定义
sbit buzzer  = P1^0;  //接口定义/*********/
unsigned char code zsID[4]={0xCB,0x3E,0x63,0x0A};	//张三卡号
unsigned char code lsID[4]={0xE2,0xD8,0x61,0x19};	//李四卡号
unsigned char code weID[4]={0x2B,0x17,0xE9,0xA9};	//王二卡号
/*********/unsigned char UID[5];	//卡号
unsigned char Temp[4] ; //暂存数组  unsigned long time_20ms=0;   //定时计数
char dis0[16];		//液晶显示数组
char dis1[16];
unsigned char zsFlag =' ';//张三 是否到标志
unsigned char lsFlag =' ';//李四 是否到标志
unsigned char weFlag =' ';//王二 是否到标志
unsigned char disFlag =0;	//显示标志
unsigned char manNum=0;			 //人数
bit buzFlag = 0; //蜂鸣器报警标志
void Init_Timer0(void);		 //函数声明
void UART_Init(void);
void uartSendStr(unsigned char *s,unsigned char length);
void uartSendByte(unsigned char dat);void main (void)
{     unsigned char disPlace=0;	//显示位置Init_Timer0();        //定时器0初始化UART_Init();	  //串口初始化buzzer = 0; //报警	 开LCD_Init();           //初始化液晶DelayMs(100);          //延时有助于稳定LCD_Clear(); buzzer = 0; //报警	 关PcdReset();//复位RC522PcdAntennaOn();//开启天线发射 sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印数据	LCD_Write_String(0,0,dis0);//显示第二行while (1)         //主循环{if(PcdRequest(0x52,Temp)==MI_OK)  //检测到卡号{if(PcdAnticoll(UID)==MI_OK) //读取卡号成功{ uartSendByte(0x00);	//串口发送卡号uartSendStr(UID,4);uartSendByte(0x00);if((UID[0]==zsID[0])&&(UID[1]==zsID[1]))//张三 到{if(zsFlag != 0xff)	//第一次刷到该卡{							zsFlag =0xff;	   //显示 到time_20ms = 8;buzzer = 0;  	//蜂鸣器短暂鸣叫}}else if((UID[0]==lsID[0])&&(UID[1]==lsID[1]))//李四 到{if(lsFlag != 0xff)	  //第一次刷到该卡{lsFlag =0xff;	  //显示 到time_20ms = 8;buzzer = 0; 	//蜂鸣器短暂鸣叫}}else if((UID[0]==weID[0])&&(UID[1]==weID[1]))//李四 到{if(weFlag != 0xff)	 //第一次刷到该卡{weFlag =0xff;	  //显示 到time_20ms = 8;buzzer = 0;	//蜂鸣器短暂鸣叫}}}}if(disFlag  == 1){sprintf(dis0,"ZS:%c LS:%c WE:%c ",zsFlag,lsFlag,weFlag);//打印数据	LCD_Write_String(0,0,dis0);//显示第二行manNum=0;			//清空总人数if(zsFlag==0xff)		//张三到 +1{manNum=manNum+1;}if(lsFlag==0xff){manNum=manNum+1;}	//李四到 +1if(weFlag==0xff){manNum=manNum+1;}	//王二到 +1	sprintf(dis1,"ZongRen:%d  ",(int)manNum);//打印数据	LCD_Write_String(0,1,dis1);//显示第二行								disFlag =0;		}if(key == 0) //按键按下{if(manNum != 3)	  //人数不够{buzFlag = 1; //蜂鸣器报警标志}		} }
}void Init_Timer0(void)
{
//**All notes can be deleted and modified**//TMOD |= 0x10;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;EA=1;            //总中断打开ET0=1;           //定时器中断打开TR0=1;           //定时器开关打开
}void Timer0_isr(void) interrupt 1 
{TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;	time_20ms++;if(time_20ms%10==0)	   //定时显示{disFlag = 1 ;if(buzFlag == 1) buzzer =!buzzer;//蜂鸣器报警else buzzer = 1;//不报警}
}void UART_Init(void)
{//**All notes can be deleted and modified**//SCON  = 0x05;			        // SCON: 模式 1, 8-bit UART, 使能接收  TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1;  TR1   = 1;                  // TR1:  timer 1 打开                         EA    = 1;                  //打开总中断ES    = 1;                  //打开串口中断
}void uartSendByte(unsigned char dat)
{unsigned char time_out;time_out=0x00;SBUF = dat;			  //将数据放入SBUF中while((!TI)&&(time_out<100))  //检测是否发送出去{time_out++;DelayUs2x(10);}	//未发送出去 进行短暂延时TI = 0;						//清除ti标志
}void uartSendStr(unsigned char *s,unsigned char length)
{unsigned char NUM;NUM=0x00;while(NUM<length)	//发送长度对比{uartSendByte(*s);  //放松单字节数据s++;		  //指针++NUM++;		  //下一个++}
}void UART_SER (void) interrupt 4 	//串行中断服务程序
{if(RI)                        //判断是接收中断产生{RI=0;                      //标志位清零}if(TI)  //如果是发送标志位,清零TI=0;
} 

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


https://dhexx.cn/news/show-25388.html

相关文章

自动遍历测试之Monkey工具

某些移动APP业务线多&#xff0c;流程复杂&#xff0c;且产品迭代速度快&#xff0c;在回归测试中涉及到大量用例&#xff0c;工作量大&#xff0c;解决这个问题的一个可行方法是使用自动遍历测试&#xff0c;可以降低用例维护成本&#xff0c;尽可能的自动化覆盖回归业务。 目…

平昌县网上书城系统设计与实现

目 录 第一章 概述 1 1.1 开发背景 1 1.2 开发环境 2 1.3 开发工具 2 1.3.1 MyEclipse 2 1.3.2 Navicat 3 1.3.3 MySQL 3 第二章 需求分析 5 2.1 总体需求 5 2.3 功能需求 6 2.4 性能需求 6 2.5 运行需求 6 2.6 其他需求 7 2.7 可行性分析 7 2.7.1技术可行性 7 2.7.2 经济可行性…

Linux系统介绍:内核、shell及软件包管理

目录Linux内核版本查看系统版本shell常见 shell运行 shell查看Linux系统信息查看系统位数查看内存信息查看CPU信息Linux软件包管理源码编译安装RPMRPM包安装rpm命令其它用法yumDPKGDPKG 命令安装apt查看历史命令historyLinux 文件句柄Linux系统主要包括3层&#xff0c; 硬件&am…

基于MATLAB虚拟仿真的四杆机构运动分析

目 录 1 绪论 (1) 1.1 本文研究的目的意义 (1) 1.2 四杆机构的发展与应用 (1) 1.3 本文研究的主要内容 (2) 2 平面四杆机构运动学分析 (3) 2.1 四杆机构自由度的计算 (3) 2.2 角位移分析 (3) 2.3 角速度分析 (3) 2.4 角加速度分析 (3) 2.5 计算仿真前四杆机构的初始参数值 (4) …

VSCode + Python环境配置

VSCode Python开发环境配置 目录Visual Studio Code 下载安装设置 Python 环境安装code runner插件配置code runnerRun in Terminal其它配置配置VSCode自动保存快捷键Jupyter Notebook插件安装将ipynb文件转换为markdown系列文章Visual Studio Code 下载安装 Visual Studio Co…

基于Ocean Connect云平台的照明控制系统设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 2 1.2.1云平台发展现状 2 1.2.2智能照明的发展现状 2 1.3 研究主要内容 3 2 总体方案设计 5 2.1 系统的需求分析 5 2.2 系统架构设计 6 2.3 通信协议设计 7 2.3.1协议数据帧格式 7 2.3.2控制协议的具…

基于Java springboot技术的班务管理系统的设计与实现

目 录 摘  要 I Abstract II 第一章 绪论 1 1.1 课题背景、目的及意义 1 1.2 班务管理系统部署现状及未来发展趋势 1 1.2.1 班务管理系统部署的现状 1 1.2.2 班务管理系统未来发展趋势 2 1.3 研究主要内容 3 第二章 系统开发技术 4 2.1 Java语言 4 2.2 Spring框架简介 6 2.3 …

AppCrawler自动遍历测试

AppCrawler 是由 seveniruby开源的一个自动遍历测试工具&#xff0c;谷歌有一个叫App Crawler 的遍历工具。AppCrawler具有很大的灵活性&#xff0c;可以自由控制测试页面&#xff0c;控件类型&#xff0c;测试深度等&#xff0c;且支持Android和IOS应用测试。 目录AppCrawler安…

在线多人游戏开发(一)

最近想自己开发个在线多人的小游戏&#xff0c;看能不能开拓下职业生涯&#xff0c;顺便赚点外快。目标是多人在线手游&#xff0c;现阶段只做安卓端&#xff0c;不考虑苹果&#xff08;主要是没苹果。。。而且苹果开发成本高&#xff0c;先忽略&#xff09;。采用unity3d、pro…

图像复原的实现(MATLABGUI)

1.使用环境&#xff1a; 软件环境&#xff1a;MATLAB R2014b 硬件环境&#xff1a;CPU&#xff1a;IntelCore™i5-5200U CPU 内存&#xff1a;4.00GB 硬盘&#xff1a;SSD ST510 512G 显卡&#xff1a;AMD Radeon R7 M265 Series 编程语言&#xff1a;MATLAB 2.操作流程图&…