单片机学习笔记---矩阵键盘密码锁
目录
一,设置密码按键
1.设置密码区域
2.设置输入的数字左移
3.设置记录按键的次数
二,设置确认键
1.密码正确时显示OK
2.密码错误时显示ERR
3.密码错误恢复初始状态重输
三,设置取消键
学了这么久,迫不及待想要做一个密码锁玩一玩,那直接进入正题!
这节我们可以直接创建一个跟上一节一模一样的工程文件。
可以直接复制粘贴上一节的工程文件,把名字改成矩阵键盘密码锁就可以了。
然后点击打开这个文件,就得到一个一模一样的工程了。
然后把上一节课的这一句代码改成Password
然后编译测试一下
没有错,可以继续了!
一,设置密码按键
我们想要把S1-S9定义为数字1-9,然后S10定义为0,为什么没有S0呢?
是因为0这个数字被占用了,作为一种没有按键按下的返回。
所以我们就把S10定义为0,S11作为确认键,S12作为取消键,S13-S16键不用。
开始写代码:
1.设置密码区域
需要再加一个if判断限制密码区
然后定义一个密码变量,类型是unsigned int,为什么是unsigned int?是因为它的取值范围是0-65535,为什么我们这个程序不用6位密码?因为六位的话已经超出unsigned int的取值范围了。
如果定义一个5位数的密码是99999的话就存不了,当然也可以改成unsigned long long类型,但是这样还受限于我们的LCD1602.c中的定义的LCD_ShowNum只支持0-65535,所以6位密码不好显示。
当然,如果你想的话也可以显示,比如可以定义一个数组,然后一位一位分开存,然后一位一位地显示。
但是为了简单,本节只显示4位密码,这样Unsigned int完全可以存的下了。
代码这样写
这里还需要改成Password
编译测试一下
按下9,松开就显示09
按下10松开就显示0
证明这段代码没有问题,继续!
2.设置输入的数字左移
我们需要把输入的上一个数字挪到左边去,代码这样写:
为什么这样写呢?
比如密码刚开始等于0000,然后输入一位密码1,按下1后就变成0001
如果再按下2,0001*10就变成 0010,再加上2,就是0012
如果再输入3,就是0012*10变成0120,再加上3,就是0123
搞明白了后,把先显示密码长度改成4
编译测试一下:
一次按下1 2 3 4后,屏幕上显示1234,效果正确!
如果再继续按5的话,最高位的1就不见了
如果按6的话,就显示错误,是因为超出了取值范围,就显示别的了。
3.设置记录按键的次数
所以我们接下来要写一段程序判断按下的次数
当输入超过4位,就不让用户继续输入了。
再定义一个变量Count用来计数:
测试一下:
当按第五次的时候,就不再有反应了,是我们想要实现的效果!
我们可以把这段代码挪上来
二,设置确认键
1.密码正确时显示OK
然后再加一个if判断,如果按下的密码正确则显示OK
测试一下:
正确!
2.密码错误时显示ERR
如果输入的密码不正确,就显示err错误
测试一下:
不等于正确密码,显示err
3.密码错误恢复初始状态重输
提示错误后,还得让人家继续输入,所以要恢复初始状态
正确与否都应该清零,才能让人重新输入。
测试一下:
按下1234后,显示错误
但是显示没有清零,但其实变量已经清零
所以我们还需要更新一下显示:
再测试一下:
输入1234错误后,提示ERR,并清零
重新输入2345,按下确认
显示OKR,并清零
为什么是显示OKR不是OK?
因为我们前面输错密码显示了ERR,现在显示OK才占两个字符,可以在OK后面加个空格占一个字符,覆盖R
再测试一下:
这样就没有多出来一个R了
三,设置取消键
接下来还需要设置一个取消键,如果人家输到一半密码发现输错了,按取消,重新输。
测试一下:
输入2345,点取消
什么都没有显示,直接清零
输1234,点击确认显示ERR
输2345,点击确认,显示OK
OK和ERR都会清零
以上就是本节想要实现的效果。
这节的代码比较多,如果出错,可以最好是边写边测试。
本节所有的程序源码评论区自取。
如果有问题可以私信我评论区留言,谢谢!
相关文章:

单片机学习笔记---矩阵键盘密码锁
目录 一,设置密码按键 1.设置密码区域 2.设置输入的数字左移 3.设置记录按键的次数 二,设置确认键 1.密码正确时显示OK 2.密码错误时显示ERR 3.密码错误恢复初始状态重输 三,设置取消键 学了这么久,迫不及待想要做一个密…...

