本文概述
- 基于8051单片机的RFID考勤系统
- 什么是RFID?
- 基于RFID的考勤系统框图
- 考勤系统电路的工作
该项目使用RFID技术记录每位进入教室的学生, 并计算出上课的时间。
在该系统中, 每个学生都分配有一个RFID标签。可以通过将卡放在RFID读取器附近来完成出勤。
什么是RFID? 射频识别(RFID)是一种包括小天线和芯片的电子设备。该设备用于通过射频电磁场在阅读器和RFID标签之间传输信息。
这些设备的工作频率范围包括低, 中和高范围。低频范围是30 KHz至500 KHz, 中频范围是500 KHz至900 KHz, 高频范围是2.4 MHz至2.5 MHz
文章图片
基于RFID的考勤系统框图 【嵌入式系统项目(基于RFID的考勤系统)】大多数学校和大学的考勤系统大多是基于文档的。对于自动考勤系统, 提出了一种基于无线技术的RFID系统。每个学生都有一个RFID标签, 该标签使用内置的IC来存储和处理信息。
该系统的框图包括预置电路, 微控制器, 振荡器电路, LCD显示屏和RFID阅读器。
文章图片
- 微控制器-基于RFID的出勤系统中使用的微控制器是8051系列的AT89C52。它包括4个I / O端口和40针。
- 振荡器电路振荡器电路连接在微控制器的18和19引脚之间。该电路由振荡器和两个工作频率为11.0592 MHz的33 pF电容器组成。
- 预设电路-微控制器AT89C52的第9引脚为复位引脚。预设电路由电容器, 电阻器和开关组成。当按下开关时, 复位引脚被连接, 微控制器被复位。
- LCD显示屏LCD显示屏由16个引脚组成, 其中3个引脚与微控制器的端口2连接, 其余所有引脚均与微控制器的端口2连接。
- RFID读取器-RFID读取器用于读取存储在RFID标签中的信息。它与任何类型的硬件设计结合在一起。
文章图片
如果卡中的数据与RFID读取器匹配, 则信息将显示在LCD上。通过使用该系统, 可以节省操作时间, 因为所有信息都直接存储在数据库中。
源代码:
考虑基于微处理器的考勤系统, 操作微控制器系统所需的嵌入式系统程序是:
#include<
reg51.h>
#include<
string.h>
//0000 to 7FFFsbit RS = P0^7;
sbit EN = P0^6;
sbit SDA = P1^0;
sbit SCL = P1^1;
sbit RELAY = P1^2;
code unsigned char RFID_1[] = "34006C9C04C0";
//34006C9C04+NULL
code unsigned char RFID_2[] = "34006C549C90";
code unsigned char RFID_3[] = "1300F8FAC1D0";
code unsigned char RFID_4[] = "34006CD5AD20";
code unsigned char RFID_5[] = "420061231E1E";
code unsigned char name_1[] = "SANJAY JAIN";
code unsigned char name_2[] = "SHEKHAT HARSH";
code unsigned char name_3[] = "DHOLARIYA RAKSHIT";
code unsigned char name_4[] = "DIVYANG SINGH ";
code unsigned char name_5[] = "NAKUL JAIN";
unsigned char rs[15];
unsigned int no_of_records;
void delay()
{
int j;
for(j=0;
j<
500;
j++);
}void long_delay()
{
unsigned int j;
for(j=0;
j<
65000;
j++);
}void idelay()
{
unsigned int j;
for(j=0;
j<
10000;
j++);
}void lcd_command(char lc)
{
P2 = lc;
RS = 0;
EN = 1;
delay();
EN = 0;
}void lcd_data(char ld)
{
P2 = ld;
RS = 1;
EN = 1;
delay();
EN = 0;
}void lcd_init()
{
lcd_command(0x38);
lcd_command(0x0E);
lcd_command(0x01);
}void serial_init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TR1 = 1;
}void transmit(unsigned char tx)
{
SBUF = tx;
while(TI==0);
TI = 0;
}void send_string(unsigned char *str)
{
int j;
for(j=0;
str[j]!='\0';
j++)
transmit(str[j]);
}unsigned char receive()
{
char rx;
while(RI==0);
RI = 0;
rx = SBUF;
return(rx);
}void lcd_string(char add, char *str)
{
int j;
lcd_command(add);
for(j=0;
str[j]!='\0';
j++)
lcd_data(str[j]);
}void start()
{
SDA = 1;
SCL = 1;
SDA = 0;
}void stop()
{
SDA = 0;
SCL = 1;
SDA = 1;
}void write(unsigned char w)
{
int j;
SCL = 0;
for(j=0;
j<
8;
j++)
{
if((w &
0x80)==0)
SDA = 0;
else
SDA = 1;
SCL = 1;
SCL = 0;
w = w <
<
1;
}
SCL = 1;
SCL = 0;
}unsigned char read()
{
int j;
unsigned char r = 0x00;
SDA = 1;
for(j=0;
j<
8;
j++)
{
SCL = 1;
r = r <
<
1;
if(SDA == 1)
r = r | 0x01;
SCL = 0;
}
return(r);
}void ack()
{
SDA = 0;
SCL = 1;
SCL = 0;
}void nack()
{
SDA = 1;
SCL = 1;
SCL = 0;
}void rtc_read()
{
unsigned char ss, mm, hh, day, mn, date, yr;
start();
write(0xD0);
write(0x00);
stop();
start();
write(0xD1);
ss = read();
ack();
mm = read();
ack();
hh = read();
ack();
day = read();
ack();
date = read();
ack();
mn = read();
ack();
yr = read();
nack();
stop();
rs[0] = hh/0x10 + 48;
rs[1] = hh%0x10 + 48;
rs[2] = ':';
rs[3] = mm/0x10 + 48;
rs[4] = mm%0x10 + 48;
rs[5] = ', ';
rs[6] = date/0x10 + 48;
rs[7] = date%0x10 + 48;
rs[8] = '/';
rs[9] = mn/0x10 + 48;
rs[10] = mn%0x10 + 48;
rs[11] = '/';
rs[12] = yr/0x10 + 48;
rs[13] = yr%0x10 + 48;
rs[14] = '\0';
}void rtc_init()
{
start();
write(0xD0);
write(0x00);
write(0x00);
write(0x00);
write(0x13);
write(0x05);
write(0x12);
write(0x04);
write(0x12);
stop();
}void write_records(unsigned char *str);
void read_records();
void main()
{
unsigned char rec_data[13], i, t;
RELAY = 0;
lcd_init();
serial_init();
rtc_init();
idelay();
start();
write(0xA0);
write(0x7F);
write(0xFF);
stop();
start();
write(0xA1);
no_of_records = read();
nack();
stop();
// no_of_records = 0;
while(1)
{
start:
lcd_command(0x01);
lcd_string(0x80, "RFID ATTENDANCE");
lcd_string(0xC5, "SYSTEM");
j = 0;
while(1)
{
if(RI==1)
{
RI = 0;
t = receive();
if(t == '+')
{
read_records();
goto start;
}
else
{
rec_data[j] = t;
for(j=1;
j<
12;
j++)
rec_data[j] = receive();
rec_data[j] = '\0';
break;
}
}
}j = strcmp(RFID_1, rec_data);
//match =>
j = 0lcd_command(0x01);
if(j==0)
{
RELAY = 1;
lcd_string(0x80, name_1);
rtc_read();
lcd_string(0xC0, rs);
long_delay();
write_records(name_1);
RELAY = 0;
goto start;
}//
j = strcmp(RFID_2, rec_data);
//match =>
j = 0if(j==0)
{
RELAY = 1;
lcd_string(0x80, name_2);
rtc_read();
lcd_string(0xC0, rs);
long_delay();
write_records(name_2);
RELAY = 0;
goto start;
}//
j = strcmp(RFID_3, rec_data);
//match =>
j = 0if(j==0)
{
RELAY = 1;
lcd_string(0x80, name_3);
rtc_read();
lcd_string(0xC0, rs);
long_delay();
write_records(name_3);
RELAY = 0;
goto start;
}j = strcmp(RFID_4, rec_data);
//match =>
j = 0if(j==0)
{
RELAY = 1;
lcd_string(0x80, name_4);
rtc_read();
lcd_string(0xC0, rs);
long_delay();
write_records(name_4);
RELAY = 0;
goto start;
}j = strcmp(RFID_5, rec_data);
//match =>
j = 0if(j==0)
{
RELAY = 1;
lcd_string(0x80, name_5);
no_of_records = 0;
start();
write(0xA0);
write(0x7F);
write(0xFF);
write(0x00);
stop();
lcd_string(0xC0, "MEMORY CLEARED");
long_delay();
RELAY = 0;
goto start;
}
lcd_string(0x80, "ERROR");
lcd_string(0xC0, rec_data);
long_delay();
}
}
推荐阅读
- 嵌入式系统项目
- 嵌入式系统项目(火灾探测与控制系统)
- 嵌入式系统处理器
- 使用8051单片机的LED闪烁
- 使用8051单片机进行LCD编程
- 使用8051微控制器进行键盘编程
- 8051单片机中断
- 10款最佳免费3D CAD软件合集(你应该选择哪个())
- Mac的9款最佳录音软件合集(你最喜欢哪一个())