STM32 电子密码锁设计与实现(附Proteus设计和源代码)
目录
目录
介绍
本项目基于 STM32F103C8T6 微控制器,设计并实现一套电子密码锁系统。系统通过 4x4 矩阵键盘接收用户输入,使用 OLED 显示屏提供实时交互反馈,配合 LED 指示灯、蜂鸣器和电子锁执行机构,完成密码验证、开锁、修改密码等核心功能。密码数据通过 24C02C EEPROM 芯片实现掉电持久化存储。
项目文件链接在文章最后。
Proteus界面

硬件准备
使用本系统前,请准备以下硬件:
|
序号 |
器件 |
数量 |
说明 |
|
1 |
STM32F103C8T6 最小系统板(Blue Pill) |
1 |
主控板 |
|
2 |
4x4 矩阵键盘模块 |
1 |
用于输入数字和功能操作 |
|
3 |
SSD1306 OLED 显示屏(128x64,I2C 接口) |
1 |
显示交互信息 |
|
4 |
24C02C EEPROM 模块 |
1 |
存储密码,掉电不丢失 |
|
5 |
有源蜂鸣器模块 |
1 |
操作提示音 |
|
6 |
LED(红色 + 绿色) |
各 1 个 |
状态指示 |
|
7 |
电磁锁或继电器模块 |
1 |
执行开锁/关锁动作 |
接线说明
按照下表连接各模块与 STM32F103C8T6 引脚:
矩阵键盘(GPIOA)
|
键盘引脚 |
STM32 引脚 |
说明 |
|
行 1 |
PA3 |
推挽输出 |
|
行 2 |
PA2 |
推挽输出 |
|
行 3 |
PA1 |
推挽输出 |
|
行 4 |
PA0 |
推挽输出 |
|
列 1 |
PA4 |
上拉输入 |
|
列 2 |
PA5 |
上拉输入 |
|
列 3 |
PA6 |
上拉输入 |
|
列 4 |
PA7 |
上拉输入 |
OLED 显示屏(软件 I2C)
|
OLED 引脚 |
STM32 引脚 |
说明 |
|
SCL |
PB8 |
开漏输出 |
|
SDA |
PB9 |
开漏输出 |
|
VCC |
3.3V |
供电 |
|
GND |
GND |
接地 |
EEPROM 模块(硬件 I2C1)
|
EEPROM 引脚 |
STM32 引脚 |
说明 |
|
SCL |
PB6 |
复用开漏 |
|
SDA |
PB7 |
复用开漏 |
|
VCC |
3.3V |
供电 |
|
GND |
GND |
接地 |
其他外设
|
外设 |
STM32 引脚 |
说明 |
|
LED1(红色) |
PB0 |
推挽输出,亮起表示锁定/错误 |
|
LED2(绿色) |
PB1 |
推挽输出,亮起表示开锁/成功 |
|
蜂鸣器 |
PB11 |
推挽输出 |
|
电磁锁/继电器 |
PB2 |
推挽输出,高电平开锁 |
提示:OLED 和 EEPROM 分别使用软件 I2C 和硬件 I2C1,两路独立,可同时工作。电磁锁如需大电流驱动,请通过继电器或 MOSFET 模块中转,不要直接连接 STM32 引脚。
编译与烧录
编译步骤
- 安装 Keil uVision5 开发环境。
- 打开工程文件
Project.uvprojx。 - 确认目标设备为 STM32F103C8(Medium Density)。
- 点击菜单 Project -> Build Target,或按 F7 键编译。
- 编译成功后,底部 Build Output 窗口显示
0 Error(s), 0 Warning(s)。 - 编译产物位于
Objects/目录,生成文件Project.hex。(在下载好的文件中已经包含编译后的.hex文件)
Proteus导入代码步骤
打开Proteus文件,右键STM32芯片,点击编辑属性,再点击Program File,选中源码编译得到的Project.hex(上个步骤得到的文件)

首次上电
固件导入成功后,点击Proteus左下角的
按键,系统开始运行,OLED 将显示锁定界面:

- 第 1 行:标题
-----LOCK----- - 第 2 行:密码输入区,显示已输入的数字(初始为空)
- 第 4 行:锁定状态
OFF(未开锁)和剩余尝试次数3
首次使用的默认密码为 111111。
操作指南
1. 输入密码
按下矩阵键盘上的数字键 0-9 输入密码。OLED 第 2 行实时显示已输入的数字。每次输入一位,最多 6 位。
输入过程中:
- 按 清除键(按键 14) 可清除所有已输入的数字,重新开始。
- 输入满 6 位后继续按键,蜂鸣器会短促响一声提示已输满。
2. 确认密码(按键 11)
输入完整 6 位密码后,按下 确认键(按键 11) 提交验证。
密码正确时:
- OLED 第 3 行显示
password right - 绿色 LED 亮起,红色 LED 熄灭
- 电磁锁打开
- 蜂鸣器响 1 次
- 第 4 行状态变为
ON - 剩余尝试次数重置为 3
密码错误时:
- OLED 第 3 行显示
password error - 红色 LED 亮起,绿色 LED 熄灭
- 蜂鸣器响 2 次
- 剩余尝试次数减 1

累计错误 3 次:
- 蜂鸣器连续响 5 次
- OLED 显示
Too many input和wait 5s - 系统锁定 5 秒,期间无法操作
- 5 秒后自动恢复,尝试次数重置为 3

3. 修改密码(按键 12)
前提条件:系统必须处于开锁状态(已正确输入密码解锁后)。
- 在键盘上输入新的 6 位密码。
- 按下 修改密码键(按键 12)。
- OLED 显示
UpdateComplete,表示修改成功。 - 新密码自动保存到 EEPROM,掉电后不会丢失。
如果在未开锁状态下按下此键,OLED 会提示 Please Open First。
如果在开锁状态下但未输满 6 位就按下此键,OLED 会提示 Update error Please input。
4. 查看密码(按键 13)
前提条件:系统必须处于开锁状态。
按下 显示密码键(按键 13),OLED 切换到密码显示界面:

显示 2 秒后自动返回主界面。此功能用于确认当前存储的密码。
如果在未开锁状态下按下此键,OLED 会提示 Please Open First。
5. 清除输入(按键 14)
按下 清除键(按键 14),立即清除所有已输入的数字,OLED 输入区恢复为空白。此操作在任何状态下都可执行。
6. 手动上锁(按键 15)
按下 上锁键(按键 15),系统立即回到锁定状态:
- 红色 LED 亮起,绿色 LED 熄灭
- 电磁锁关闭
- OLED 第 4 行状态变为
OFF
EEPROM 密码持久化说明
系统使用 24C02C EEPROM 芯片(256 字节)存储密码,地址从 0x00 开始,占用 6 个字节。
- 上电时:程序自动从 EEPROM 读取密码。如果 EEPROM 中的数据有效(首字节不为
0xFF且值在 0-9 范围内),则加载为当前密码;否则使用默认密码111111。 - 修改密码时:新密码同时写入内存和 EEPROM。
- 首次烧录:EEPROM 内容为空(全
0xFF),系统使用默认密码。
注意:如果 EEPROM 模块未接线或损坏,系统仍可正常工作,但密码不会持久保存,每次上电都会恢复为默认密码。
项目文件链接
通过网盘分享的文件:电子密码锁.zip
链接: https://pan.baidu.com/s/1X4rmL55QD1a14Jr0GvOKLw?pwd=nxqv 提取码: nxqv
更多推荐

所有评论(0)