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

2023-04-10 19:38:47

目 录
摘 要 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();//复位RC522
	PcdAntennaOn();//开启天线发射 

	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;}	//李四到 +1
			if(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;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(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.0592MHz
	TL1 = 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;
} 




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

  • 作者:biyezuopinvip
  • 原文链接:https://biyezuopin.blog.csdn.net/article/details/127222088
    更新时间:2023-04-10 19:38:47