51单片机学习--矩阵键盘、电子密码锁

矩阵键盘的模块原理图:
矩阵键盘的模块原理图
功能:按下矩阵按键,在LCD上显示对应的数值。
采用模块化编程,在此只给出MatrixKey.c 和 main.c 两部分代码

#include <REGX52.H>
#include "Delay.h"/*矩阵键盘读取键码按下不放,会停留在此函数,松开时返回数值,不按返回零
*/
unsigned char Matrixkey()
{unsigned char KeyNum = 0;P1 = 0xFF;P1_3 = 0;if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 1;}if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 5;}if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 9;}if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 13;}P1 = 0xFF;P1_2 = 0;if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 2;}if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 6;}if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 10;}if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 14;}P1 = 0xFF;P1_1 = 0;if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 3;}if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 7;}if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 11;}if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 15;}P1 = 0xFF;P1_0 = 0;if(P1_7 == 0) {Delay(20); while(P1_7 == 0); Delay(20); KeyNum = 4;}if(P1_6 == 0) {Delay(20); while(P1_6 == 0); Delay(20); KeyNum = 8;}if(P1_5 == 0) {Delay(20); while(P1_5 == 0); Delay(20); KeyNum = 12;}if(P1_4 == 0) {Delay(20); while(P1_4 == 0); Delay(20); KeyNum = 16;}return KeyNum;
}

这里要注意必须先判断KeyNum是否为0,否则while不断循环会不断显示0,导致看不到按下按钮显示的数字

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"unsigned char KeyNum;void main()
{LCD_Init();LCD_ShowString(1, 1, "HelloWorld");while(1){KeyNum = MatrixKey();if(KeyNum) LCD_ShowNum(2, 1, KeyNum, 2);}
}

