基于单片机的刷卡考勤系统的设计
目录
摘要…………………………………………………………………………1
Abstract……………………………………………………………………2
第一章 绪论………………………………………………………………4
1.1课题背景…………………………………………………………4
1.2课题研究的目的与意义…………………………………………4
1.3国内外研究现状…………………………………………………5
1.4本课题主要研究的内容…………………………………………5
第二章 射频识别技术的介绍………………………………………………6
2.1 IC卡的介绍 ……………………………………………………6
2.2 非接触式IC 卡的标准…………………………………………8
第三章 考勤系统的总体方案设计…………………………………………9
3.1系统的功能要求…………………………………………………9
3.2系统的技术要求…………………………………………………9
3.3 系统的组成及总体方案设计……………………………………10
第四章 系统的硬件设计……………………………………………………10
4.1 天线的设计………………………………………………………10
4.2 读卡芯片电路的设计……………………………………………15
4.3 液晶显示模块电路的设计………………………………………18
4.4 单片机控制模块电路……………………………………………20
4.5 其他模块电路的设计 …………………………………………21
第五章 软件部分的设计 …………………………………………………22
5.1 主程序的设计……………………………………………………22
5.2 读卡模块软件设计………………………………………………23
5.3 显示模块软件设计………………………………………………25
第六章 系统测试结果及结论………………………………………………26
6.1 调试………………………………………………………………26
6.2 结论………………………………………………………………26
谢辞 …………………………………………………………………………27
参考文献 ……………………………………………………………………27
附录(一)……………………………………………………………………27
附录(二)……………………………………………………………………29
本文主要是通过对射频设别技术的研究来设计一款基于单片机的刷卡考勤系统的硬件设备及其软件。在设计IC卡读卡器的基础上,完成考勤系统的设计。
本课题主要完成的任务包括:
(1)文献部分:无线识别技术的研究。
(2)硬件部分:包括单片机控制的射频读卡器的设、12864液晶显示电路的设计、报警电路的设计等。
(3)软件部分:单片机控制程序。
(4)系统的综合调试与分析:在软硬件完成以后,要对系统进行综合的测试与实验,分析系统的可靠性与实用性,调整系统的不足。
第三章考勤系统的总体方案设计
本课题设计的刷卡考勤系统主要由IC卡、读卡模块、控制模块、显示模块和报警模块组成。下面分别对系统功能要求、系统技术要求及系统实现方案总体阐述。
3.1系统的功能要求
本系统的研制主要包括以下几项功能:
(1)读卡功能:本系统的读卡模块可以识别基于国际标准ISO/IEC 14443的IC卡,可以读取IC的卡号。
(2)考勤功能:本系统通过对IC卡的识别来统计出勤信息,统计出应到人数。实到人数,实现考勤功能。
(3)显示功能:对于考勤的相关信息,可以通过液晶显示屏来进行显示。对于数据库中存在的持卡人信息进行显示,并响铃提示通过;对于数据库中不存在的持卡人信息进行报警警告。
3.2系统的技术要求
在了解本系统的工作原理和功能之后,我们就可以确定系统的技术要求。本系统采用了标准的ISO/IEC 14443 “Type A”国际标准实现IC卡信息的读写,并通过天线的屏蔽干扰信号设计,大大提高了系统读卡的可靠性和通用性。系统采用的单片机处理器成本均比较低,适合批量生产和各类工程的需要。对于完整的系统而言,为了提高市场竞争力,要求该系统应符合便于携带、防干扰、易于使用和成本低廉等技术要求。具体参数和指标如下:
(1)便于携带:电路的设计和布局较为紧凑,减少占用的空间,减小硬件的体积,便于携带;
(2)防干扰:系统的天线的合理设计,实现电子屏蔽;
(3)易用性:系统采用模块化的设计,在使用过程中安装简单,同时考勤信息直观的显示在液晶屏上,人机交换界面良好,易于使用。
3.3 系统的组成及总体方案设计
基于单片机的刷卡考勤系统主要由天线、读卡芯片、单片机、控制电路、报警电路、显示电路组成。设计的关键在于读卡模块和显示模块电路的设计以及单片机与读卡芯片和液晶显示通信的程序设计。系统的组成结构如图(3)所示:
图(3)考勤系统的结构框图
第四章 系统的硬件设计
系统的电路图设计:
如图(4)所示,图中的U2为STC89C52RC单片机,J3为12864液晶显示屏。单片机作为主控制器,S1、C1、R2、D1、R3组成复位电路连接到9脚RST上,当按下S1,便会给单片机一个低电平,使单片机复位;通过单片机的P1口作为液晶显示屏的数据I/O口和P0.0-P0.5控制液晶的状态和显示;P2.0口来控制蜂鸣器的响铃,当给P2.0一个高电平时,蜂鸣器响铃;P3.0/P3.1作为下载电路的并行接口。
左下面的是MFRC522读卡芯片,右下端为读卡器部分的天线,当单片机通过P0.6、P0.7和P2.5、P2.6、P2.7串口的SPI通信方式给MFRC522“读”的信号时,MFRC522通过VMID和RX端口,给天线信号,通过射频感应,本文转载自http://www.biyezuopin.vip/onews.asp?id=13675天线读取IC卡中信息,通过TX1和TX2把信息存在MFRC522相应的寄存器中,当单片机发出控制“写”的信号后,相应的信息会被写到卡中。
//头文件include.H
#include "reg52.h"
#include "intrins.h"
#include "rc522.h"
#include "ks0108.h"
#include <stdio.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^0;
#define nop() _nop_()
#define CLR_BEEP beep=0
#define SET_BEEP beep=1
#define WRITECARD 0xA2
#define KEYCARD 0xA3
#define SETTIME 0xA4
#define SENDID 0xA5
#define RELOAD_COUNT 0xfd //11.0592M 波特率9600 0xfd
// 4800 0xfa
//头文件ks0108.h
#include "reg52.h"
#define LCD12864DataPort P1
#define STU_DATAPORT P1
#define SET_DATAPORT P1=0xff
sbit lcd_di=P0^4;
sbit lcd_rw=P0^3;
sbit lcd_en=P0^5;
sbit lcd_cs1=P0^0;
sbit lcd_cs2=P0^1;
#define SCREENLEFT 0
#define SCREENRIGHT 1
#define CLR_LCD_DI lcd_di=0
#define SET_LCD_DI lcd_di=1
#define SET_LCD_RW lcd_rw=1
#define CLR_LCD_RW lcd_rw=0
#define SET_LCD_EN lcd_en=1
#define CLR_LCD_EN lcd_en=0
#define SET_LCD_CS1 lcd_cs1=1
#define CLR_LCD_CS1 lcd_cs1=0
#define SET_LCD_CS2 lcd_cs2=1
#define CLR_LCD_CS2 lcd_cs2=0
//头文件rc522.h
/
//MF522命令字
/
#define PCD_IDLE 0x00 //取消当前命令
#define PCD_AUTHENT 0x0E //验证密钥
#define PCD_RECEIVE 0x08 //接收数据
#define PCD_TRANSMIT 0x04 //发送数据
#define PCD_TRANSCEIVE 0x0C //发送并接收数据
#define PCD_RESETPHASE 0x0F //复位
#define PCD_CALCCRC 0x03 //CRC计算
/
//Mifare_One卡片命令字
/
#define PICC_REQIDL 0x26 //寻天线区内未进入休眠状态
#define PICC_REQALL 0x52 //寻天线区内全部卡
#define PICC_ANTICOLL1 0x93 //防冲撞
#define PICC_ANTICOLL2 0x95 //防冲撞
#define PICC_AUTHENT1A 0x60 //验证A密钥
#define PICC_AUTHENT1B 0x61 //验证B密钥
#define PICC_READ 0x30 //读块
#define PICC_WRITE 0xA0 //写块
#define PICC_DECREMENT 0xC0 //扣款
#define PICC_INCREMENT 0xC1 //充值
#define PICC_RESTORE 0xC2 //调块数据到缓冲区
#define PICC_TRANSFER 0xB0 //保存缓冲区中数据
#define PICC_HALT 0x50 //休眠
/
//MF522 FIFO长度定义
/
#define DEF_FIFO_LENGTH 64 //FIFO size=64byte
#define MAXRLEN 18
/
//MF522寄存器定义
/
// PAGE 0
#define RFU00 0x00
#define CommandReg 0x01 //启动和停止命令的执行
#define ComIEnReg 0x02 //中断请求传递的使能和禁能控制位
#define DivlEnReg 0x03 //中断请求传递的使能和禁能控制位
#define ComIrqReg 0x04 //包含中断请求标志
#define DivIrqReg 0x05 //包含中断请求标志
#define ErrorReg 0x06 //错误标志寄存器
#define Status1Reg 0x07 //包含 CRC、中断和 FIFO 缓冲区的状态标志
#define Status2Reg 0x08 //包含接收器、发送器和数据模式检测器的状态标志
#define FIFODataReg 0x09 //64 字节 FIFO 缓冲区的输入和输出
#define FIFOLevelReg 0x0A //指示 FIFO 中保存的字节数
#define WaterLevelReg 0x0B //定义 FIFO 下溢和上溢报警的 FIFO 深度
#define ControlReg 0x0C //包含不同的控制位
#define BitFramingReg 0x0D //面向位的帧的调节
#define CollReg 0x0E //定义在 RF 接口上检测到的第一个位冲突
#define RFU0F 0x0F
// PAGE 1
#define RFU10 0x10
#define ModeReg 0x11 //定义发送和接收的常用模式
#define TxModeReg 0x12 //定义发送过程的数据速率
#define RxModeReg 0x13 //定义接收过程的数据速率
#define TxControlReg 0x14 //控制天线驱动器管脚 Tx1 和 Tx2 的逻辑操作
#define TxAutoReg 0x15
#define TxSelReg 0x16 //选择模拟部分的内部源
#define RxSelReg 0x17 //选择内部接收器设置
#define RxThresholdReg 0x18 //选择位译码器的阈值
#define DemodReg 0x19 //定义解调器的设置
#define RFU1A 0x1A
#define RFU1B 0x1B
#define MifareReg 0x1C
#define RFU1D 0x1D
#define RFU1E 0x1E
#define SerialSpeedReg 0x1F //选择串行 UART 接口的速率
// PAGE 2
#define RFU20 0x20
#define CRCResultRegM 0x21
#define CRCResultRegL 0x22
#define RFU23 0x23
#define ModWidthReg 0x24
#define RFU25 0x25
#define RFCfgReg 0x26
#define GsNReg 0x27
#define CWGsCfgReg 0x28
#define ModGsCfgReg 0x29
#define TModeReg 0x2A
#define TPrescalerReg 0x2B
#define TReloadRegH 0x2C
#define TReloadRegL 0x2D
#define TCounterValueRegH 0x2E
#define TCounterValueRegL 0x2F
// PAGE 3
#define RFU30 0x30
#define TestSel1Reg 0x31
#define TestSel2Reg 0x32
#define TestPinEnReg 0x33
#define TestPinValueReg 0x34
#define TestBusReg 0x35
#define AutoTestReg 0x36
#define VersionReg 0x37
#define AnalogTestReg 0x38
#define TestDAC1Reg 0x39
#define TestDAC2Reg 0x3A
#define TestADCReg 0x3B
#define RFU3C 0x3C
#define RFU3D 0x3D
#define RFU3E 0x3E
#define RFU3F 0x3F