江协科技51单片机学习- p16 矩阵键盘

news2025/1/15 16:49:08

🚀write in front🚀  
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 

💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚 

前言:

本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。

引用:

51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili

​​​​​​c51语言变量语句意思,C51中循环语句-CSDN博客

矩阵键盘引用:

【51单片机】矩阵键盘_51单片机4×4矩阵键盘-CSDN博客

51单片机学习笔记 ——(二)矩阵键盘_51单片机 矩阵键盘-CSDN博客

正文:

0. 概述

在淘宝上购买了江协科技51单片机开发板套件(普中科技STC51单片机A2型号),就上在上一篇博文里说的自己计划学习下江协科技51单片机开发教程,通过STC51单片机这种MCU这种贴近于裸机的开发来增加对于系统硬件层面知识的了解和掌握。

1. 🚀矩阵键盘

  • 在键盘中当按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵的形式。
  • 采用逐行或逐列的“扫描”,就可以独处任何位置按键的状态。

矩阵键盘的目的是减少I/O口占用 

矩阵键盘采用的是矩阵的连接方式,目的是为了减少IO口的使用。

如果每一个按键都像独立按键一样专门使用一个IO口来控制,那么我们需要的IO口数量就是行×列个。

但是如果采用矩阵的连接方式,我们需要的IO口数目就会变成行+列个,矩阵的行列数越多,减小的程度就越明显。

但是按照矩阵形式排列也会出现一些不方便的结果,所以我们采用了类似之前数码管的解决方式——扫描。

但是与数码管的扫描略有不同,数码管是输出元件,所以数码管的扫描是输出扫描,我们不断循环输出不同的值,利用人眼的视觉暂留实现我们需要的操作。

而矩阵键盘是输入元件,所以我们矩阵键盘采用的扫描是输入扫描,以非常快的速度不断循环读取IO口的值,达到与正常按键相同的效果。这里还是利用了扫描速度远大于人操作的速度的原理。

那么如何实现上述操作呢?

与之前的独立按键进行比较,如果我们单独看矩阵键盘的一行或者一列,就会发现它们有着相同的结构,在此用列来进行比较(用行同理)

2. 🚀 单片机IO口(准双向口)

单片机的io口是一种弱上拉的模式~!又被称作是准双向口(input,output) 既可以输入又可以输出,这种就叫做是双向口。

  • 但是这种双向口有点问题:这么样才可以达到输入或者是输出呢 ?像我们这种矩阵键盘的话是不是给上,一端是0,然后读取另一头。
  • 但是另一头你怎么知道它是一种输入低电平)呢?它其实也是作为一种输出端(高电平),它既是输出(高电平)也是输入(低电平)。
  • 那么为什么单片机它的 io 口是默认为高电平呢?是因为它里面拥有一个上拉电阻把低电平变成高电平了 !所以才导致单片机是高电平,
  • 还有一个是当口输出为1的时候驱动能力很弱,允许外部装置将其拉低。当引脚的输出为低电平的时候,它的驱动能力很强,可以吸收相当大的电流。单片机中 P1、P2、P3 都是一种弱上拉的一种模式。

准双向口输出如下所示:

 单片机的io口是一种弱上拉的模式~!又被称作是准双向口(input,output) 既可以输入又可以输出,这种就叫做是双向口。此种双向口是弱上拉,强下拉,当将IO的输出当为1的时候驱动能力很弱,允许外部装置将其拉。当引脚的输出为低电平的时候,它的驱动能力很强,可以吸收相当大的电流。

单片机中 P1、P2、P3 都是一种弱上拉的一种模式。

单片机中 P0 口是开漏输出模式。

一般按键检测都是接地,检测第电平。为什么不接Vcc,检测高电平哪,因为I/O口配置为低电平要将其拉高为高电平需要比较大的电流。 

准双向口是一种弱上拉模式,可以用如下的示意图来解释:当IO口开关选择输出1 高电平时,通过电阻接Vcc进行弱上拉其上拉输出能力比较弱,此时I/O接口如果接地可以将其拉低为低电平。

 

 3. 🚀矩阵键盘扫描

 首先我们需要知道51单片机的引脚默认为高电平,所以我们需要对这8个引脚进行一个初始化,即P1 = 0xFF ;这样就和独立按键的操作基本一致了。

  • 可以发现,如果我们此时只给P13低电平,第一列就和独立按键一样了。
  • 接下来需要做的就是判断在P13为低电平时,P14、P15、P16、P17是否为低电平。如果是,则说明此时有按键按下,接通了电路,使原来是高电平的引脚变为了低电平。
  • 第一列扫描完后,重新初始化P1 = 0xFF ;然后给P12低电平,继续检测P14、P15、P16、P17是否为低电平。
  •  以此类推,不断循环读取按键是否按下,就达到了随时按下任意按键都可以检测出来的效果

 本实验使用的普中科技C51单片机开发板矩阵键盘扫描时需要注意的点,因为开发板的引脚复用冲突,本实验使用按列扫描的方式。

我们这个开发板 P1_5 口可能会有问题,P1_5口可能一会读到高电平一会读到第 电平,因为在此开发板是行 P1_5 连接到了 Beep ,会造成蜂鸣器鸣叫。

为了避免这个问题,此实验中使用逐列扫描的方式。

 4. 🚀源码编写

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

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

