基于51单片机设计的智能六位密码锁
演示视频
基于51单片机设计的智能六位密码锁
功能简介
- 能够从键盘中输入密码,并相应地在显示器上显示"*"
- 能够判断密码是否正确,正确则开锁,错误则输出相应信息
- 能够实现密码的修改
- 在操作错误到达一定次数后能够报警
- 备用密码为,初始密码,在功能上实用性更强,利用中断按钮清除用户密码,恢复初始密码
- 断电或者单片机复位后能够保存之前的操作,如初密码
摘要: 本文介绍了一种基于AT89C51单片机的密码锁系统的综合设计与实现。该系统结合硬件和软件组件,提供了一种安全且用户友好的访问控制解决方案。硬件设计包括用于密码输入的键盘、用户界面的液晶显示器和用于报警功能的蜂鸣器。软件部分负责密码验证、用户交互和安全功能。本文详细描述了该系统的原理图、电路设计、软件算法和功能测试。
目录
第一章 引言
第二章 硬件设计
2.1 AT89C51单片机
2.2 键盘矩阵
2.3 LCD1602液晶显示器
2.4 蜂鸣器
2.5 24C02 EEPROM
第三章 软件设计
3.1 初始化
3.2 密码输入与验证
3.3 报警功能
3.4 密码修改
第四章 功能测试
4.1 密码输入测试
4.2 密码验证测试
4.3 密码修改测试
4.4 报警功能测试
第五章 总结
完整系统工程资料下载链接
第一章 引言
密码锁系统在许多场景中广泛应用,例如家庭安全、办公室门禁和保险箱等。一个可靠的密码锁系统不仅需要硬件的稳定性,还需要软件的灵活性和安全性。本文通过详细的设计和实现,展示了如何构建一个基于AT89C51单片机的密码锁系统。功能简介:能够从键盘中输入密码,并相应地在显示器上显示"*";能够判断密码是否正确,正确则开锁,错误则输出相应信息; 能够实现密码的修改;在操作错误到达一定次数后能够报警;备用密码为,初始密码,在功能上实用性更强,利用中断按钮清除用户密码,恢复初始密码;断电或者单片机复位后能够保存之前的操作,如初密码。
图-系统整体框图
第二章 硬件设计
图-系统仿真电路
硬件设计包括以下主要部分:
- AT89C51单片机:系统的核心控制单元。
- 键盘矩阵:用于用户输入密码。
- LCD1602液晶显示器:用于显示操作提示和反馈信息。
- 蜂鸣器:用于报警提示。
- 24C02 EEPROM:用于存储密码。
2.1 AT89C51单片机
AT89C51单片机是整个系统的核心控制单元,负责处理输入、控制输出并进行密码验证。其主要特性包括:
- 8位处理器,支持多种I/O操作
- 内置128字节RAM和4KB ROM
- 支持串行通讯接口
AT89C51单片机引脚示意图如下:
- VCC (40): 电源正极
- GND (20): 电源负极
- XTAL1 (19) 和 XTAL2 (18): 接外部晶振
- P0.0 - P0.7 (39 - 32): 8位双向I/O口,用于数据总线
- P1.0 - P1.7 (1 - 8): 8位双向I/O口,用于控制信号
- P2.0 - P2.7 (21 - 28): 8位双向I/O口,用于地址总线
- P3.0 - P3.7 (10 - 17): 8位双向I/O口,用于特殊功能
2.2 键盘矩阵
键盘矩阵用于用户输入密码,采用4x4矩阵设计,共有16个按键。每个按键对应一个数字或功能,如下表所示:
行\列 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 1 | 2 | 3 | A |
1 | 4 | 5 | 6 | B |
2 | 7 | 8 | 9 | C |
3 | * | 0 | # | D |
键盘矩阵的每一行和每一列都连接到单片机的I/O口,通过扫描行和列来检测按键的状态。例如,行0连接到P1.0,列0连接到P1.4。当按键1被按下时,P1.0将被拉低,通过读取P1.4的状态来确定按键1被按下。
2.3 LCD1602液晶显示器
LCD1602液晶显示器用于显示操作提示和反馈信息,连接到单片机的P2口。它支持16x2字符显示,提供了基本的显示功能。LCD1602的引脚连接如下:
- VSS (1): 接地
- VDD (2): 电源正极
- VO (3): 对比度调整端,接一个可变电阻
- RS (4): 寄存器选择信号,接P2.7
- RW (5): 读/写选择信号,接P2.6
- E (6): 使能信号,接P2.5
- D0-D7 (7-14): 数据总线,接P0.0-P0.7
- A (15): 背光电源正极
- K (16): 背光电源负极
液晶显示器的初始化和显示字符由软件控制,通过发送命令和数据来实现。
2.4 蜂鸣器
蜂鸣器用于提示用户输入错误或系统报警,连接到单片机的P2.4口。当输入错误次数达到设定值时,蜂鸣器会响起警报声。蜂鸣器的引脚连接如下:
- 正极: 接P2.4
- 负极: 接地
通过控制P2.4的电平来控制蜂鸣器的开关,当P2.4输出高电平时,蜂鸣器响起;当P2.4输出低电平时,蜂鸣器关闭。
2.5 24C02 EEPROM
24C02 EEPROM用于存储和读取密码,通过I2C接口与单片机连接。EEPROM具有非易失性存储特性,断电后数据不会丢失。24C02的引脚连接如下:
- A0-A2 (1-3): 地址选择引脚,接地
- GND (4): 接地
- SDA (5): 数据线,接P2.1
- SCL (6): 时钟线,接P2.0
- WP (7): 写保护引脚,接地
- VCC (8): 电源正极
通过I2C总线协议与24C02通信,可以实现对EEPROM的读写操作。
第三章 软件设计
软件部分采用C语言编写,主要实现以下功能:
- 初始化:包括I2C总线初始化、LCD初始化和密码初始化。
- 密码输入与验证:通过键盘输入密码,并与存储的密码进行比较。
- 报警功能:当输入密码错误次数超过设定值时,触发报警。
- 密码修改:允许用户通过按键输入新密码并进行存储。
3.1 初始化
初始化函数包括I2C总线初始化、LCD初始化和密码初始化。具体代码如下:
void chushi() {
SDA = 1;
delay2();
SCL = 1;
delay2();
}
void LCD1602_init() {
E = 0;
write_com(0x38); // 设置16x2显示,5x7点阵,8位数据口
write_com(0x0c); // 设置开显示,不显示光标
write_com(0x06); // 写一个字符后地址指针加1
write_com(0x01); // 显示清0,数据指针清0
}
3.2 密码输入与验证
密码输入函数通过键盘矩阵扫描实现,密码验证函数将输入的密码与存储的密码进行比较。具体代码如下:
bit input_mima(uchar *mima) {
uchar i, key;
LCD1602_pos(1, 0);
for (i = 0; i < 7; i++) {
delay1(100);
if (i < 6) {
do {
key = keyscan();
} while (key == 0xff);
if ((key != 0x0f) && (key != 0x0a) && (key != 0x0c)) {
write_date('*');
mima[i] = key;
}
if (key == 0x0f) {
if (i > 0) {
LCD1602_pos(1, --i);
write_date(' ');
mima[i] = ' ';
LCD1602_pos(1, i);
i--;
}
}
if (key == 0x0c) {
LCD1602_pos(0, 0);
return 0;
}
}
if (i == 6) {
do {
key = keyscan();
} while ((key != 0x0f) && (key != 0x0c));
if (key == 0x0f) {
LCD1602_pos(1, --i);
write_date(' ');
mima[i] = ' ';
LCD1602_pos(1, i);
i--;
}
if (key == 0x0c) {
return 1;
}
}
}
}
3.3 报警功能
当输入密码错误次数超过设定值时,触发蜂鸣器报警。具体代码如下:
void baojing2() {
uchar i;
for (i = 0; i < 10; i++) {
baojing1();
}
}
3.4 密码修改
用户可以通过按键输入新密码并进行存储,具体代码如下:
void sfj2() {
uchar key, i;
uchar idata table2[6] = {' ', ' ', ' ', ' ', ' ', ' '};
uchar idata table3[6] = {' ', ' ', ' ', ' ', ' ', ' '};
uchar idata table4[6] = {' ', ' ', ' ', ' ', ' ', ' '};
key = step_choose();
if (key == 0x0b) {
read_n_add(table2, 0x00, 6);
write_com(0x06);
write_com(0x01);
write_com(0x0f);
LCD1602_pos(0, 0);
write_n_char("input password");
write_com(0x0f);
if (input_mima(table3)) {
if (sfj1(table3, table1) || sfj1(table3, table2)) {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password right ");
aa = 0;
delay1(500);
dd = 1;
while (dd) {
write_com(0x06);
write_com(0x01);
write_com(0x0f);
LCD1602_pos(0, 0);
write_n_char("In new password");
delay1(500);
if (input_mima(table3)) {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("Input new pass");
LCD1602_pos(1, 0);
write_n_char("word again");
delay1(800);
LCD1602_pos(0, 0);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_n_char("In new password");
if (input_mima(table4)) {
if (sfj1(table3, table4)) {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password has");
LCD1602_pos(1, 0);
write_n_char("change already");
write_n_add(table4, 0x00, 6);
delay1(1000);
dd = 0;
} else {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password wrong");
delay1(600);
aa++;
if (aa == 4) {
aa = 0;
i = 20;
while (i--)
baojing2();
}
dd = 0;
}
} else {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password wrong");
delay1(600);
aa++;
if (aa == 4) {
aa = 0;
i = 20;
while (i--)
baojing2();
}
}
} else {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password wrong");
delay1(600);
dd = 0;
aa++;
if (aa == 4) {
aa = 0;
i = 20;
while (i--)
baojing2();
}
}
}
} else {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password wrong");
delay1(600);
aa++;
if (aa == 4) {
aa = 0;
i = 20;
while (i--)
baojing2();
}
}
} else {
LCD1602_pos(0, 0);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_n_char("password wrong");
delay1(600);
aa++;
if (aa == 4) {
aa = 0;
i = 20;
while (i--)
baojing2();
}
}
}
}
第四章 功能测试
系统功能测试包括密码输入、密码验证、密码修改和报警功能的测试。测试环境搭建包括硬件连接和软件编译。
4.1 密码输入测试
通过键盘输入密码,LCD显示“*”号,验证密码输入功能。
4.2 密码验证测试
输入正确密码,系统显示“password right”,开锁并响一声提示。输入错误密码,系统显示“password wrong”,记录错误次数,超过三次触发报警。
4.3 密码修改测试
通过按键进入密码修改模式,输入新密码并确认,系统显示“password has change already”,新密码成功存储。
4.4 报警功能测试
连续输入错误密码三次,蜂鸣器连续报警,测试报警功能。
第五章 总结
本文详细介绍了基于AT89C51单片机的密码锁系统的设计与实现。系统通过硬件电路和软件算法的结合,实现了密码输入、密码验证、密码修改和报警等功能。测试结果表明,系统稳定可靠,具备良好的实用性和安全性。未来的改进方向包括增加无线通信功能,实现远程控制和管理。
完整系统工程资料下载链接
基于51单片机设计的智能六位密码锁(匿输入密码修改警示保存恢复初始密码)源码&仿真&设计文档&演示视频-毕设/课设/竞赛/实训资源-CSDN文库https://download.csdn.net/download/m0_61712829/89626296