8-小程序数据promise化、共享、分包
小程序API Promise化 wx.requet 官网入口 默认情况下,小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…...

[HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...

Threejs 展示——obj 格式模型导入
文章目录 需求分析1. HTML版本2. Vue 版本 需求 导入obj 格式的模型数据 分析 .obj:Wavefront OBJ 格式,是一种广泛使用的三维模型文件格式。预览 .obj格式文件的软件可点此下载需要准备两种格式的数据,如下所示 1. HTML版本 html <!…...

深入浅出 diffusion(3):pytorch 实现 diffusion 中的 U-Net
导入python包 import mathimport torch import torch.nn as nn import torch.nn.functional as F silu激活函数 class SiLU(nn.Module): # SiLU激活函数staticmethoddef forward(x):return x * torch.sigmoid(x) 归一化设置 def get_norm(norm, num_channels, num_groups)…...

C#使用RabbitMQ-2_详解工作队列模式
简介 🍀RabbitMQ中的工作队列模式是指将任务分配给多个消费者并行处理。在工作队列模式中,生产者将任务发送到RabbitMQ交换器,然后交换器将任务路由到一个或多个队列。消费者从队列中获取任务并进行处理。处理完成后,消费者可以向…...

Day37 56合并区间 738单调递增的数字 968监控二叉树
56 合并区间 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. class Solution { public:vector<vector<int>>…...

【Android】在WSA安卓子系统中进行新实验性功能试用与抓包(2311.4.5.0)
前言 在根据几篇22和23的WSA抓包文章进行尝试时遇到了问题,同时发现新版Wsa的一些实验性功能能优化抓包配置时的一些步骤,因而写下此篇以作记录。 Wsa版本:2311.40000.5.0 本文出现的项目: MagiskOnWSALocal MagiskTrustUserCer…...

【服务器】服务器的管理口和网口
服务器通常会有两种不同类型的网络接口,即管理口(Management Port)和网口(Ethernet Port),它们的作用和用途不同。 一、管理口 管理口通常是用于服务器管理的网络接口,也被称为外带网卡或带外接…...

一个小例子,演示函数指针
结构体里经常看到函数指针的写法,函数指针其实就是函数的名字。但是结构体里你要是直接把一个函数摆上去,那就变成成员变量,就会发生混乱 1. 函数指针 #include <unistd.h> #include <stdio.h>struct Kiwia{void (*func)(int )…...

python12-Python的字符串之使用input获取用户输入
input()函数用于向用户生成一条提示,然后获取用户输入的内容。由于input0函数总会将用户输入的内容放入字符串中,因此用户可以输入任何内容,input()函数总是返回一个字符串。例如如下程序。 # !/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2024/01# @Author : Lao…...

【代码随想录-数组】移除元素
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…...

springboot事务管理
/*spring事务管理注解:Transactional位置:业务(service)层的方法上、类上、接口上作用:将当前方法交给spring进行事务管理,方法执行前,开启事务:成功执行完毕,提交事务:出现常,回滚事务需要在配置文件是加上开启spring事务yml文件…...

数据结构——链式二叉树(2)
目录 🍁一、二叉树的销毁 🍁二、在二叉树中查找某个数,并返回该结点 🍁三、LeetCode——检查两棵二叉树是否相等 🌕(一)、题目链接:100. 相同的树 - 力扣(LeetCode&a…...

spring-boot-starter-validation常用注解
文章目录 一、使用二、常用注解三、Valid or Validated ?四、分组校验1. 分组校验的基本概念2. 定义验证组3. 应用分组到模型4. 在控制器中使用分组5. 总结 一、使用 要使用这些注解,首先确保在你的 Spring Boot 应用的 pom.xml 文件中添加了 spring-bo…...

AF700 NHS 酯,AF 700 Succinimidyl Ester,一种明亮且具有光稳定性的近红外染料
AF700 NHS 酯,AF 700 Succinimidyl Ester,一种明亮且具有光稳定性的近红外染料,AF700-NHS-酯,具有水溶性和 pH 值不敏感性 您好,欢迎来到新研之家 文章关键词:AF700 NHS 酯,AF 700 Succinimid…...

C#常见内存泄漏
背景 在开发中由于对语言特性不了解或经验不足或疏忽,往往会造成一些低级bug。而内存泄漏就是最常见的一个,这个问题在测试过程中,因为操作频次低,而不能完全被暴露出来;而在正式使用时,由于使用次数增加&…...

Xmind安装到指定目录
Xmind安装到指定目录 默认情况下安装包自动引导安装在C盘(注册表默认位置) T1:修改注册表,比较麻烦 T2:安装时命令行指定安装位置,快捷省事 1)下载安装包(exe可执行文件) 2)安装…...

[GXYCTF2019]BabyUpload1
尝试各种文件,黑名单过滤后缀ph,content-type限制image/jpeg 内容过滤<?,木马改用<script languagephp>eval($_POST[cmdjs]);</script> 上传.htaccess将上传的文件当作php解析 蚁剑连接得到flag...

SpringBoot之分页查询的使用
背景 在业务中我们在前端总是需要展示数据,将后端得到的数据进行分页处理,通过pagehelper实现动态的分页查询,将查询页数和分页数通过前端发送到后端,后端使用pagehelper,底层是封装threadlocal得到页数和分页数并动态…...

【shell-10】shell实现的各种kafka脚本
kafka-shell工具 背景日志 log一.启动kafka->(start-kafka)二.停止kafka->(stop-kafka)三.创建topic->(create-topic)四.删除topic->(delete-topic)五.获取topic列表->(list-topic)六. 将文件数据 录入到kafka->(file-to-kafka)七.将kafka数据 下载到文件-&g…...

【模型压缩】模型剪枝详解
参考链接:https://zhuanlan.zhihu.com/p/635454943 https 文章目录 1. 前言1.1 为什么要进行模型剪枝1.2 为什么可以进行模型剪枝2. 剪枝方式的几种分类2.1 结构化剪枝 和 非结构化剪枝2.1.1 结构化剪枝2.1.2 非结构化剪枝2.2 静态剪枝与动态剪枝2.2.1 静态剪枝2.2.2 动态剪枝…...

Log4j2-01-log4j2 hello world 入门使用
拓展阅读 Log4j2 系统学习 Logback 系统学习 Slf4j Slf4j-02-slf4j 与 logback 整合 SLF4j MDC-日志添加唯一标识 分布式链路追踪-05-mdc 等信息如何跨线程? Log4j2 与 logback 的实现方式 日志开源组件(一)java 注解结合 spring aop 实现自动输…...

Mysql-日志介绍 日志配置
环境部署 docker run -d -p 3306:3306 --privilegedtrue -v $(pwd)/logs:/var/lib/logs -v $(pwd)/conf:/etc/mysql/conf.d -v $(pwd)/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD654321 --name mysql mysql:5.7运行指令的目录下新建好这些文件: 日志类型 日…...

计算机网络的体系结构的各层在整个过程中起到什么作用?
ps:本文章的图片内容来源都是来自于湖科大教书匠的视频,声明:仅供自己复习,里面加上了自己的理解 这里附上视频链接地址:1.6 计算机网络体系结构(4)—专用术语_哔哩哔哩_bilibili 目录 &#x…...

如何在业务代码中优雅的使用策略模式?
策略模式介绍 假设你正在开发一个电商平台,其中涉及到商品的折扣策略。优惠策略有很多种可能,如领取优惠券抵扣、返现促销、拼团优惠等。最初的实现可能会在购物车类中嵌入各种折扣逻辑,导致代码的可维护性和扩展性下降。 下面代码在业务开…...

“docker-credential-desktop.exe“: executable file not found in $PATH 错误解决
"docker-credential-desktop.exe": executable file not found in $PATH 错误解决 1. 错误信息和解决方法 1. 错误信息和解决方法 错误信息, error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not …...

openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs
文章目录 openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs概述笔记END openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_…...

长虹智能电视6000iD、6080iD、3000iD、U2系列等 ZLM61HiPJ机芯升级刷机方法,附刷机数据
机芯:ZLM61HiPJ 适用机型:UD39B6000iD、UD42B6000iD、UD50B6000iD、UD55B6000iD、UD42C6000iD、UD42C6080iD、UD49C6000iD、UD49C6080iD、UD55C6000iD、UD55C6080iD、UD50C6000iD、UD58C3000iD、42U2 LE42C19S-UD、LE50C29SD-UD、 UD49C6000iD(LJM2W)、…...

六、VTK创建平面vtkPlaneSource
vtkPlaneSource创建位于平面中的四边形数组 先看看效果图: vtkPlaneSource 创建一个 m x n 个四边形数组,这些四边形在平面中排列为规则平铺。通过指定一个原点来定义平面,然后指定另外两个点,这两个点与原点一起定义平面的两个轴。这些轴不必是正交的 - 因此您可以创建平行…...