51单片机 05 矩阵键盘

嘻嘻,LCD在RC板子上可以勉强装上,会有一点歪。

一、矩阵键盘

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式;采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。(IO口默认高电平1)

代码在文件夹中。我改了LCD代码的延时问题。

MatrixKey.c代码

#include <STC89C5xRC.H>
#include "Delay.h"

unsigned char MatrixKey()
{
	// 按列扫描
	unsigned char KeyNumber=0;
	P1=0xFF;
	P13=0x00;
	if(P17==0) {Delay(20);while(P17==0);Delay(20);KeyNumber=1;}
	if(P16==0) {Delay(20);while(P16==0);Delay(20);KeyNumber=5;}
	if(P15==0) {Delay(20);while(P15==0);Delay(20);KeyNumber=9;}
	if(P14==0) {Delay(20);while(P14==0);Delay(20);KeyNumber=13;}
	
	P1=0xFF;
	P12=0x00;
	if(P17==0) {Delay(20);while(P17==0);Delay(20);KeyNumber=2;}
	if(P16==0) {Delay(20);while(P16==0);Delay(20);KeyNumber=6;}
	if(P15==0) {Delay(20);while(P15==0);Delay(20);KeyNumber=10;}
	if(P14==0) {Delay(20);while(P14==0);Delay(20);KeyNumber=14;}
	
	P1=0xFF;
	P11=0x00;
	if(P17==0) {Delay(20);while(P17==0);Delay(20);KeyNumber=3;}
	if(P16==0) {Delay(20);while(P16==0);Delay(20);KeyNumber=7;}
	if(P15==0) {Delay(20);while(P15==0);Delay(20);KeyNumber=11;}
	if(P14==0) {Delay(20);while(P14==0);Delay(20);KeyNumber=15;}
	
	P1=0xFF;
	P10=0x00;
	if(P17==0) {Delay(20);while(P17==0);Delay(20);KeyNumber=4;}
	if(P16==0) {Delay(20);while(P16==0);Delay(20);KeyNumber=8;}
	if(P15==0) {Delay(20);while(P15==0);Delay(20);KeyNumber=12;}
	if(P14==0) {Delay(20);while(P14==0);Delay(20);KeyNumber=16;}
	
	return KeyNumber;
}

main.c代码

#include <STC89C5xRC.H>
#include "Delay.h"
#include "LCD1602.h"

unsigned char KeyNum;

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

二、矩阵键盘密码锁

main.c

#include <STC89C5xRC.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) //s1-s10按下,输入密码 
			{
				if(count<4)
				{
					password*=10; //密码左移
					password+=KeyNum%10; 
					count++;
					LCD_ShowNum(2,1,password,4);
				}
				
			}
			else if(KeyNum==11) 
			{
				if(password==2345)
				{
					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);
				}
			}
			else if(KeyNum==12)
			{
				password=0;
				count=0;
				LCD_ShowNum(2,1,password,4);
			}
		}
	
	}
}

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

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

相关文章

OpenCV4,快速入门,Windows 系统 OpenCV4.10.0 开发环境搭建

文章目录 1. 摘要2. OpenCV 4.10.02. 环境配置2.1 配置包含目录2.2 配置库目录2.3 配置链接器2.4 配置环境变量并重启VS 3. 编写测试代码 1. 摘要 本文详细介绍在Windows系统下配置OpenCV 4.10开发环境的步骤&#xff0c;适用于Visual Studio 2022等C开发场景。内容涵盖&#…

unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键

目录 1 用Input接口去监测&#xff1a;鼠标&#xff0c;键盘&#xff0c;虚拟轴&#xff0c;虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…

FreeRTOS从入门到精通 第十三章(信号量)

参考教程&#xff1a;【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、信号量知识回顾 1、概述 &#xff08;1&#xff09;信号量是一种解决同步问题的机制&#xff0c;可以实现对共享资源的有序访问&#xff0c;FreeRTOS中使用的是二值信号量、计数型信号…

业务系统文件上传和互传如何做到高效又安全?

在当今数字化的商业环境中&#xff0c;企业越来越依赖于高效的业务系统来处理日常运营。无论是金融、医疗、能源还是政府机构&#xff0c;内部各类业务系统如OA、供应商管理系统等都需要终端用户上传各种类型的文件附件。然而&#xff0c;在确保这些文件能够快速而准确地上传和…

四、GPIO中断实现按键功能

4.1 GPIO简介 输入输出&#xff08;I/O&#xff09;是一个非常重要的概念。I/O泛指所有类型的输入输出端口&#xff0c;包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO&#xff08;General-Purpose Input/Output&#xff09;则是一个常见的术语&#xff0c…

数据结构:时间复杂度

文章目录 为什么需要时间复杂度分析&#xff1f;一、大O表示法&#xff1a;复杂度的语言1.1 什么是大O&#xff1f;1.2 常见复杂度速查表 二、实战分析&#xff1a;解剖C语言代码2.1 循环结构的三重境界单层循环&#xff1a;线性时间双重循环&#xff1a;平方时间动态边界循环&…

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