相关文章

Linux中web集群-nginx负载均衡及案例

概述 代理:外卖,中介,中间商,用户无法直接做事情,通过中介进行处理 用户–》代理–》节点,后面只有一个节点,一般使用的是nginx代理功能即可,如果是集群就需要使用nginx负载均衡 …

【QT】Widget

目录 widget常用属性及其作用 enabled geomtry window frame window frame的影响 相关API windowTitle windowIcon qrc机制 qrc使用方式 自定义鼠标图片 设置字体样式 设置鼠标悬停提示 toolTip 控件获取焦点 styleSheet widget常用属性及其作用 属性作用…

C# 类中访问修饰符的优先级

参考链接 : C# 指南 - .NET 托管语言 | Microsoft Learn 访问修饰符 - C# | Microsoft Learn

Stable Diffusion初体验——基于机器学习通过神经网络的强大AI平台

文章目录 前言最新热门活动!!平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型,VAE,lora 介绍sd模型,vae,lora模型进入应用文生图工作区调参区图生图 结语小程序活动——6.20火热上线&#x1f5…

【b站-湖科大教书匠】2 物理层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 物理层 2.1 物理层的基本概念 2.2 物理层下面的传输媒…

Web渗透:文件上传-后端过滤

在上一篇文件上传的内容中笔者阐述了文件上传漏洞产生的相关原理以及使用了一个pikachu靶场的例子进行演示,在这个例子中涉及到了前端代码对于文件上传漏洞的相关防护,以及站在攻击者的角度我们要如何绕过前端的防护成功进行攻击;但是事实上对…

每日签到页面模板组件,简单好用,用了会上瘾的那种

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。 今日给…

Django之云存储(二)

一、Django使用云存储 建立项目 django-admin startproject project_demo创建子应用 python manage.py startapp app_name修改配置文件,设置模板视图路径 settings.py TEMPLATES = [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,…

【Unity服务器01】之AssetBundle上传加载u3d模型

首先打开一个项目导入一个简单的场景 导入怪物资源, AssetBundle知识点: 1.指定资源的AssetBundle属性标签 (1)找到AssetBundle属性标签 (2)A标签 代表:资源目录(决定打包之后在哪…

微信小程序之横向列表展示

效果图 参考微信小程序可看 代码&#xff1a; <view class"lbtClass"><view class"swiper-container"><scroll-view class"swiper" scroll-x"true" :scroll-left"scrollLeft"><block v-for"(six…

怎么用Excel生成标签打印模板,自动生成二维码

环境&#xff1a; EXCEL2021 16.0 问题描述&#xff1a; 怎么用excel生成标签打印模板自动生成二维码 解决方案&#xff1a; 在Excel中生成标签打印模板并自动生成二维码&#xff0c;可以通过以下几个步骤完成&#xff1a; 1. 准备数据 首先&#xff0c;确保你的Excel表…

C#.net6.0+sqlserver2019医院手术麻醉信息管理系统源码 可对接院内HIS、LIS、PACS 支持二次开发

C#.net6.0sqlserver2019医院手术麻醉信息管理系统源码 可对接院内HIS、LIS、PACS 支持二次开发 手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等&#xff0c;实现了将多种麻醉病历文书与医院HIS系统的有效关联&#xff0c;让手术室人员、设备资源和…

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法&#xff08;GOOSE Algorithm&#xff0c;GOOSE)从鹅的休息和觅食行为获得灵感&#xff0c;当鹅听到任何奇怪的声音或动作时&#xff0c;它们会发出响亮的声音来唤醒群中的个体&#xff0c;并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOO…

day16--513.找树左下角的值+112. 路径总和+106.从中序与后序遍历序列构造二叉树

一、513.找树左下角的值 题目链接&#xff1a;https://leetcode.cn/problems/find-bottom-left-tree-value/ 文章讲解&#xff1a;https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 视频讲解&#xff1a;https://www.b…

JavaSE基础总结复习之面向对象の知识总结

目录 Java语言的基础特点 面向对象 类和对象 类 类的构造 一&#xff0c;发现类 二&#xff0c;发现类的共有属性&#xff08;成员变量&#xff09; 三&#xff0c;定义类的成员方法&#xff08;行为&#xff0c;动词&#xff09; 四&#xff0c;使用类创建对象 对象…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

Structured Steaming结构化流详解:大案例解析(第12天)

系列文章目录 一、结构化流介绍&#xff08;了解&#xff09; 二、结构化流的编程模型&#xff08;掌握&#xff09; 三、Spark 和 Kafka 整合&#xff0c;流处理&#xff0c;批处理演示&#xff08;掌握&#xff09; 四、物联网数据分析案例&#xff08;熟悉&#xff09; 文章…

【服务器06】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网&#xff08;没有百度广告就是…

CPP-类对象大小的组成

要计算一个类对象的大小要先明白一个问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f; 下面来看一段代码&#xff1a; // 类中既有成员变量&#xff0c;又有成员函数 class A1 { public:void f1() {} …

Pytorch调试出错记录

一、搭建环境&#xff1a; LINUX-64 1、 nvidia-smi &#xff1a;NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 2、安装conda&#xff1a;下载最新版上传安装 3、安装pytorch&#xff08;安装成功&#xff0c;但可能报错&#xff09; : conda in…