嵌入式系统项目(基于RFID的考勤系统)

本文概述

  • 基于8051单片机的RFID考勤系统
  • 什么是RFID?
  • 基于RFID的考勤系统框图
  • 考勤系统电路的工作
基于8051单片机的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系统。每个学生都有一个RFID标签, 该标签使用内置的IC来存储和处理信息。
该系统的框图包括预置电路, 微控制器, 振荡器电路, LCD显示屏和RFID阅读器。
嵌入式系统项目(基于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标签中包含的信息称为学生的ID和出勤情况。当有人将卡放在RFID读取器前面时, 它会读取信息并开始与AT89S52微控制器中存储的信息匹配。在操作之前, 微控制器已使用嵌入式C语言进行了预编程。
嵌入式系统项目(基于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(); } }

    推荐阅读