基于51单片机密码锁—六位密码LCD1602显示

news2024/12/28 5:20:15

基于51单片机密码锁设计

(仿真+程序+设计报告)

功能介绍

具体功能:

1.密码为六位数字,有键按下,LCD1602就会显示出字符 “*”;

2.当用户键入正确密码后,再按确认键,便会开锁;

3.数字与数字之间输入的间隔时间为最长30秒;

4.当用户键入错误密码时,系统就会报警,由扬声器发出报警声,连续三次错误就会被锁定;

​演示视频:

基于51单片机密码锁—六位密码LCD1602显示 

添加图片注释,不超过 140 字(可选)

程序

/*******************************
*
*	 液晶字符显示函数
*
********************************************/
#include <AT89X52.h>
#include "液晶.h"
#include "function.h"
#include "fun_char.h"
#define uchar unsigned char 
#define uint unsigned int 
extern uchar mydata[6];
extern uchar testdata[6];
uchar code errorchar[]="PASSWORDERROR";
uchar code differentchar[]="it'sdifferent";
uchar code againchar[]="INPUTAGAIN!";
uchar code okchar[]="PASSWORDOK!";
uchar code lockchar[]="KEYISLOCK";
uchar code resetchar[]="NEWPASSWORD";
uchar code initchar[]="INPUTPASSWORD";
/*******************************************
*函数名称:delayms( )  延时函数
*函数作用:
         延时时间 t ms

*********************************************/	
void delayms(uint t)//
{
   uint i,j;
   for(i=0;i<t;i++)
      for(j=0;j<110;j++);
}
/*******************************************
*函数名称:init_char( )	 初始化字符显示
*函数作用:
          系统启动后,初始化字符显示,并读取密码值
*********************************************/	
void init_char() reentrant
{
	 uchar i;
	 
	 lcd_wcmd(0x01);//首先要清屏
     delayms(10);
	 for(i=0;i<6;i++)
	 {
	   mydata[i]=0;
	 }
	 /*
	 // 非常重要。。。。忘记密码,打开这个地方,系统会重新设置初始密码。。012345
	 for(i=0;i<6;i++)	 //	这个部分是向存储器中写密码的,也就是如果你忘记密码了,可以通过这个地方写入新的密码
	 {
	   testdata[i]=i;//初始密码为012345
	 }
	 delayms(10);
	 ISendStr(AT24C02,0, &testdata[0],6); //读取	默认密码已经保存了,全为000,000
	 delayms(10);  
	  for(i=0;i<6;i++)
	 {
	   testdata[i]=0;//初始密码为,012345
	 }	
	 
	  */
	 
	 				  
	 //初始化字符	 
     for(i=0;i<13;i++)
	 {
	   if(i<5)
	   {
	     lcd_pos(i+2);
	   }
	   else
	   { 	   
	   	 lcd_pos(i+3);
	   }
	   lcd_wdat(*(initchar+i));
	 }
	 //INPUT PASSWORD
	 delayms(10); 
	 IRcvStr(AT24C02,0, &testdata[0],6); //读取	默认密码已经保存了,全为000,000
	 delayms(10);

}
/*******************************************
*函数名称:error_char( )	 错误提示字符显示
*函数作用:
         当输入的密码与存储器中的密码不一致时,提示报错
********************************************/
void error_char()
{
     uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<13;i++)
	 {
	   if(i<8)
	   {
	     lcd_pos(i+1);
	   }
	   else
	   {
	   
	   	 lcd_pos(i+2);
	   }
	   lcd_wdat(*(errorchar+i));
	 }
}
/*******************************************
*函数名称:different_char( )	密码不同提示字符显示
*函数作用:
          当设置密码时,如果两次输入的通过,则提示输入
		  字符不同
*********************************************/	
void different_char()
{
     uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<13;i++)
	 {
	   if(i<4)
	   {
	     lcd_pos(i+1);
	   }
	   else
	   {
	   
	   	 lcd_pos(i+2);
	   }
	   lcd_wdat(*(differentchar+i));
	 } 
}
/*******************************************
*函数名称:again_char( )	再次输入密码
*函数作用:
          当设置密码时,第一次输入密码后,提示再次输入密码
*********************************************/	
void again_char()
{
     uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<11;i++)
	 {
	   if(i<5)
	   {
	     lcd_pos(i+2);
	   }
	   else
	   { 	   
	   	 lcd_pos(i+3);
	   }
	   lcd_wdat(*(againchar+i));
	 }

}
/*******************************************
*函数名称:ok_char( )	输入密码正确提示函数
*函数作用:
          输入密码正确,提示PASSWORD OK
*********************************************/	
void ok_char()
{
     uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<11;i++)
	 {
	   if(i<8)
	   {
	     lcd_pos(i+2);
	   }
	   else
	   {
	   
	   	 lcd_pos(i+3);
	   }
	   lcd_wdat(*(okchar+i));
	 }
}
/*******************************************
*函数名称:lock_char( )	  系统锁定提示字符
*函数作用:
           当输入密码错误次数达到3次时,开始锁键盘
*********************************************/	
void lock_char()
{
     uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<9;i++)
	 {
	   if(i<3)
	   {
	     lcd_pos(i+3);
	   }
	   else if(i<5)
	   {
	   
	   	 lcd_pos(i+4);
	   }
	   else
	   {
	   	 lcd_pos(i+5);
	   }
	   lcd_wdat(*(lockchar+i));
	 }
}
/*******************************************
*函数名称:reset_char( )	设定新的密码
*函数作用:
         当设定新的密码时,提示NEW PASSWORD
*********************************************/	
void reset_char()
{
      
	 uchar i=0;
	 lcd_wcmd(0x01);//首先要清屏
     delayms(100);
	 for(i=0;i<11;i++)//这里出现了问题的
	 {
	   if(i<3)
	   {
	     lcd_pos(i+2);
	   }
	   else
	   {
	   
	   	 lcd_pos(i+3);
	   }
	   lcd_wdat(*(resetchar+i)); 
	  }
}	

