当前位置: 首页 > news >正文

【51单片机仿真】基于51单片机设计的智能六位密码锁(匿*输入/密码修改/警示/保存/恢复/初始密码)源码仿真设计文档演示视频——文末资料下载

基于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单片机的密码锁系统。功能简介:能够从键盘中输入密码,并相应地在显示器上显示"*";能够判断密码是否正确,正确则开锁,错误则输出相应信息; 能够实现密码的修改;在操作错误到达一定次数后能够报警;备用密码为,初始密码,在功能上实用性更强,利用中断按钮清除用户密码,恢复初始密码;断电或者单片机复位后能够保存之前的操作,如初密码。

图-系统整体框图

第二章 硬件设计

 

图-系统仿真电路

硬件设计包括以下主要部分:

  1. AT89C51单片机:系统的核心控制单元。
  2. 键盘矩阵:用于用户输入密码。
  3. LCD1602液晶显示器:用于显示操作提示和反馈信息。
  4. 蜂鸣器:用于报警提示。
  5. 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个按键。每个按键对应一个数字或功能,如下表所示:

行\列0123
0123A
1456B
2789C
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语言编写,主要实现以下功能:

  1. 初始化:包括I2C总线初始化、LCD初始化和密码初始化。
  2. 密码输入与验证:通过键盘输入密码,并与存储的密码进行比较。
  3. 报警功能:当输入密码错误次数超过设定值时,触发报警。
  4. 密码修改:允许用户通过按键输入新密码并进行存储。

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); // 写一个字符后地址指针加1write_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文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89626296

相关文章:

【51单片机仿真】基于51单片机设计的智能六位密码锁(匿*输入/密码修改/警示/保存/恢复/初始密码)源码仿真设计文档演示视频——文末资料下载

基于51单片机设计的智能六位密码锁 演示视频 基于51单片机设计的智能六位密码锁 功能简介 - 能够从键盘中输入密码&#xff0c;并相应地在显示器上显示"*" - 能够判断密码是否正确&#xff0c;正确则开锁&#xff0c;错误则输出相应信息 - 能够实现密码的修改 -…...

【Vue3】组件通信之mitt

【Vue3】组件通信之mitt 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…...

状态压缩动态规划——状压dp

状压dp&#xff1a;意思是将状态进行压缩&#xff0c;从而更容易地写出状态转移方程 通常做法&#xff1a;将每个状态&#xff08;一个集合&#xff09;用二进制表示&#xff0c;每个位的1就代表着这个编号的元素存在&#xff0c;0就代表着这个编号的元素不存在&#xff0c;如…...

【算法】最短路径算法思路小结

一、基础&#xff1a;二叉树的遍历->图的遍历 提到搜索算法&#xff0c;就不得不说两个最基础的思想&#xff1a; BFS&#xff08;Breadth First Search&#xff09;广度优先搜索 DFS&#xff08;Depth First Search&#xff09;深度优先搜索 刚开始是在二叉树遍历中接触这…...

zabbix7.0TLS-05-快速入门-触发器

文章目录 1 概述2 查看主机的触发器3 添加触发器3.1 触发器配置项介绍3.2 扩展文档3.2.1 关于配置项中每个键值返回值的说明3.2.2 触发器函数文档 4 验证触发器5 问题5.1 查了问题总列表5.2 查看问题详情5.3 更新处理问题5.4 查看已经处理的问题 6 问题恢复 1 概述 监控项用于…...

vue关于双向数据绑定的骚操作

组件传值大家都知道 直接上代码 computed: {optionModel: {get() {return this.selectedWidget.options;},set(newValue) {this.selectedWidget.options newValue;}}} 我们将optionModel传递给子组件 子组件可以直接修改props 来实现双向数据绑定 但是正常来时我们是不能修…...

基于Jeecgboot3.6.3的vue3版本的流程中仿钉钉流程的鼠标拖动功能支持

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为原先仿钉钉流程里不能进行鼠标拖动来查看流程&#xff0c;所以根据作者提供的信息进行修改&#xff0c;在hooks下增加下面文件useDraggableScroll.ts import { ref, onMounted, on…...

Docker Compse单机编排

一.Docker Compse 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;你可以使用 YAML 文件来配置应用程序的服务、网络和卷&#xff0c;然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程…...

