当前位置: 首页 > 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;为未来的科技发展与社…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...