# 基于RT-Tread与FRDM-MCXA156的智能门锁 **Repository Path**: chaohang021/exclusive ## Basic Information - **Project Name**: 基于RT-Tread与FRDM-MCXA156的智能门锁 - **Description**: No description available - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-23 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **智能门锁:基于RT-Tread与FRDM-MCXA156的多外设嵌入式实践** ![输入图片说明](image.png) ### 一、项目概述 ------------ 本项目基于MCXA156系列微控制器构建了一款多功能智能门锁控制系统,整合了密码、指纹、射频卡三种开锁方式,配备 OLED 本地显示与声光反馈机制,通过 EEPROM 实现密钥持久化存储,构成了一套兼顾安全性与便捷性的嵌入式解决方案。系统支持本地密钥修改、开锁状态实时反馈、错误报警等核心功能,可广泛应用于家庭、办公场所等场景的门禁控制。 ### 设计思路方案 - 多模式开锁:支持 6 位数字密码、FPM383C 指纹识别、RC522 射频卡三种开锁方式,满足不同使用场景需求。 - 密钥管理:通过 24CXX 系列 EEPROM 实现开锁密钥的持久化存储,支持本地按键修改密钥,修改后自动同步存储。 - 状态可视化:借助 SSD1306 OLED 显示屏实时显示当前界面状态、输入密码位数、开锁结果等信息; - 声光反馈:开锁成功时 LED 点亮 + 图标提示,密码错误时蜂鸣器报警 + 图标闪烁,提升用户交互体验; - 多任务并发:基于裸机编程实现传感器扫描、按键处理、显示更新、报警控制等任务的并发执行,确保系统响应实时性。 本文将详细拆解系统的硬件选型、软件架构、核心逻辑实现及开发过程中的关键细节,为嵌入式门禁系统开发提供实践参考。 视频演示:[智能门锁演示视频]【智能门锁MCXA156】 https://www.bilibili.com/video/BV1sYSFBeEdt/?share_source=copy_web&vd_source=c4dbd254c3d70e202c486994b280d23a ### 二、硬件选型与连接 核心控制器:FRDM-MCXA156 选用 FRDM-MCXA156微控制器作为核心控制单元,其优势如下: 性能:搭载 ARM Cortex-M 系列内核,具备高效的指令执行能力,可满足多外设并发控制与算法处理需求,丰富的 I2C、SPI、UART、PWM、GPIO 等接口,无需扩展板即可直接连接所有功能模块。 ### 三、软件架构设计 本项目软件基于RT-Thread-5.2.1官方demo开发,将系统功能拆解为多个独立模块,通过全局变量实现模块间数据交互,确保代码的可维护性与扩展性。 3.1 整体架构 - 系统软件主要包含五大核心模块,各模块功能独立、协同工作: - 外设驱动模块:负责各硬件外设的初始化与底层操作(如 UART、I2C、SPI、PWM、GPIO 等)。 - 核心控制模块:实现开锁逻辑判断、密钥验证、状态管理等核心功能。 - 输入处理模块:处理按键输入、指纹识别结果、射频卡读取数据。 - 显示控制模块:管理 OLED 屏幕的界面刷新与信息显示。 - 反馈模块:通过 LED、蜂鸣器实现开锁成功、错误报警等状态反馈。 3.2 工作流程详解 系统初始化阶段: 启动后依次完成中断优先级配置、串口初始化、各外设(指纹模块、RC522、OLED、按键EEPROM、PWM)初始化。 检测 EEPROM 是否正常工作,若异常则通过 LED 闪烁提示,从 EEPROM 中读取预存储的 6 位开锁密钥,存入全局变量open_lock_key。 主循环任务(无限循环执行): 传感器扫描:持续调用fpm383c_Scan()(指纹扫描)、RC522_Scan()(射频卡扫描),等待识别结果,通过key_Scan()检测按键输入,处理数字输入、密码确认、删除、界面切换等操作,输入 6 位密码后,与存储的开锁密钥比对,匹配则触发开锁,不匹配则启动报警,根据开锁结果、错误状态,控制 LED 亮灭与蜂鸣器发声,同步更新 OLED 显示。 线程间通信:通过全局变量(如open_door_type开锁状态、open_door_alert报警状态、interface_num界面标识)实现各模块间数据交互,简化通信逻辑,确保系统响应实时性。 ### 四、核心模块实现 4.1 EEPROM 密钥存储与读取 采用 24CXX EEPROM 实现密钥的持久化存储,确保掉电后密钥不丢失。 - 初始化:调用AT24CXX_Init()初始化 I2C 总线与 EEPROM 设备,通过AT24CXX_Check()检测设备是否正常。 - 密钥读取:系统启动时,通过循环读取 EEPROM 的 0-5 地址数据,存入open_lock_key数组。 - 密钥修改:在修改界面(interface_num=2)确认后,将临时密钥open_lock_key_temp写入 EEPROM 对应地址,并重新读取同步至open_lock_key。 ```c // 初始化EEPROM并读取密钥 AT24CXX_Init(); while(AT24CXX_Check()){ // EEPROM异常,LED闪烁提示 LED_ON = !LED_ON; Delay1_ms(100); } for(i=0;i<6;i++){ open_lock_key[i] = AT24CXX_ReadOneByte(i); // 读取密钥 } // 修改密钥并写入EEPROM for(i=0;i<6;i++){ AT24CXX_WriteOneByte(i, open_lock_key_temp[i]); // 写入新密钥 } ``` 4.3 开锁与报警反馈 开锁逻辑:密钥验证通过(或指纹 / 射频卡识别成功)时,open_door_type置 1,LED 点亮,OLED 显示开锁成功图标(BMP4),2 秒后自动关锁(LED 熄灭,图标恢复); 报警逻辑:密钥不匹配或操作错误时,open_door_alert置 1,蜂鸣器发出报警音(time2_Pwm_Alert),OLED 错误图标(BMP2)闪烁 4 次后恢复。 ```c // 开锁反馈 if(open_door_type){ LED_ON; OLED_DrawBMP(12,5,28,7,BMP4); // 显示开锁成功图标 Delay1_ms(2000); LED_OFF; OLED_DrawBMP(12,5,28,7,BMP3); // 恢复默认图标 open_door_type = 0; } // 错误报警反馈 if(open_door_alert){ for(i=0;i<4;i++){ OLED_DrawBMP(12,5,28,7,BMP2); // 显示错误图标 time2_Pwm_Alert(150,1000); // 蜂鸣器报警 OLED_DrawBMP(12,5,28,7,BMP3); // 恢复默认图标 rt_thread_mdelay(100); } open_door_alert = 0; } ``` 4.4 OLED 界面显示 OLED 屏幕用于实时显示系统状态,主要包含: 界面标识:显示当前界面(默认界面 / 修改界面),通过interface_Oled_Flushed()刷新; 密码输入位数:通过位图 BMP2 标识已输入的密码位数; 状态图标:默认状态(BMP3)、错误状态(BMP2)、开锁成功状态(BMP4); 按键值显示:实时显示当前按下的按键数字。 ```c // 刷新界面标识 void interface_Oled_Flushed(){ OLED_DrawBMP(72,5,86,7,BMP6); OLED_ShowNum(72,5,interface_num,1,16); // 显示当前界面编号 } // 显示按键值 OLED_ShowNum(100,5,key_vel,a,16); ``` ### 五、多开锁模式扩展 本系统预留了指纹识别(FPM383C)与射频卡识别(RC522)的扩展接口,核心实现思路如下: - 指纹识别:通过fpm383c_Scan()持续扫描指纹,识别成功后返回匹配结果,直接置位open_door_type触发开锁。 - 射频卡识别:通过RC522_Scan()读取射频卡 ID,与预存储的合法 ID 比对,匹配则触发开锁。 目前代码已完成模块初始化与扫描函数调用,只需扩展指纹 / 射频卡的合法数据存储与比对逻辑,即可实现多模式开锁功能。 ### 六、项目优化与改进方向 - 传感器稳定性:RC522 射频卡模块在强干扰环境下可能出现读取失败,可增加数据校验与多次扫描机制提升稳定性。 - 密码安全性:当前密钥以明文形式存储于 EEPROM,可增加 AES 加密算法对密钥进行加密存储,提升安全性。 - 功能扩展:增加远程开锁(通过 SIM900A GSM 模块)、开锁记录存储、低功耗模式等功能。 - 交互体验:优化 OLED 显示界面,增加密码输入隐藏(如显示星号)、中文提示等,提升用户体验。 - 异常处理:增加指纹识别失败、射频卡读取失败的专门反馈机制,区分不同错误类型。 七、项目源码 百度网盘地址:通过网盘分享的文件:frdm-mcxa156.zip 链接: https://pan.baidu.com/s/1SDYqULii2I0b2lkJM9ecrg?pwd=8888 提取码: 8888 代码链接:https://gitee.com/yang-xianyi/exclusive 欢迎各位开发者提出宝贵意见与优化建议,共同完善系统功能。