51单片机-第三节-LCD1602调试工具,矩阵键盘

一、LCD调试工具函数:

使用:

所有函数,前两个参数,均为指定显示位置。

四个参数的,第四个参数,为保留位数,少的保留后面(123,2 -> 23),多的前面补零。

二、矩阵键盘:

1、矩阵键盘的原理:

通过行和列来具体检测每个按键的情况:

如电脑分辨率1920*1080个LED,只需1920+1080个接口即可控制。

在单片机中,16个按键只需8个接口(4行+4列)。

使用方法:依次给行赋值 0111,1011,1101,1110,每次赋值后检测列的状态,列为0说明接通了。

2. 矩阵键盘判断函数封装:

/*
用途:读取矩阵键盘按键键码、
使用:按下按键,停留在此函数,松手返回键码,没按下返回0。
*/
unsigned char MatrixKey()
{unsigned char KeyNumber = 0;//第一列P1 = 0xFF;P1_3 = 0;if (P1_7 == 0) { Delay(20); while (P1_7 == 0); Delay(20); KeyNumber = 1; }if (P1_6 == 0) { Delay(20); while (P1_6 == 0); Delay(20); KeyNumber = 5; }if (P1_5 == 0) { Delay(20); while (P1_5 == 0); Delay(20); KeyNumber = 9; }if (P1_4 == 0) { Delay(20); while (P1_4 == 0); Delay(20); KeyNumber = 13; }//第二列P1 = 0xFF;P1_2 = 0;if (P1_7 == 0) { Delay(20); while (P1_7 == 0); Delay(20); KeyNumber = 2; }if (P1_6 == 0) { Delay(20); while (P1_6 == 0); Delay(20); KeyNumber = 6; }if (P1_5 == 0) { Delay(20); while (P1_5 == 0); Delay(20); KeyNumber = 10; }if (P1_4 == 0) { Delay(20); while (P1_4 == 0); Delay(20); KeyNumber = 14; }//第三列P1 = 0xFF;P1_1 = 0;if (P1_7 == 0) { Delay(20); while (P1_7 == 0); Delay(20); KeyNumber = 3; }if (P1_6 == 0) { Delay(20); while (P1_6 == 0); Delay(20); KeyNumber = 7; }if (P1_5 == 0) { Delay(20); while (P1_5 == 0); Delay(20); KeyNumber = 11; }if (P1_4 == 0) { Delay(20); while (P1_4 == 0); Delay(20); KeyNumber = 15; }//第四列P1 = 0xFF;P1_0 = 0;if (P1_7 == 0) { Delay(20); while (P1_7 == 0); Delay(20); KeyNumber = 4; }if (P1_6 == 0) { Delay(20); while (P1_6 == 0); Delay(20); KeyNumber = 8; }if (P1_5 == 0) { Delay(20); while (P1_5 == 0); Delay(20); KeyNumber = 12; }if (P1_4 == 0) { Delay(20); while (P1_4 == 0); Delay(20); KeyNumber = 16; }
}

3.实战:显示按键编号

void main()
{LCD_Init();LCD_ShowString(1, 1, "MatrixKey:");while (1){int KeyNum = MatrixKey();if (KeyNum){LCD_ShowNum(2, 1, KeyNum, 2);}}
}

4.实战:密码锁

四位密码锁,1-9号键为对应键码,10为0,11是确认,12是清除。

