基于51单片机RFID智能门禁系统红外人流量计数统计
1 系统功能介绍
本设计基于STC89C52单片机,集成RFID读卡器、红外避障传感器、继电器、LCD1602液晶显示和蜂鸣器,实现智能门禁与人流量统计功能。系统能够识别合法的RFID卡开门,并实时统计通过人数,具有安全报警和直观显示功能。具体功能包括:
- 合法RFID卡刷卡成功后,继电器闭合控制门禁开门,LCD显示“通过”,3秒后自动断开继电器关闭门。
- 非法或未注册RFID卡刷卡时,继电器不动作,蜂鸣器报警,LCD显示“不通过”。
- 通过红外避障传感器检测人员通过,LCD显示人数计数累加。
- 系统稳定运行,适用于门禁管理、人流监控等场景。
2 系统电路设计
2.1 STC89C52单片机核心电路
STC89C52单片机为系统核心,负责管理各模块数据交互、处理逻辑控制及输出。
- 时钟电路:采用12MHz晶振,确保单片机工作稳定。
- 复位电路:上电自动复位及手动复位功能,保证系统可靠启动。
- 供电电路:5V稳压电源,满足单片机及外围模块的电压需求。
- I/O口连接:分配专用端口连接RFID模块、继电器驱动、红外传感器、LCD1602显示和蜂鸣器。
通过合理的引脚分配和滤波处理,确保信号传输稳定、抗干扰能力强。
2.2 RFID读卡器模块电路
RFID模块负责识别刷卡用户身份。
- 模块类型:常用MFRC522或类似低频/高频读卡模块。
- 接口方式:采用SPI或串口与单片机通信,传输卡片UID数据。
- 信号处理:模块输出卡号数据,经单片机比对数据库判断合法性。
- 供电:5V电源,配备滤波电容保证模块稳定工作。
该模块能快速读取卡号,延迟低,适合门禁应用。
2.3 继电器驱动电路
继电器用于控制门禁的机械开关动作。
- 驱动方式:单片机IO口通过三极管或驱动芯片控制继电器线圈通断。
- 继电器参数:通常为5V继电器,线圈电流匹配驱动能力。
- 保护电路:继电器线圈并联反向二极管,防止反向电压冲击单片机。
继电器闭合时门禁打开,3秒后断开自动复位。
2.4 LCD1602液晶显示电路
LCD1602液晶用于显示系统状态和人数统计信息。
- 接口:采用并行接口(通常4或8位),连接单片机对应端口。
- 显示内容:第一行显示“通过”或“不通过”提示,第二行显示累计人数。
- 背光:配备背光灯,便于弱光环境观察。
显示内容实时更新,方便用户直观了解门禁情况。
2.5 红外避障传感器电路
红外避障传感器用于检测人员通过,实现人数计数。
- 传感器类型:红外反射式或对射式传感器,灵敏度可调。
- 接口连接:传感器输出数字信号,连接单片机输入端口。
- 计数逻辑:检测到信号变化即有人通过,触发计数器加1。
该模块配合继电器门控,形成完整的人员出入监控。
2.6 蜂鸣器报警电路
蜂鸣器用于非法刷卡报警提示。
- 驱动方式:单片机IO口直接驱动有源蜂鸣器或通过晶体管驱动无源蜂鸣器。
- 报警逻辑:刷卡失败即蜂鸣器发声,提示非法访问。
蜂鸣器声音清晰,警示效果明显。
3 程序设计
3.1 系统初始化模块
负责单片机各模块初始化设置。
void System_Init(void) {// 初始化时钟、IO口CLK_Init();GPIO_Init();// 初始化串口/SPI用于RFID模块通信RFID_Init();// 初始化LCD1602显示模块LCD_Init();// 初始化蜂鸣器IO口Buzzer_Init();// 初始化红外传感器IO口Infrared_Init();// 初始化继电器控制端口Relay_Init();
}
3.2 RFID卡片识别处理模块
读取RFID模块数据,判断卡片合法性并控制继电器。
#define MAX_CARD_NUM 3unsigned char authorized_cards[MAX_CARD_NUM][5] = {{0xDE, 0xAD, 0xBE, 0xEF, 0x01}, // 张三卡号示例{0xDE, 0xAD, 0xBE, 0xEF, 0x02}, // 李四卡号示例{0xDE, 0xAD, 0xBE, 0xEF, 0x03} // 王二卡号示例
};bit Is_Card_Authorized(unsigned char *card_id) {for (int i = 0; i < MAX_CARD_NUM; i++) {if (memcmp(card_id, authorized_cards[i], 5) == 0)return 1;}return 0;
}void RFID_Process(void) {unsigned char card_id[5];if (RFID_ReadCard(card_id)) { // 读取卡号函数,返回1成功if (Is_Card_Authorized(card_id)) {Relay_Control(1); // 继电器闭合,开门LCD_DisplayString(0, 0, "通过");Delay_ms(3000);Relay_Control(0); // 继电器断开,关门} else {Buzzer_On();LCD_DisplayString(0, 0, "不通过");Delay_ms(3000);Buzzer_Off();}}
}
3.3 红外避障计数模块
检测红外传感器信号变化,实现人员计数。
unsigned int people_count = 0;void Infrared_Process(void) {static bit last_state = 1; // 传感器常态高电平bit current_state = Infrared_Read();if (last_state == 1 && current_state == 0) {// 检测到有人通过people_count++;LCD_DisplayNumber(1, 0, people_count);}last_state = current_state;
}
3.4 主程序循环
整体逻辑主循环,轮询处理刷卡和人员计数。
void main(void) {System_Init();LCD_Clear();LCD_DisplayString(1, 0, "人数: 0");people_count = 0;while (1) {RFID_Process();Infrared_Process();Delay_ms(100);}
}
4 总结
本系统基于STC89C52单片机,成功实现了RFID智能门禁和红外人流量计数功能。系统设计涵盖核心单片机电路、RFID读卡模块、继电器驱动、LCD1602显示、红外避障传感器及蜂鸣器报警等关键模块,保证了系统的稳定性和实用性。程序设计采用模块化结构,方便维护和扩展。系统具备实时响应能力和用户友好的交互界面,适合实际门禁管理及人员统计应用。未来可增加网络通信模块,实现远程监控和数据上传,提升智能化水平。