基于51单片机射频RFID卡考勤上课上班人数计数系统设计

1 系统功能介绍

本设计是一套基于 STC89C52 单片机 的射频 RFID 卡考勤与人数统计系统,可应用于教室、公司等需要考勤管理的场所。系统通过射频识别模块(RFID)读取预设卡片的身份信息,实现人员的自动识别与到勤统计,并结合液晶显示与蜂鸣器报警功能,能够快速判断到勤人数是否符合要求,从而提升管理效率。

系统主要功能如下:

  1. RFID 身份识别

    系统配备 3 张预设的射频卡,分别代表张三、李四、王二三位用户。当任意一张卡刷卡成功时,单片机能够识别其身份,并在 LCD 上对应位置显示 "有人",未签到的显示为空格。

  2. 人数统计

    LCD 的第二行会实时显示已签到人数,实现到勤人数的动态统计。

  3. 上课(上班)检测功能

    按下按键进入上课模式,如果签到人数与总人数不一致,则蜂鸣器发出报警,提示有人员未到场。

  4. 声光提示

    当有新人员刷卡成功时,蜂鸣器发出短促提示音;上课模式下人数不全时蜂鸣器发出持续报警音。


2 系统电路设计

2.1 单片机最小系统

本系统核心为 STC89C52 单片机,其最小系统包括:

  • 时钟电路:外接 12MHz 晶振和 30pF 电容,保证 MCU 稳定运行。
  • 复位电路:采用按键和上拉电阻构成,上电自动复位,并支持人工复位。
  • 电源电路:DC 5V 供电,配合滤波电容降低干扰。

该模块负责 RFID 数据处理、LCD 显示控制、按键识别及蜂鸣器驱动。

2.2 RFID 模块电路

RFID 模块用于读取射频卡的 ID 号,本系统可使用 MFRC522 或兼容 125kHz/13.56MHz 的模块:

  • 天线部分:负责接收与发射射频信号。
  • 解码部分:将射频信号解调并输出卡片的唯一 ID 数据。
  • 接口部分:通过 SPI 或 UART 与单片机通信,数据传输速度快、稳定性高。

设计要点:

  1. 使用屏蔽线连接天线模块,减少外界干扰。
  2. 通信线加上上拉电阻,保证总线稳定。

2.3 LCD1602 显示模块

LCD1602 用于显示:

  • 第一行:三位用户的签到状态(空格或"有人")
  • 第二行:已签到人数统计

LCD 通过 4 位并行方式与单片机连接,节省 IO 口。

2.4 按键输入模块

系统仅需一个按键:

  • 上课/上班键 :按下后判断当前人数是否与总人数匹配。
    按键采用下拉或上拉电阻设计,配合软件去抖动处理,保证识别准确。

2.5 蜂鸣器报警模块

采用有源蜂鸣器与三极管驱动电路:

  • 短促音:刷卡成功提示
  • 持续音:人数不齐报警

2.6 电源电路

统一采用 DC 5V 稳压电源,为 MCU、RFID 模块、LCD、蜂鸣器供电。电源端加入滤波电容与 TVS 二极管以防止干扰和浪涌。


3 程序设计

3.1 主程序结构

程序结构分为初始化与主循环:

  1. 初始化:

    • 初始化 LCD、RFID、按键、蜂鸣器
    • 清空签到状态数组
  2. 主循环:

    • 读取 RFID 卡 ID
    • 匹配用户信息
    • 更新签到状态
    • 显示人数与状态
    • 按键检测并判断报警条件

3.2 RFID 数据读取与身份识别

c 复制代码
unsigned char card_uid[5];
unsigned char user1_uid[5] = {0x12,0x34,0x56,0x78,0x90};
unsigned char user2_uid[5] = {0x98,0x76,0x54,0x32,0x10};
unsigned char user3_uid[5] = {0xAB,0xCD,0xEF,0x12,0x34};

bit user_state[3] = {0,0,0}; // 0未到 1已到

