硬件电路的设计
(末尾附文件)
系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机电路+RFID模块电路+1602液晶显示电路+按键电路+蜂鸣器报警电路+电源电路组成。
1、系统有3张卡,分别代表依次是张三、李四、王二。
2、任何一个人刷卡成功能,1602液晶响应显示,未刷卡显示空“ ”位置上空的,刷卡成功后相应位置显示有人。
3、液晶第二行显示刷卡人数,即出勤总人数。
4、按下按键表示上课,如果签到人数和总人数不符合,蜂鸣器报警处理。
3.1.2系统总体结构
本系统具体框图如下图所示:
原理图:
MFRC-522RFID射频模块电路设计
本系统选择MFRC-522射频模块进行刷卡操作。MF RC522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片,是NXP公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。MF RC522利用了先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。支持14443A兼容应答器信号。数字部分处理ISO14443A帧和错误检测。此外,还支持快速CRYPTO1加密算法,用语验证MIFARE系列产品。MFRC522支持MIFARE系列更高速的非接触式通信,双向数据传输速率高达424kbit/s。作为13.56MHz高集成度读写卡系列芯片家族的新成员,MF RC522与MF RC500和MF RC530有不少相似之处,同时也具备许多特点和差异。它与主机间通信采用SPI模式,有利于减少连线,缩小PCB板体积,降低成本。MF522-AN模块采用Philips MFRC522原装芯片设计读卡电路,使用方便,成本低廉,适用于设备开发、读卡器开发等高级应用的用户、需要进行射频卡终端设计/生产的用户。本模块可直接装入各种读卡器模具。模块采用电压为3.3V,通过SPI接口简单的几条线就可以直接与用户任何CPU主板相连接通信,可以保证模块稳定可靠的工作、读卡距离远;
一、电气参数简介
(1)工作电流:13—26mA/直流3.3V
(2)空闲电流:10-13mA/直流3.3V
(3)休眠电流:<80uA
(4)峰值电流:<30mA
(5)工作频率:13.56MHz
(6)支持的卡类型:mifare1 S50、mifare1 S70、mifare UltraLight、mifare Pro、mifare Desfire
(7)环境工作温度:摄氏-20—80度
(8)环境储存温度:摄氏-40—85度
(9)环境相对湿度:
(10)相对湿度5%—95%
二、模块接口SPI参数
(1)数据传输速率:最大10Mbit/s
三、模块主要指标
(1)容量为8K位EEPROM
(2)分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位
(3)每个扇区有独立的一组密码及访问控制
(4)每张卡有唯一序列号,为32位
(5)具有防冲突机制,支持多卡操作
(6)无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
(7)数据保存期为10年,可改写10万次,读无限次
(8)工作温度:-20℃~50℃(湿度为90%)
(9)工作频率:13.56MHZ
(10)通信速率:106 KBPS
(11)读写距离:10 cm以内(与读写器有关)
模块接口原理图如下图所示。
5V转3.3V电源电路设计
AMS1117-3.3是一种输出电压为3.3V的正向低压降稳压器,适用于高效率线性开关电源稳压器。其输出电流为1A,系统电路简单,工作稳定。本电路中,通过AMS1117-3.3芯片将5V直流电压降为3.3V,给系统的特定模块电路供电。
一、基本参数
(1)工作结温范围:-40~125°C
(2)最大输入电压:15V
(3)焊接温度(25秒):265°C
(4)存储温度:- 65~150°C
(5)输出电压:3.267~3.333V
(6)纹波抑制(最小):60dB
其电路原理图如下图所示。电容为电解电容,起到滤波作用,滤除电源中的低频参量,让电压输出更加平稳。
程序流程图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139#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]={0x56,0xe9,0xe0,0x73}; //张三卡号 unsigned char code lsID[4]={0x8a,0xa7,0xe3,0x73}; //李四卡号 unsigned char code weID[4]={0xc9,0xad,0x84,0xc3}; //王二卡号 /*********/ unsigned char UID[5]; //卡号 unsigned char Temp[4] ; //暂存数组 unsigned long time_20ms; //定时计数 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) { TMOD |= 0x01; //使用模式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 ; DelayMs(150); if(buzFlag == 1) buzzer =!buzzer;//蜂鸣器报警 else buzzer = 1;//不报警 } }
.
链接:https://pan.baidu.com/s/1-08rLzWpyg8GUGS4NHG6zw
提取码:8w8s
.
最后
以上就是单薄御姐最近收集整理的关于基于51单片机的智能考勤系统射频RFID卡考勤上课上班人数统计方案原理图程序设计的全部内容,更多相关基于51单片机内容请搜索靠谱客的其他文章。
发表评论 取消回复