基于51单片机智能电子密码锁密码箱保险柜系统设计

发布于:2025-09-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

基于51单片机智能电子密码锁密码箱保险柜系统设计

1 功能介绍

本系统基于STC89C52单片机,结合LCD1602液晶显示、继电器、蜂鸣器、AT24C02存储器、4*4矩阵键盘等电路模块,实现了一个功能较为完善的智能电子密码锁保险柜系统。系统的主要功能包括:

  1. 密码输入与验证:支持6位数字密码,输入正确后驱动继电器动作,打开锁具。
  2. 密码设置与修改:在输入原始密码验证成功后,可修改密码,修改时需输入两次相同的新密码进行确认,避免误操作。
  3. 安全保护功能:若连续输入错误3次密码,系统会自动锁定键盘1分钟,并启动蜂鸣器报警,提示用户注意安全。
  4. 掉电保存功能:系统利用AT24C02存储器保存密码,即使断电,密码也不会丢失。用户可随时修改并保存新密码。
  5. 输入清除功能:在密码输入过程中,可以通过清除键逐位删除输入的数字,方便用户操作。
  6. 液晶背光节能功能:若30秒内无按键输入,LCD背光会自动关闭以节约电能。当检测到按键输入时,背光自动点亮。
  7. 管理员功能:系统设有管理员密码,当用户忘记密码时,可以通过管理员密码恢复出厂初始密码,避免柜体被永久锁死。
  8. 强制恢复功能:若管理员密码也遗忘,可通过长按“恢复键”3秒来强制恢复初始密码,避免误操作的同时提供了双重保险。

初始密码:123123
管理员密码:520025

通过这些功能,系统不仅能够保障密码锁的安全性,还能够为用户提供方便、灵活的操作体验。


2 系统电路设计

系统硬件设计由以下几个部分组成:

2.1 单片机最小系统电路

本设计采用STC89C52单片机作为核心控制器。该芯片基于8051内核,具备丰富的I/O口资源,完全能够满足键盘扫描、液晶显示、继电器控制、存储器通信等功能需求。其最小系统主要包括电源电路、时钟电路和复位电路,确保系统稳定运行。

2.2 LCD1602液晶显示电路

LCD1602液晶作为人机交互界面,用于显示提示信息、输入密码状态、报警信息等。通过单片机的IO口与液晶的RS、RW、E以及数据总线相连,实现对液晶的初始化、数据写入、字符显示等操作。

2.3 4*4矩阵键盘电路

矩阵键盘由16个按键组成,用于密码输入、确认、清除、修改密码等功能操作。采用行列扫描的方式,单片机控制行信号,逐行扫描,再读取列信号,以确定按下的按键。

2.4 存储器电路

采用AT24C02存储器作为密码保存模块,支持I²C总线通信。单片机通过SCL和SDA与存储器进行数据交互,将修改后的密码存入EEPROM中,确保掉电后仍能保存密码信息。

2.5 继电器驱动电路

继电器作为锁具的执行器件,由单片机输出IO口通过三极管驱动。当密码输入正确时,单片机输出高电平,驱动继电器吸合,从而打开锁具。

2.6 蜂鸣器报警电路

蜂鸣器作为报警提示器件,与单片机IO口相连。当密码错误达到3次或系统进入报警状态时,单片机输出信号控制蜂鸣器鸣叫,提示用户注意。

2.7 电源电路

电源电路提供稳定的+5V直流电压,供单片机、液晶、存储器和外围电路使用。通过电源滤波和稳压电路保证系统的稳定性。


3 程序设计

系统程序设计主要包括初始化程序、键盘扫描程序、LCD显示程序、存储器读写程序、密码验证程序以及报警控制程序。以下对各部分程序进行详细介绍。

3.1 主程序设计

主程序作为系统的核心逻辑,负责调用各个子模块程序,并根据状态进行控制。

#include <reg52.h>
#include "lcd1602.h"
#include "keypad.h"
#include "at24c02.h"
#include "delay.h"

unsigned char input_pwd[6];  
unsigned char saved_pwd[6];  
unsigned char admin_pwd[6] = {5,2,0,0,2,5};  
unsigned char error_count = 0;

void main() {
    lcd_init();
    at24c02_read(saved_pwd, 0, 6);  // 从EEPROM读取密码
    lcd_show_string(0, 0, "Password Lock");
    delay_ms(1000);

    while(1) {
        get_password(input_pwd);  // 获取输入密码
        if(check_password(input_pwd, saved_pwd)) {
            lcd_clear();
            lcd_show_string(0, 0, "Unlock Success");
            relay_on();
            delay_ms(5000);
            relay_off();
        } else {
            error_count++;
            lcd_clear();
            lcd_show_string(0, 0, "Error Password");
            buzzer_on();
            delay_ms(1000);
            buzzer_off();
            if(error_count >= 3) {
                lock_system();  // 锁定系统
            }
        }
    }
}

3.2 键盘扫描程序

键盘扫描用于检测用户输入的按键,支持数字、确认、清除等操作。

unsigned char key_scan() {
    unsigned char row, col, key = 0xFF;
    for(row = 0; row < 4; row++) {
        P1 = ~(0x01 << row);  
        col = P1 & 0xF0;  
        if(col != 0xF0) {
            delay_ms(10);  
            col = P1 & 0xF0;  
            if(col != 0xF0) {
                key = row * 4 + (col >> 4);  
                while(P1 != 0xF0);  
            }
        }
    }
    return key;
}

3.3 LCD1602显示程序

液晶显示用于提示用户输入状态和显示相关信息。

void lcd_show_password(unsigned char *pwd, unsigned char len) {
    unsigned char i;
    lcd_set_cursor(1, 0);
    for(i = 0; i < len; i++) {
        lcd_write_data('*');  
    }
}

3.4 AT24C02存储器程序

用于密码的掉电保存与读取。

void save_password(unsigned char *pwd) {
    unsigned char i;
    for(i = 0; i < 6; i++) {
        at24c02_write(i, pwd[i]);
        delay_ms(5);
    }
}

void load_password(unsigned char *pwd) {
    unsigned char i;
    for(i = 0; i < 6; i++) {
        pwd[i] = at24c02_read(i);
    }
}

3.5 密码验证程序

bit check_password(unsigned char *input, unsigned char *saved) {
    unsigned char i;
    for(i = 0; i < 6; i++) {
        if(input[i] != saved[i]) return 0;
    }
    return 1;
}

3.6 报警与锁定程序

void lock_system() {
    unsigned int i;
    lcd_clear();
    lcd_show_string(0, 0, "System Locked");
    for(i = 0; i < 60; i++) {  
        buzzer_on();
        delay_ms(500);
        buzzer_off();
        delay_ms(500);
    }
    error_count = 0;  
}

4 总结

本设计基于STC89C52单片机,实现了一个功能丰富、操作灵活且安全性高的智能电子密码锁系统。通过液晶显示、矩阵键盘、继电器、蜂鸣器和存储器的配合,系统能够支持密码输入与验证、密码修改、掉电保存、错误报警以及管理员恢复功能。特别是双重保护机制的设计,增强了系统的实用性和安全性。

该设计不仅能够用于家庭保险柜、智能箱包等小型场景,还可以扩展到更大规模的智能门锁系统,为用户提供更高效、更安全的使用体验。