unsigned char KeyNum = 0;
unsigned int PassWord0 = 4359;//初始密码
unsigned int PassWord = 0;
unsigned int Count = 0;
void main()
{LCD_Init();LCD_ShowString(1, 1, "PassWord:");while (1){KeyNum = MatrixKey();if (KeyNum){if (KeyNum <= 10 && Count < 4)//按1-10输入{PassWord *= 10;PassWord += KeyNum % 10;LCD_ShowNum(2, 1, PassWord, 4);Count++;}else if (KeyNum == 11)//按11确认{if (PassWord == PassWord0){LCD_ShowString(1, 14, "OK ");break;}else{LCD_ShowString(1, 14, "ERR");PassWord = 0;Count = 0;LCD_ShowNum(2, 1, PassWord, 4);}}else if (KeyNum == 12)//按12取消{PassWord = 0;Count = 0;LCD_ShowNum(2, 1, PassWord, 4);}}}
}

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

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

相关文章

Web开发 —— 放大镜效果(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;控制大图和遮罩层的显隐性 &#xff08;3&#xff09;遮罩层跟随鼠标移动 &…

k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028

然后我们继续开始看 如果我们使用容器部署,比如我们有三个节点,一个是master,一个node1 一个是node2 那么pod 中我们可以看到,容器中的 /data 等各个目录都映射了出来了,但是 如果比如上面红色的部分,有个pod,原来在node2上,最右边那个,但是这个pod宕机了 那么,k8s会在node…

永磁同步电机谐波抑制算法(7)——基于自适应陷波(adaptive notch filter,ANF)的精确谐波电流抑制策略

1.前言 1.1经典谐波抑制策略存在的问题 在之前的谐波抑制专题中&#xff0c;主要介绍了两种谐波抑制策略——基于多同步旋转坐标系的谐波抑制策略以及基于比例积分谐振PIR调节器的谐波抑制策略&#xff0c;同时还介绍了这两种策略的改进办法&#xff0c;进而使得这两种策略在…

Go:基本变量与数据类型

目录 前言 前期准备 Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断 1.6 数据类型转换 1.…

NewStarCTF 2023 week5--web

目录 Unserialize Again 法一:(非预期) 法二: Final Yes Pickle pppython? 4-复盘 Unserialize Again f12告诉了我们cookie, 查看一下,可以发现 pairing.php <?php highlight_file(__FILE__); error_reporting(0); class story{private $useradmin;public $p…

Centos7 新增yum源

背景&#xff1a;原来的yum源&#xff0c;无法下载yum包了。新增一个阿里云的&#xff08;网易163的源失效了&#xff0c;无法使用&#xff09; Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was …

three.js官方案例webgpu_reflection.html学习记录

目录 ​1 判断浏览器是否支持 2 THREE.DirectionalLight 2.1DirectionalLightShadow 3 Texture 3.1 .wrapS 3.2 .wrapT 3.3 .colorSpace 4 创建地面 5 WebGPURenderer 6 OrbitControls 控制器 7 屏幕后处理 import * as THREE from three;import { MeshPhongNodeMa…

简析“请求头”——可以用“头部字典”按需定制请求头

请求头是HTTP请求的重要部分&#xff0c;可以用“头部字典”按需定制请求头。 (笔记模板由python脚本于2024年07月12日 19:28:44创建&#xff0c;本篇笔记适合喜欢钻研web知识点的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free…

RSA算法(C++)

RSA加解密过程 RSA为非对称加密算法&#xff0c;由一对公钥和一对私钥构成&#xff0c;私钥加密公钥解密&#xff0c;公钥加密私钥解密 如下图,D为私密的&#xff0c;假设传输英文字母&#xff0c;我们给英文字母编号A1,B2,C3… RSA加解密过程 两对密钥产生方法如下 C Op…

【RHCE】基于密钥的身份验证(Win-Linux)

目的&#xff1a;要提⾼系统安全性&#xff0c;通过在 OpenSSH 服务器上禁⽤密码⾝份验证来强制进⾏基于密钥的⾝份验证。 1、一台虚拟机无需密码连接另一台虚拟机 .ssh目录 > 保存了ssh相关的key和一些记录文件 &#xff08;1&#xff09;生成密钥对 使⽤这个流程在本地…

U盘打不开的终极解决方案:原因剖析、恢复策略与预防之道

U盘困境&#xff1a;打不开的焦虑与应对 在数字化时代&#xff0c;U盘作为数据交换与存储的重要工具&#xff0c;几乎成为了每个人工作、学习和生活中的必需品。然而&#xff0c;当您满怀期待地将U盘插入电脑&#xff0c;却遭遇“无法识别”、“无法访问”等提示&#xff0c;U…

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

​​​​​​​ 目录 一、引言 二、音频分类&#xff08;audio-classification&#xff09; 2.1 概述 2.2 技术原理 2.2.1 Wav2vec 2.0模型 2.2.1 HuBERT模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.4 pipeline实战 2.4.1 …

【Qt 基础】Qt Creator 的初步使用、创建项目的过程

文章目录 1. Qt SDK 中工具程序的介绍2. 创建第一个 Qt 项目的前置步骤 1. Qt SDK 中工具程序的介绍 下载之后会出现下面几个程序&#xff1a; Assistant 表示 Qt 自带的离线官方文档&#xff1b; Designer &#xff1a;Qt设计师&#xff0c;图形化的设计界面的工具&#xf…

C++程序进阶学习

目录 引言 C内存分区 一、内存分区模型 二、 程序运行前 三、程序执行后 C引用 引用的语法 作用 本质 优点 C封装 C对象特性 C对象模型和this指针 C友元 C运算符重载 C继承 C多态 C文件 引言 看过我博客的朋友可能都了解这篇文章内容了&#xff0c;这篇博…

超声波清洗机哪家好?家用超声波眼镜清洗机推荐

超声波清洗机现在已经成为了很多家庭的新宠&#xff0c;它能够帮助我们轻松解决日常生活中的清扫烦恼。但是&#xff0c;面对市面上品种繁多的清洗机产品&#xff0c;我们该如何选择一款适合自己的呢?毕竟不同的品牌和型号&#xff0c;在清洗效果、噪音水平、除菌能力等方面都…

RHCE-autofs自动挂载

要求 一、在主机上提供web&#xff0c;dns服务 服务端 IP&#xff1a;172.25.250.131/24 dns&#xff1a;172.25.250.131 [rootlocalhost ~]# cd /etc/httpd/conf.d[rootlocalhost conf.d]# vim vhost.conf [rootlocalhost conf.d]# mkdir /nfs/rhce -p[rootlocalhost conf…

雪深监测站的工作原理

TH-TS200雪深监测站是一种用于测量和记录雪层深度的设备&#xff0c;它在气象观测、交通管理、防灾减灾、水源管理等多个领域发挥着重要作用。雪深监测用来监测雪深的设备。它通过各种传感器和测量设备&#xff0c;如超声波测距仪、激光测距仪、压力传感器等&#xff0c;获取雪…

若依安装和初始化教程(傻瓜教程 一步一步走)

1、若依的安装&#xff1a; 1、找到若依官方网站并选择若依的前后端分离版本 2、点击克隆 然后选择http进行复制 3、打开idea 如果有打开的项目就先关闭项目&#xff0c;然后就会自动弹出下面第二张图片&#xff0c;接着按照流程走就可以 到此若依的下载就成功了 2、若依项目…

如何判断代码是否是在UPDATE TASK的Session中执行?

1. 背景 有时我们想控制ABAP代码在UPDATE TASK中的逻辑&#xff0c;例如某些逻辑执行&#xff0c;某些逻辑不执行。 那么&#xff0c;我们应该如何判断当前代码运行的环境呢&#xff1f;也即&#xff0c;怎么知道一段运行时代码是运行在当前的ABAP session中&#xff0c;还是…

IDEA设置代码提示忽略大小写

一、设置代码提示为忽略大小写 IDEA代码提示默认是区分大小写的&#xff0c;设置为提示忽略大小写&#xff1a; Setting——Editor——Code Completion 如图