一、方案描述
本设计采用STC89C52作为主控芯片,专用读卡器模块用来读射频卡的信息,当有卡进入到读卡器读卡的范围内时就会读取到相应的卡序列号,并根据得到的卡序列号做出相应的操作。若正确则开门,若不正确则报警并显示错误信息。本设计实现了自动、准确的识别卡序列号,对门禁系统起着重要的作用EEPROM采用AT24C04芯片,掉电后可以存储密码,从而保证了系统的安全性。人机交互通道部分采用了4×4矩阵键盘输入以及LCD12864标准字符型液晶显示。针对于用按键输入密码,根据密码的正确与否来进行相应的操作,管理员可以自行设定和修改密码;输出系统部分包括驱动开锁电路和报警电路;其中,在本系统设计中,驱动开锁电路用发光二极管表示,而报警电路则使用蜂鸣器。
二、系统组成
本系统的主要电路包括:读卡器数据采集电路、串行E2PROM存储电路、LCD12864显示电路、报警电路、门控电路、键盘电路。
(1)数据采集:读卡器YHY502ATG通过天线读取RFID卡的数据,然后将数据传送出去。但这部分还只是设计阶段没有真正的实现,该系统还需要在今后的工作中进一步的研究和改善。所以在仿真中简单的用一个开关按钮代替读卡器正确信号的输入。
(2)数据分析:AT89C52接收到数据后,将数据传送给AT24C04或上位机,AT24C04或上位机对数据进行分析,从而判断数据的有效性。
(3)数据处理:针对数据的采集和分析的结果做出相应的处理,例如显示、报警、门控等。
(4)密码输入模块:(a)针对于用按键输入密码,根据密码的正确与否来进行相应的操作;(b)管理员可以自行设定和修改密码; (c)友好的人机界面;(d)输入正确的密码后,驱动开锁电路。
(5)报警机制模块:当出现非法卡或输入的密码不正确时产生报警。
三、硬件电路图
四、元器件清单
规格 | 规格 | 位号 | 数量 |
电解电容 | 10uF | C1 | 1 |
瓷片电容 | 22pF | C2, C3 | 2 |
瓷片电容 | 0.1uF | C17, C18 | 2 |
二极管 | IN4148 | D2 | 1 |
晶振 | 12MHZ | J1 | 1 |
灯 | LED | LED4 | 1 |
金属膜电阻 | 10K | R1, R3, R4 | 3 |
金属膜电阻 | 1K | R5, R7, R10 | 3 |
电位器 | 10k | RT1 | 1 |
单片机 | ST89C52 | U1 | 1 |
排阻 | 4.7K | U3 | 1 |
开关 | SWITCH | U4 | 1 |
电源接口 | POW | U5 | 1 |
排针 | U6 | 1 | |
三极管 | S8550 | U7 | 1 |
蜂鸣器 | BELL | U8 | 1 |
存储器 | AT24C02 | U9 | 1 |
RC522 | CON8 | U12, U28 | 2 |
排针 | CON2 | U13 | 1 |
三极管 | 'S8550 | U14 | 1 |
继电器 | JDQ-5 | U15 | 1 |
稳压管 | LM1117 | U22 | 1 |
液晶 | LCD12864 | U23 | 1 |
五、部分程序
#include "reg52.h"
#include "main.h"
#include "uart.h"
#include "timer.h"
#include "rc522.h"
#include "ctrl.h"
#include "lcd12864.h"
#include "beep.h"
#include "key.h"
#include "EEPROM.h"
void init_all(void) //初始化
{
EA = 0; //关总中断
init_timer(); //定时器初始化
init_uart(); //串口初始化
init_rc522(); //RC522初始化
lcd_init(); //LCD初始化
EEPROM_READ(0,Card_SN_BUF,4);//EEPROM初始化,取出记录的卡号
EEPROM_READ(7,KEY_BUF,8);//EEPROM初始化,取出记录的密码
send_bytes(Card_SN_BUF,4);
EA = 1; //开总中断
}
void main(void) //主函数
{
INT8U key;
Delay_ms(50); //让硬件稳定
init_all(); //执行初始化函数
relay_OFF(); //关继电器
LED_BLINK_1(); //led test
beep1(); //beep test
display(0,0,0); //显示初始化
while(1)
{
key=key_scan(); //按键操作
if(key==12) if(states>0) states--;
else states=0; //上一功能
if(key==13) if(++states>3) states=3; //下一功能
ctrl_process(); //进入RC522操作
}
}