硬件设计

使用元器件:

单片机:AT89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

流程图:

 

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用Keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计报告

五千字设计报告,具体如下!

添加图片注释,不超过 140 字(可选)

04设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件 、设计报告、流程图等。具体内容如下,全网最全! !

 

可以关注下方公众号!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1865513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HistoQC|病理切片的质量控制工具

小罗碎碎念 这期推文介绍的内容&#xff0c;我相信研究病理组学的人&#xff0c;一定都非常熟悉——HistoQC——病理切片的质量控制。 之前写过Hover Net系列的推文&#xff0c;反响还可以&#xff0c;但是Hover Net是用于细胞核检测和分类的&#xff0c;直接从这里开始还不够系…

应用程序任务驱动:详细解析LLM的评估指标

在自然语言处理(NLP)的动态环境中&#xff0c;大型语言模型(LM)性能的评估是衡量其在各种下游应用程序中的有效性的关键因素。不同的应用程序需要与其目标一致的不同性能指标。本文将详细介绍各种LLM评估指标&#xff0c;探索它们如何应用于实际场景。 从传统的摘要任务到更细…

华三中小企业组网

一、组网需求 在中小园区中&#xff0c;S5130系列或S5130S系列以太网交换机通常部署在网络的接入层&#xff0c;S5560X系列或 S6520X系列以太网交换机通常部署在网络的核心&#xff0c;出口路由器一般选用MSR系列路由器。 核心交换机配置VRRP保证网络可靠性。园区网中不同的…

python flask 入门-helloworld

学习视频链接&#xff1a; 01-【前奏】课程介绍_哔哩哔哩_bilibili 1.安装flask pip install flask 踩坑记&#xff1a;本机不要连代理&#xff0c;否则无法install 提示报错valueError: check_hostname requires server_hostname 2.程序编写 在根目录下创建 app.py fr…

深入探讨C++的高级反射机制(2):写个能用的反射库

在现代软件开发中&#xff0c;反射是一种强大的特性&#xff0c;它可以支持程序在运行时查询和调用对象的属性和方法。 但是在C中&#xff0c;没有内置的反射机制。我们可以通过一些巧妙的技术模拟反射的部分功能。 上一篇文章写了个简单的反射功能&#xff0c;这回完善一下&a…

Linux-笔记 OverlayFS文件系统入门

目录 前言 主要概念 工作原理 特点特性 1、上下合并 2、同名文件覆盖 3、同名目录合并 4、写时拷贝 实操入门 内核配置 挂载文件系统 验证 1、同名文件覆盖 2、同名目录合并 3、写时拷贝 1&#xff09;验证新增文件或目录 2&#xff09;验证修改文件 3&…

[leetcode]assign-cookies. 分发饼干

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i…

