单片机精进之路-5矩阵键盘扫描

 如下图,先在p3口输出0xfe,再读取p3口的电平,如果没有按键按下,temp & 0xf0还是0xf0,如果又第一个键按下,temp & 0xf0还是0xee,其他按键由此类推可得。

//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51.h>sbit beep=P2^3;
sbit dula = P2^6;
sbit wela = P2^7;unsigned char i = 100;
unsigned char j, k, temp, key;void delay(unsigned char i)
{for(j = i; j > 0; j--)for(k=125; k>0; k--);
}unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};display(unsigned char num)
{P0 = table[num];dula = 1;dula = 0;P0 = 0xc0;wela = 1;wela = 0;
}void main()
{dula = 0;wela = 0;while(1){//扫描第一行键盘是否按下P3 = 0xfe;	//			1111 1110temp = P3;temp = temp & 0xf0;	//	1111 0000if(temp != 0xf0){delay(10);if(temp != 0xf0){temp = P3;switch(temp){case 0xee:	//1110 1110key = 0;break;case 0xde:	//1101 1110key = 1;break;case 0xbe:	//1011 1110key = 2;break;case 0x7e:	//0111 1110key = 3;break;}while(temp != 0xf0){temp = P3;temp = temp&0xf0;beep = 0;}beep = 1;display(key);P1=0xfe;}}//扫描第二行键盘是否按下P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;display(key);P1=0xfc;}}//扫描第三行键盘是否按下P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;display(key);P1=0xf8;}}//扫描第四行键盘是否按下P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=12;break;case 0xd7:key=13;break;case 0xb7:key=14;break;case 0x77:key=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;display(key);P1=0xf0;}}}
}

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

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

相关文章

Linux的文件操作,重拳出击( ̄︶ ̄)

Linux的文件操作 学习Linux的文件操作&#xff0c;一般需要知道一个文件如果你想要操作他&#xff0c;必须知道你对这个文件有什么操作的权限或者修改你自己对文件操作的权限。必须要知道文件有三种权限 r&#xff1a;可读 w&#xff1a;可写 x&#xff1a;可执行 在打开Linux…

✅鉴权—cookie、session、token、jwt、单点登录

基于 HTTP 的前端鉴权背景cookie 为什么是最方便的存储方案&#xff0c;有哪些操作 cookie 的方式session 方案是如何实现的&#xff0c;存在哪些问题token 是如何实现的&#xff0c;如何进行编码和防篡改&#xff1f;jwt 是做什么的&#xff1f;refresh token 的实现和意义ses…

Java面试题基础(一)

Java 面试题基础&#xff08;一&#xff09; 前言1、面向对象的特征有哪些方面&#xff1f;2、访问修饰符的作用范围&#xff1f;3、Java有哪些数据类型&#xff1f;4、float f 3.4; 是否正确&#xff1f;5、short s1 1; s1 s1 1;对吗? short s1 1; s1 1; 对吗&#xff…

《C++面向对象程序设计》✍学习笔记

C的学习重点 C 这块&#xff0c;重点需要学习的就是一些关键字、面向对象以及 STL 容器的知识&#xff0c;特别是 STL&#xff0c;还得研究下他们的一些源码&#xff0c;下面是一些比较重要的知识&#xff1a; 指针与引用的区别&#xff0c;C 与 C 的区别&#xff0c;struct 与…

Unity中的浮点数

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity float f 0.1f 为什么 $“{f}” 输出的时候会是 0.100000001 C# 中的 $"{}" 是一个字符串插补&#xff08;String Interpolation&#xff09;的语法糖&#xff0c;用于方便地创建和修改字符串…

网络技术ensp 一个简单的交换机配置案例

由于工作调岗&#xff0c;转战网络运维了&#xff0c;第一次网络笔记 1.&#xff0c;目的&#xff1a;2台主机相互可以ping通&#xff0c;并且可以ping通网关地址&#xff0c;设备&#xff1a;2台主机&#xff0c;2台交换机 2网络拓扑图如下 3.主机pc1的配置信息 ip&#xff…

Xcode与Swift开发小记

文章目录 引子Xcode工程结构核心概念Swift语法速记(TODO)小技巧单元测试中使用awaitSwiftUI中使用ListView中取数据 常见问题Xcode添加package时连接github超时Xcode无法修改快捷键&#xff0c;一闪而过 引子 鉴于React Native目前版本在iOS上开发遇到诸多问题&#xff0c;本以…

【SpringBoot3】SpEL表达式详细使用说明

一、介绍 SpEL&#xff08;Spring Expression Language&#xff09;是Spring框架提供的一种功能强大的表达式语言&#xff0c;用于在运行时查询和操作对象。 主要特点和用途包括&#xff1a; 简洁性&#xff1a;SpEL表达式使用简洁的语法&#xff0c;使得在Spring配置和代码…

前端取图片相同颜色作为遮罩或者背景

需求 遮罩层取图片相同/相似的颜色作为遮罩 效果 做法 npm库 grade.js 所提供图像中前 2 个主色生成的互补渐变https://github.com/benhowdle89/grade COLOR THIEF 只需使用Javascript即可从图像中获取调色板。 https://github.com/lokesh/color-thief https://lokeshd…

DNS的意义,DNS不可用该怎么办

DNS是域名系统&#xff0c;它负责将我们输入的网址(如www.baidu.com)转换成计算机可以理解的IP地址(如127.0.0.1)。DNS设置的好坏&#xff0c;直接影响到我们的上网速度和体验。 一、DNS的重要性 在访问一个网站时&#xff0c;首先需要通过DNS将域名解析为对应的IP地址。如果DN…

5.24 BCC工具之funccount.py解读

一,工具简介 funccount工具可以追踪与指定模式匹配的函数、追踪点或USDT探针,并会在追踪过程中打印它们的计数摘要。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import ArgString, BPF, USDT from time import sleep, strftime …

【深度学习笔记】4_2-3 模型参数的访问、初始化和共享

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 4.2 模型参数的访问、初始化和共享 在3.3节&#xff08;线性回归的简洁实现&#xff09;中&#xff0c;我们通过init模块来初始化模型…

AIGC专栏9——Scalable Diffusion Models with Transformers (DiT)结构解析

AIGC专栏9——Scalable Diffusion Models with Transformers &#xff08;DiT&#xff09;结构解析 学习前言源码下载地址网络构建一、什么是Diffusion Transformer (DiT)二、DiT的组成三、生成流程1、采样流程a、生成初始噪声b、对噪声进行N次采样c、单次采样解析I、预测噪声I…

kitti数据显示

画出track_id publish_utils.py中 def publish_3dbox(box3d_pub, corners_3d_velos, types, track_ids):marker_array MarkerArray()for i, corners_3d_velo in enumerate(corners_3d_velos):marker Marker()marker.header.frame_id FRAME_IDmarker.header.stamp rospy.T…

Pytorch训练RCAN QAT超分模型

Pytorch训练RCAN QAT超分模型 版本信息测试步骤准备数据集创建容器生成文件列表创建文件列表的代码执行脚本,生成文件列表训练RCAN模型准备工作修改开源代码编写训练代码执行训练脚本可视化本文以RCAN超分模型为例,演示了QAT的训练过程,步骤如下: 先训练FP32模型再加载FP32训练…

量子计算学习经验

推荐B站冉仕举老师视频&#xff08;老师讲的详细又耐心&#xff0c;张量网络做量子计算&#xff0c;不过有些基础概念都是通用的&#xff09; StringCNU的个人空间-StringCNU个人主页-哔哩哔哩视频 2《量子计算与量子信息》是经典的教材书的&#xff0c;但是大部分同学第一次看…

【随笔】固态硬盘数据删除无法恢复(开启TRIM),注意数据备份

文章目录 一、序二、机械硬盘和固态硬盘的物理结构与工作原理2.1 机械硬盘2.11 基本结构2.12 工作原理 2.2 固态硬盘2.21 基本结构2.22 工作原理 三、机械硬盘和固态硬盘的垃圾回收机制3.1 机械硬盘GC3.2 固态硬盘GC3.3 TRIM指令开启和关闭 四、做好数据备份 一、序 周末电脑突…

数据库设计过程中的各种模式

在数据库设计过程中&#xff0c;有几种常见的模式&#xff0c;它们有助于组织和管理数据。以下是这几种模式的简介&#xff1a; 主扩展模式&#xff08;也称为主从模式&#xff09;&#xff1a;这种模式适用于多个表具有相似结构的情况。这些表共享某些基本属性&#xff08;也…

备战蓝桥之二分

二分题目&#xff1a; B3880 [信息与未来 2015] 买木头 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.security.PublicKey; impor…