bit Compare_UID(unsigned char *id1, unsigned char *id2) {
    for(int i=0;i<5;i++) {
        if(id1[i] != id2[i]) return 0;
    }
    return 1;
}

void RFID_Check(void) {
    if(RFID_ReadCard(card_uid)) {
        if(Compare_UID(card_uid, user1_uid)) user_state[0] = 1;
        else if(Compare_UID(card_uid, user2_uid)) user_state[1] = 1;
        else if(Compare_UID(card_uid, user3_uid)) user_state[2] = 1;
        Beep_Short();
    }
}

3.3 LCD 显示签到状态与人数

c 复制代码
void LCD_Update(void) {
    unsigned char i;
    char line1[17] = "               ";
    char line2[17];
    unsigned char count = 0;
    
    for(i=0;i<3;i++) {
        if(user_state[i]) {
            line1[i*5] = '有';
            line1[i*5+1] = '人';
            count++;
        } else {
            line1[i*5] = ' ';
            line1[i*5+1] = ' ';
        }
    }
    
    sprintf(line2, "人数:%d", count);
    
    LCD_SetCursor(0,0);
    LCD_Print(line1);
    LCD_SetCursor(0,1);
    LCD_Print(line2);
}

3.4 按键检测与上课模式判断

c 复制代码
void Check_Class_Start(void) {
    unsigned char count = 0;
    for(int i=0;i<3;i++) {
        if(user_state[i]) count++;
    }
    if(count < 3) {
        Beep_Long();
    }
}

void Key_Scan(void) {
    if(KEY1 == 0) {
        delay_ms(20);
        if(KEY1 == 0) {
            Check_Class_Start();
            while(KEY1 == 0); // 等待松开
        }
    }
}

3.5 蜂鸣器控制

c 复制代码
void Beep_Short(void) {
    BEEP = 1;
    delay_ms(100);
    BEEP = 0;
}

void Beep_Long(void) {
    BEEP = 1;
    delay_ms(500);
    BEEP = 0;
}

3.6 主循环程序

c 复制代码
void main(void) {
    System_Init();
    while(1) {
        RFID_Check();
        LCD_Update();
        Key_Scan();
    }
}

4 总结

本系统通过 STC89C52 单片机 + RFID 模块 实现了考勤签到与人数统计功能,结合 LCD 实时显示与蜂鸣器报警,实现了小型教室或办公室的考勤自动化管理。系统结构简单、成本低廉,具有较好的实用性与可扩展性。未来可以加入以下功能:

  • 通过 EEPROM 存储历史签到记录
  • 加入时钟模块记录签到时间
  • 增加无线通讯,将考勤数据上传到服务器进行统计分析
相关推荐
GalaxySinCos1 小时前
09 51单片机之LED点阵屏
单片机·嵌入式硬件·51单片机
桃源学社(接毕设)1 小时前
基于Django珠宝购物系统设计与实现(LW+源码+讲解+部署)
人工智能·后端·python·django·毕业设计
针不戳202209262 小时前
PFC是什么
嵌入式硬件·学习·硬件工程
苏格拉真没有底3 小时前
MCU 软件断点注意事项!!!
单片机·嵌入式硬件
Shang131130487914 小时前
THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输
单片机·嵌入式硬件·高速视频收发器·thcv215·高速视频数据收发器
ShiMetaPi8 小时前
紫光同创Logos2+RK3568JHF开发板:国产异构计算平台的破局者
嵌入式硬件·fpga开发·鸿蒙系统·树莓派
No0d1es13 小时前
202506 电子学会青少年等级考试机器人五级器人理论真题
单片机·嵌入式硬件·青少年编程·机器人·电子学会·五级·理论综合
范纹杉想快点毕业15 小时前
C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
stm32·单片机·tcp/ip·microsoft·fpga开发·51单片机·wpf
不会先思考16 小时前
C5.3:发射极偏置和LED驱动电路
嵌入式硬件·模拟电路·三极管·发射极偏置电路·bjt