【嵌入式Linux】i.MX6ULL GPIO 中断服务函数注册与编写

文章目录 1 外部中断初始化与中断服务函数1.2 外部中断初始化函数 exti_init1.2.1 GPIO引脚配置1.2.2 中断使能与注册1.2.3 GIC_EnableIRQ()函数的分析 1.3 中断服务函数 gpio1_io20_irqhandler1.3.1 消抖处理1.3.2 中断事件处理1.3.3 清除中断标志 2 BUG处理2.1 问题描述2.2 解…

【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为推动科技进步的重要力量。而在NLP领域&#xff0c;Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度&#xff0c;为您深…

泰迪智能科技大数据挖掘企业服务平台典型合作案例介绍

泰迪大数据挖掘企业服务平台 是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具&#xff0c;能够一体化地完成数据集成、模型构建、模型发布&#xff0c;为数据分析、探索、服务流程提供支撑&#xff0c;提供完整的数据探索、多数据源接入、特征处理、模型…

编程设计思想

健康检查脚本 nmap:扫描端口 while true do healthycurl B:httpPORT/healthy -i | grep HTTP/1.1 | tail -n 1 | awk {print $2} done 批量操作类型脚本&#xff08;记录每一步日志&#xff09; 将100个nginx&#xff1a;vn推送到harbor仓库192.168.0.100 根据镜像对比sha值…

高效修复机床导轨磨损,保障加工精度!

机床导轨是支承和引导运动构件沿着一定轨迹运动的传动装置&#xff0c;在机器设备中是个十分重要的部件&#xff0c;在机床中是常见的部件。机床的加工精度与导轨精度有直接的联系&#xff0c;且导轨一旦损坏&#xff0c;维修较复杂且困难。我们简单总结了以下几点对于机床导轨…

rocketMQ消息中间件,onMessage报错,MessageExt of onessage method is not supported

本地启动不会报错&#xff0c;生产者和消费者都运行的好好的&#xff0c;但是打包之后就不断的报错误&#xff0c; 起初以为是maven出现了问题&#xff0c;但是刷新和重写都不管用&#xff0c;并且打的jar包解压后发现类里 有这个类和方法。最后认为是打包出现问题 解决方式&am…

SEO之竞争对手研究

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 竞争对手研究是市场竞争研究的重要部分&#xff0c;对判断特定关键词竞争程度及了解行业整体情况非常有价值。…

AutoStudio: 开源 AI 漫画创作神器

AutoStudio是一个用于生成系列连续且一致的图片系统&#xff0c;可用于漫画创作&#xff0c;其核心由四个 Agent 组成&#xff1a; 主题管理器&#xff1a;理解用户对话&#xff0c;跟踪角色信息。 布局生成器&#xff1a;确定图像中角色的位置。 监督者&#xff1a;给出改进…

昇思25天学习打卡营第3天|张量Tensor

张量Tensor 概念创建张量&#xff08;4种方式&#xff09;张量的属性张量索引张量运算Tensor与NumPy转换 概念 张量&#xff08;Tensor&#xff09;是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。张量是MindSpore网络运算中的基本数据结构。 创建张量&#xff08;4…

离线安装docker-v26.1.4,compose-v2.27.0

目录 ​编辑 1.我给大家准备好了提取即可 2.安装docker和compose 3.解压 4.切换目录 5.执行脚本 6.卸载docker和compose 7.执行命令 “如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历&#xff0c;…

【Academy】测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities

测试WebSockets安全漏洞Testing for WebSockets security vulnerabilities 概述WebSockets是什么?HTTP和WebSockets有什么区别&#xff1f;如何建立WebSocket连接&#xff1f;WebSocket消息看起来像什么&#xff1f; 操纵WebSocket流量拦截和修改WebSocket消息重放和生成新的W…

揭示优化Prompt的秘诀:如何让API表现媲美网页版

为什么用GPT API&#xff08;GPT-3.5-turbo&#xff09;进行程序分析时&#xff0c;效果好像比网页版的GPT-3.5差一点&#xff1f;这可能有几个原因&#xff0c;咱们细说一下。 1. Prompt不同 这是最常见的问题之一。API调用时的指令&#xff08;prompt&#xff09;往往比较简…

【C#】找不到属性集方法。get只读属性用了反射设置setValue肯定报错

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 背景 找不到属性集方法。get只读属性用了反射设置setValue肯定报错 报错…