035 搜索之DFS基础

DFS&#xff1a;深度优先搜索——本质上是暴力枚举&#xff0c;尽可能一条路走到底&#xff0c;走不了回退 1.DFS与n重循环 例&#xff1a;给定一个数字x&#xff0c;将其拆分为3个正整数&#xff0c;后一个要求大于前一个&#xff0c;给出方案。 分析&#xff1a;这种情况下…

【系统迁移】将系统迁移到新硬盘中(G15 5520)

文章目录 前言问题描述解决步骤&#xff08;红色为 debug 步骤&#xff09;参考文献 前言 参数&#xff1a; 电脑 dell g15 5520硬盘&#xff1a;1T 自带硬盘 海力士 2230 -> 2T 西数蓝盘 2280 问题描述 电脑硬盘过小&#xff08;且只有一个接口&#xff09;&#xff0c;将…

大模型综合性能考题汇总

- K1.5长思考版本 一、创意写作能力 题目1&#xff1a;老爸笑话 要求&#xff1a;写五个原创的老爸笑话。 考察点&#xff1a;考察模型的幽默感和创意能力&#xff0c;以及对“原创”要求的理解和执行能力。 题目2&#xff1a;创意故事 要求&#xff1a;写一篇关于亚伯拉罕…

openeuler 22.03 lts sp4 使用 cri-o 和 静态 pod 的方式部署 k8s-v1.32.0 高可用集群

前情提要 整篇文章会非常的长…可以选择性阅读,另外,这篇文章是自己学习使用的,用于生产,还请三思和斟酌 静态 pod 的部署方式和二进制部署的方式是差不多的,区别在于 master 组件的管理方式是 kubectl 还是 systemctl有 kubeadm 工具,为什么还要用静态 pod 的方式部署?…

Pluto固件编译笔记

前段时间我已经做到在电脑上交叉编译一个简单的c/c程序&#xff0c;然后复制到pluto上运行。 要做到这一点&#xff0c;其实参考adi pluto官网的wiki就能做到了。 但这样有几个问题&#xff0c;只能做到简易程序&#xff0c;如果程序复杂&#xff0c;要调用更多库而SYSROOT里…

【产品经理学习案例——AI翻译棒出海业务】

前言&#xff1a; 本文主要讲述了硬件产品在出海过程中&#xff0c;翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家&#xff0c;需要优化翻译质量和算法&#xff0c;关注市场需求和文化差异&#xff0c;以便更好地满足当地用户的需求。同…

星际智慧农业系统(SAS),智慧农业的未来篇章

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章&#xff1a;星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 “新月智能武器系统”CIWS&#xff0c;开启智能武器的新纪元-CSDN博客 目录 星际智慧农业…

【蓝桥杯嵌入式入门与进阶】4.初读启动文件:粗略阅读,经常翻阅,知己知彼,百战百胜

目录 1.二者差异 1. 1适用芯片型号不同 1.2中断向量表差异 1.2.1 中断数量和种类 1.2.2 部分中断处理函数命名差异 1.2.3. 复位处理描述差异 1.2.4代码注释中的功能描述差异 1.2.5 DMA 通道中断处理函数差异 示例代码对比片段 startup_stm32g431xx.s startup_stm32…

unity中的动画混合树

为什么需要动画混合树&#xff0c;动画混合树有什么作用&#xff1f; 在Unity中&#xff0c;动画混合树&#xff08;Animation Blend Tree&#xff09;是一种用于管理和混合多个动画状态的工具&#xff0c;包括1D和2D两种类型&#xff0c;以下是其作用及使用必要性的介绍&…

C语言 --- 分支

C语言 --- 分支 语句分支语句含义if...else语句单分支if语句语法形式 双分支 if-else 语句语法形式 悬空else含义问题描述 多分支 if-else 语句语法形式 switch...case语句含义语法形式 总结 &#x1f4bb;作者简介&#xff1a;曾与你一样迷茫&#xff0c;现以经验助你入门 C 语…

pytorch实现长短期记忆网络 (LSTM)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 LSTM 通过 记忆单元&#xff08;cell&#xff09; 和 三个门控机制&#xff08;遗忘门、输入门、输出门&#xff09;来控制信息流&#xff1a; 记忆单元&#xff08;Cell State&#xff09; 负责存储长期信息&…

C++:抽象类习题

题目内容&#xff1a; 求正方体、球、圆柱的表面积&#xff0c;抽象出一个公共的基类Container为抽象类&#xff0c;在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径)&#xff0c;以及求表面积的纯虚函数area()。由此抽象类派生出…

GEE | 计算Sentinel-2的改进型土壤调整植被指数MSAVI

同学们好&#xff01;今天和大家分享的是 “改进型土壤调整植被指数MSAVI”&#xff0c;它能够更准确地反映植被生长状态&#xff0c;且广泛应用于植被覆盖监测、生态环境评估等领域。 1. MSAVI 改进型土壤调整植被指数&#xff08;MSAVI&#xff09;是一种针对植被覆盖区域土…