“AI+Security”系列第2期(一):对抗!大模型自身安全的攻防博弈

近日&#xff0c;由安全极客、Wisemodel 社区和 InForSec 网络安全研究国际学术论坛联合主办的“AISecurity”系列第 2 期——对抗&#xff01;大模型自身安全的攻防博弈线上活动如期举行。本次活动邀请了君同未来创始人兼 CEO 韩蒙、前阿里云高级安全专家郑瀚、ChaMd5 AI 组负…...

Python Static Typing: 提升代码可靠性与可读性的使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

Datawhale多模态赛事(1)

赛事说明&#xff1a;https://tianchi.aliyun.com/competition/entrance/532251/introduction?spma2c22.12281925.0.0.2f307137p8qZmp 学习平台&#xff1a;https://linklearner.com/home 第一天 1.报名赛道学习赛事 https://tianchi.aliyun.com/competition/entrance/53225…...

云手机在海外社交媒体运营中的作用

随着社交媒体的全球普及&#xff0c;海外社交媒体运营成为众多企业与个人提升品牌影响力和扩大市场份额的重要策略。在这一进程中&#xff0c;海外云手机以其独特的功能&#xff0c;为海外社交媒体运营提供了强大的支持。 那么&#xff0c;海外云手机在海外社交媒体运营中究竟扮…...

Ubuntu怎么进入救援模式或单用户模式

进入救援模式&#xff08;Rescue Mode&#xff09;或单用户模式&#xff08;Single User Mode&#xff09;的方法取决于你所使用的Linux发行版。以下是通用的步骤&#xff0c;适用于大多数基于GRUB引导的系统&#xff0c;如Ubuntu、Debian、CentOS等&#xff1a; 重启你的系统。…...

学习鸿蒙-构建私有仓储

1.选择 鸿蒙提供ohpm-repo工具用于构建本地私有仓储 ohpm-repo下载 2.环境配置 安装node&#xff0c;ohpm-repo 支持 node.js 18.x 及以上版本 node最新版本下载 3.配置文件及运行 1.解压 ohpm-repo 私仓工具包 2.进入 ohpm-repo 解压目录的 conf 目录内&#xff0c;打开 c…...

经验是负债,学习是资产

经验是负债&#xff0c;学习是资产 经验是负债&#xff0c;学习是资产。这是李嘉诚先生的一句名言。他一语道出了学习在企业发展中的推动作用。 企业家经营的目的&#xff0c;无非就是将利润最大化。企业能够产生利润&#xff0c;靠的是提升自身业绩、降低运营成本&#xff0c;…...

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭&#xff0c;转眼间已经来到了2024年的立秋&#xff0c;在这个数字技术快速发展的时代&#xff0c;电脑录屏技术已经成为了一项不可或缺的技能&#xff0c;无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢&#xff1f;接下来&#xff0c;…...

Docker资源隔离的实现策略以及适用场景

Docker通过多种技术实现资源隔离&#xff0c;确保不同容器之间相互独立并有效利用主机资源。 以下是Docker资源隔离的主要实现策略以及适用场景&#xff1a; 实现策略 1、命名空间&#xff08;Namespaces&#xff09; 进程命名空间&#xff08;PID Namespace&#xff09;: 隔…...

PLL基本原理、设计及应用

PLL基本原理 锁相环&#xff08;Phase-Locked Loop, PLL&#xff09;是一种基本的反馈控制系统&#xff0c;广泛应用于电子通信、信号处理、时钟同步等多个领域。PLL通过反馈机制锁定输入信号的频率和相位&#xff0c;从而实现输出信号与输入信号的同步。其基本工作原理可以概…...

Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能

效果如下&#xff1a; #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_h__#include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget>#include <QLabel> #include <QWidget> #include <QMou…...

2024下半年国际学术会议一览表

在科技与人文的交汇点&#xff0c;2024年的国际学术会议季即将拉开帷幕&#xff0c;一系列聚焦于计算机科学与人工智能、工程与技术、教育与社会科学的盛会&#xff0c;不仅展示了全球学术研究的最新成果&#xff0c;更促进了跨学科交流与合作&#xff0c;为未来的科技发展与社…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...