单片机学习笔记---矩阵键盘密码锁

目录

一,设置密码按键

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都会清零

以上就是本节想要实现的效果。

这节的代码比较多,如果出错,可以最好是边写边测试。

本节所有的程序源码评论区自取。

如果有问题可以私信我评论区留言,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apipost-cli、Jenkins持续集成配置

安装 Apipost-cli npm install -g apipost-cli 运行脚本 安装好Apipost-cli后,在命令行输入生成的命令,即可执行测试用例,运行完成后会展示测试进度并生成测试报告。 Jenkins配置 Apipost cli基于Node js运行 需要在jenkins上配置NodeJs依…

深入浅出理解目标检测的非极大值抑制(NMS)

一、参考资料 物体检测中常用的几个概念迁移学习、IOU、NMS理解 目标定位和检测系列(3):交并比(IOU)和非极大值抑制(NMS)的python实现 Pytorch:目标检测网络-非极大值抑制(NMS) …

眼底增强型疾病感知蒸馏模型 FDDM:无需配对,fundus 指导 OCT 图

眼底增强型疾病感知蒸馏模型 FDDM:fundus 指导 OCT 图 核心思想设计思路训练和推理 效果总结子问题: 疾病特定特征的提取与蒸馏子问题: 类间关系的理解与建模 核心思想 论文:https://arxiv.org/pdf/2308.00291.pdf 代码:https://github.com…

文心一言情感关怀之旅

【AGIFoundathon】文心一言情感关怀之旅,让我们一起来体验吧! 上传一张照片,用ernie-bot生成专属于你的小故事! 此项目主要使用clip_interrogator获取图片的关键信息,然后将此关键信息用百度翻译API翻译成中文后,使用封装了⼀⾔API的Ernie Bot SDK(ernie-bot)生成故事…

利用aiohttp异步爬虫实现网站数据高效抓取

前言 大数据时代,网站数据的高效抓取对于众多应用程序和服务来说至关重要。传统的同步爬虫技术在面对大规模数据抓取时往往效率低下,而异步爬虫技术的出现为解决这一问题提供了新的思路。本文将介绍如何利用aiohttp异步爬虫技术实现网站数据抓取&#x…

学校“数据结构”课程Project—扩展功能(自主设计)

目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划(dp)想法 2. 思考与优化 四、算法实现 五、结果示例 附:使用的地图API 一、设想功能描述 想法缘起 OSM 导出…

【昕宝爸爸小模块】什么是POI,为什么它会导致内存溢出?

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

缓存问题 | 缓存穿透,缓存击穿,缓存雪崩

缓存穿透 关键字:强调缓存和数据库都没有数据并发访问 缓存穿透是指数据库和缓存都没有的数据,每次都要经过缓存去访问数据库,大量的请求有可能导致DB宕机。 应对策略: 使用布隆过滤器(Bloom Filter)&am…

react中优化类名写法(类似与vue的动态class对象方式)

安装和引入方式 npm install classnamesimport classNames form classsnames//render 方法中,需要动态className的地方直接参照上图使用

基于 java+springboot+mybatis电影售票网站管理系统前台+后台设计和实现

基于 javaspringbootmybatis电影售票网站管理系统前台后台设计和实现 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承…

数学建模-------误差来源以及误差分析

绝对误差:精确值-近似值; 举个例子:从A到B,应该有73千米,但是我们近似成了70千米;从C到D,应该是1373千米,我们近似成了1370千米,如果使用绝对误差,结果都是3…

YOLOv8训练自己的数据集,通过LabelImg

记录下labelImg标注数据到YOLOv8训练的过程,其中容易遇到labelImg的坑 数据集处理 首先在mydata下创建4个文件夹 images文件夹下存放着所有的图片,包括训练集和测试集等。后续会根据代码进行划分。 json文件夹里存放的是labelImg标注的所有数据。需要注意的是&…

【王道数据结构】【chapter2线性表】【P43t15】

单链表有环&#xff0c;是指单链表的最后一个节点的指针指向了链表中的某个结点&#xff08;通常单链表的最后一个节点的指针域是空的&#xff09;。试编写算法判断单链表是否存在环。 #include <iostream>typedef struct node{int data;node* next; }node,*list;list I…

java web 职位推荐系系统Myeclipse开发mysql数据库协同过滤算法java编程计算机网页项目

一、源码特点 java Web职位推荐系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

AWTK 开源串口屏开发(8) - 系统设置

AWTK 开源串口屏开发 - 系统设置 系统设置只是一个普通应用程序&#xff0c;不过它会用 默认模型 中一些内置的属性和命令&#xff0c;所以这里专门来介绍一下。 1. 功能 在这个例子会用到 默认模型 中一些下列内置的属性和命令&#xff1a; 内置属性 属性类型说明rtc_yea…

基于深度学习的狗狗类别检测

探索狗狗识别技术 引言1. 数据集介绍1.1 语境1.2 内容1.3 致谢 2. 项目背景与意义3. 项目实现流程3.1 数据处理与准备3.2 环境准备与工具安装3.3 模型配置与训练3.4 模型评估与预测3.5 模型推理与部署 4. 总结 服务 引言 随着人工智能技术的不断发展&#xff0c;图像识别已成为…

详解矩阵的LDU分解

目录 一. 矩阵分解 二. 解方程 三. 例题说明 四. 矩阵的LDU分解 五. 矩阵三角分解的唯一性 一. 矩阵分解 其实我们可以把一个线性系统&#xff08;Linear System&#xff09;看成两个三角系统&#xff08;Triangular Systems&#xff09;&#xff0c;本文章将解释为什么可…

Ubuntu 22.04 apt 安装 ros1 ros Noetic Ninjemys

众所周知 ros2还有很多功能没有移植&#xff0c;而ros1官方不再支持 ubuntu 20.04 之后的版本。另一方面Ubuntu 22.04 更新了很多对新硬件的驱动&#xff0c;有更好的兼容性和体验&#xff0c;这就变的很纠结。 如果想在 22.04 使用最新版本的 ros noetic 只有自己编译一个办法…

2024不可不会的StableDiffusion(二)

1. 引言 这是我关于StableDiffusion学习系列的第二篇文章&#xff0c;如果第一篇你还没有阅读&#xff0c;强烈推荐大家翻看前篇内容。在本文中&#xff0c;我们将学习构成StableDiffusion的各个基础组件&#xff0c;并针对每个组件的功能进行阐述。 闲话少说&#xff0c;我们…

JavaEE 网络编程

JavaEE 网络编程 文章目录 JavaEE 网络编程引子1. 网络编程-相关概念1.1 基本概念1.2 发送端和接收端1.3 请求和响应1.4 客户端和服务端 2. Socket 套接字2.1 数据包套接字通信模型2.2 流套接字通信模型2.3 Socket编程注意事项 3. UDP数据报套接字编程3.1 DatagramSocket3.2 Da…