在这里插入图片描述
要利用写好的矩阵键盘来制作一个密码锁,只需要调用MatrixKey文件来直接使用即可,以下是一个简单的密码锁,还有一些bug,不过可以满足基本需求

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"unsigned char KeyNum;
unsigned int Password, Count;void main()
{LCD_Init();LCD_ShowString(1, 1, "PassWord");while(1){KeyNum = MatrixKey();if(KeyNum){if(KeyNum <= 10) //数字{if(Count < 4){Password *= 10;Password += (KeyNum % 10);Count ++; //输入次数,最多为4}LCD_ShowNum(2, 1, Password, 4); //更新显示}if(KeyNum == 11) //确认键{if(Password == 1234) //如果等于正确密码{LCD_ShowString(1, 14, "OK"); //密码正确Password = 0;Count = 0;LCD_ShowNum(2, 1, Password, 4); //更新显示}else{LCD_ShowString(1, 14, "ERR"); //密码错误Password = 0;Count = 0;LCD_ShowNum(2, 1, Password, 4); //更新显示}}if(KeyNum == 12) //取消键{Password = 0;Count = 0;LCD_ShowNum(2, 1, Password, 4); //更新显示}}}
}

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

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

相关文章

【有功功率、无功功率】可再生能源配电馈线的鲁棒经济调度研究[IEEE13节点](Matlab代码实现)

&#x1f4a5;1 概述 "有功功率和无功功率" 是与电力系统中能量传输和功率控制相关的两个重要概念。 有功功率&#xff08;Active Power&#xff09;是指电力系统中传输和消耗能量的功率&#xff0c;也被称为实功功率。它负责提供电力系统中的实际电能需求&#xf…

DTU凭什么可以为数据提供高效可靠的稳定传输?

当谈及到智能化的发展时&#xff0c;其实它已经正在影响着各行各业&#xff0c;当前许多传统行业也正在向智能化转变。如果你细心留意的话&#xff0c;就会发现在我们日常生活中多少都会见到它们的身影&#xff0c;例如&#xff1a;村庄各家各户墙外所挂的煤改电设备、居民楼小…

【数学建模】统计分析方法

文章目录 1.回归分析2. 逻辑回归3. 聚类分析4. 判别分析5. 主成分分析6. 因子分析7. 对应分析 1.回归分析 数据量要多&#xff0c;样本总量n越大越好——>保证拟合效果更好&#xff0c;预测效果越好 一般n>40/45较好 方法 建立回归模型 yiβ0β1i……βkxkiεi 所估计的…

vite动态加载图片

参考CSDN 方法一 根据官网的提示, 就是在将asset 前面加上src <img v-if"post.welcomeScreen" :src"/src/assets/blogPhotos/${name}.jpg" alt"" />方法二 关于第二个方法&#xff0c;官网说&#xff1a;“实际上&#xff0c;Vite 并不…

Ubuntu系统cron服务运行 .sh 脚本

1、安装cron # 安装 apt-get install cron 2、常用命令 # 查看状态 sudo systemctl status cron # 开启服务 sudo systemctl start cron # 停止服务 sudo systemctl stop cron # 重启服务 sudo systemctl restart cron 3、编写要定时执行 hello.sh 脚本 #!/bin/bash echo &…

IDEA使用GIT提交代码中文日志(commit message)乱码

最近换了新的开发环境&#xff0c;导致提交gti中文注释乱码&#xff0c;遂记录一下解决方案 idea中查看git提交信息显示中文是正常的 gitee上显示乱码 本地显示也是乱码 一、命令修改编码格式 git 安装目录下执行 git config --global i18n.commitencoding utf-8git config …

使用ext2fsd将装有Ubuntu的硬盘挂载到Windows后,导致Ubuntu系统无法启动

Ubuntu是一种流行的Linux操作系统&#xff0c;而Windows则是最常用的桌面操作系统之一。有时&#xff0c;我们可能需要将Ubuntu的硬盘连接到Windows系统上&#xff0c;以访问、备份或修改其中的文件。然而&#xff0c;这样的操作可能会导致Ubuntu系统无法正常启动&#xff0c;这…

pdf怎么翻译?有这个工具就够了

pdf怎么翻译&#xff1f;PDF文档一直是我们日常生活和工作中不可避免的一部分。但是&#xff0c;当我们需要翻译PDF文件时&#xff0c;我们往往会感到无助&#xff0c;因为PDF文档不能像其他文本文件一样直接复制和粘贴。那么今天就给大家介绍一款可以帮助我们进行PDF翻译的工具…

【技能实训】DMS数据挖掘项目-Day09

文章目录 任务9【任务9.1.1】升级DataBase类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.2】升级LogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.3】升级MatchedLogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【…

Java编程-基本排序算法

冒泡排序 图解 &#xff08;注&#xff1a;图片来源网络&#xff09; Java代码 package suanfa_Ja;import org.apache.hadoop.security.SaslOutputStream;// 基本排序算法&#xff0c;冒泡排序 时间复杂度 O(n^2) 空间复杂度O(1) public class BubbleSort {public static v…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【4】-O3 不支持 编译失败

gcc -O3 编译失败 结论&#xff1a;默认情况下SPEC CPU 2006 1.2 不支持 gcc -O3编译参数。

Linux 安装 nginx

正常是两种安装方式 一种是使用系统的包管理软件&#xff0c;比如centos的yum -y install nginx命令&#xff08;简单但不推荐&#xff0c;配置文件分散不易管理&#xff0c;且需要配置第三方源yum -y install epel-release等&#xff0c;如果是简单使用&#xff0c;配置文件什…

1.15 什么是后端服务

文章目录 什么是后端服务后端服务的功能后端服务的技术栈结论 什么是后端服务 后端服务&#xff08;Backend Service&#xff09;是指在软件应用中负责处理数据、逻辑和业务功能的组件或模块。它通常运行在服务器端&#xff0c;为前端应用或客户端提供数据和服务支持。 后端服…

[GXYCTF2019]simple CPP

前言 三个加密区域&#xff0c;第一次是基本运算&#xff0c;八位叠加&#xff0c;z3方程 分析 第一轮加密&#xff0c;和Dst中模27异或 &#xff08;出题人对动调有很大意见呢&#xff09; 将输入的字符串按八位存入寄存器中&#xff0c;然后将寄存器内容转存到内存 第一次…

CMake 学习笔记(生成头文件)

CMake 学习笔记&#xff08;生成头文件&#xff09; 经常&#xff0c;我们需要检测系统环境&#xff0c;然后来生成一些对应的头文件&#xff0c;这个头文件通常叫做“configured header file”。一般命名为 config.h。 CMake 有个 configure_file() 命令专门用来做这个事情。…

每日一练 | 华为认证真题练习Day80

1、在Telnet中应用如下ACL&#xff1a;下列说法正确的是&#xff1f; acl number 2000 rule 5 deny source 172.16.105.30 rule 10 deny source 172.16.105.40rule 15 deny source 172.16.105.50rule 20 permit # A. IP地址为172.16.105.6的设备可以使用Telnet服务 B. IP…

SpringBoot中进行elasticSearch查询,使用QueryBuilders构建各类条件查询

查询所有 //搜索全部文档 QueryBuilder queryBuilder QueryBuilders.matchAllQuery();查询单个,等于/eq //单个匹配&#xff0c;搜索name为li的文档 QueryBuilder queryBuilder QueryBuilders.matchQuery("name", "li");查询多个字段匹配某一个值 //搜索…

【数据结构与算法】哈夫曼编码(最优二叉树)实现

哈夫曼编码 等长编码&#xff1a;占的位置一样 变长编码&#xff08;不等长编码&#xff09;&#xff1a;经常使用的编码比较短&#xff0c;不常用的比较短 最优&#xff1a;总长度最短 最优的要求&#xff1a;占用空间尽可能短&#xff0c;不占用多余空间&#xff0c;且不…

C\C++ 使用ping判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; ping是一种用于测试网络连接的工具&#xff0c;它通过发送数据包到目标设备并等待其响应来工作&#xff0c;以检查网络是否连通。下面是例子. 效果&#xff1a; 代码…

JavaScript的WebAPI

这里写目录标题 DOM 基本概念获取元素事件概念事件的三要素操作元素获取/修改表单元素属性行内样式操作类名样式操作操作节点 DOM 基本概念 DOM 全称为 Document Object Model. W3C 标准给我们提供了一系列的函数, 让我们可以操作: 网页内容 ,网页结构, 网页样式 DOM数的结构如…