单片机学习笔记---独立按键控制LED亮灭

直接进入正题!

今天开始我们要学习一个新的模块:独立按键!

先说独立按键的内部结构:

它相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。

它主要由四个部分组成:

将底座再详细破拆一下,看看里面的结构:

不管按键有没有按下,左边两个引脚都通过一个金属片连接起来,然后再向中间伸出两个接触点,右边两个引脚也是通过一个金属片连接起来,并向中间伸出一个接触点,如上图红色标识。

那么金属弹片就在中间,如果松手时,它就凸起来,不接触,如果按压,弹片会被压扁,就开始接触,这三个接触点就会被连接。

再看原理图

右边连接负极(接地),左边连接的是单片机的这些IO口上

我们知道单片机的所有IO口默认都是高电平,如果按键没有按下,IO保持的就是高电平,按键按下后,IO就变成低电平了。(高电平是1,低电平是0)

接下来新建一个工程演示一下

创建工程的步骤以后不再赘述,并且会慢慢省略,大家一定要变得越来越熟练,如果忘记了可以翻看一下前几篇的笔记。

先写下以下代码,编译无错误后下载程序

这些中间步骤以后会省略,如果忘记了可以翻看前面的笔记。

现在重启板子,看看效果

第一个LED点亮了

这个其实是通过控制寄存器来实现的,寄存器是8个为一组的,如果直接操作这个P2的话,需要同时给8个赋值,但是我们现在只想操作最低位的第一个LED,那我们要怎么做才能只操作最低位的第一个LED,而不影响其他位呢?

我们可以先把P2=0xFE注释掉,然后写成P2_0=0;就可以只操作P2的其中一个口了,而这个口是0口,所以写成P2_0

操作一个寄存器8位的时候,我们要给8位的数据,那操作一位的时候,我们只给0或者1,给2也相当于是1,总之,非0即是1

以上这段代码0错误0警告,接下来下载下来看看效果

结果同样只点亮了第一个LED,其他的保持不亮。

如果加上P2_0=1;它就是会熄灭

我们要实现的效果是第一个按键控制就是按下的时候,执行P2_0=0;

松开的时候,执行P2_0=1;

那么怎么实现呢?

给寄存器写一个状态,它就会把这个状态送给IO口,如果IO口产生电平,它也会把IO口产生的电平送回到寄存器。

根据原理图,我们知道K1这个按键实际上是接在P31这个口

想要直接读这个口,怎么办呢?

代码这样写:

编译一下没有错误就下载程序,重启板子看看效果

重启板子后,我们没有看到灯亮,我们就按一下K1这个键,D1号LED就亮了

松开K1键,LED就灭了。

以上就实现了一个按键控制一个LED的功能。

我们也可以用两个按键控制一个LED

代码这样写:

只有当K1和K2同时按下的时候才会亮

如果将代码改成:

K1或者K2按下它就是会亮

按下K1:

按下K2:

只有K1和K2同时松开才不会亮。

今天就学到这里!

如果还看不懂代码的伙伴,要先把C语言学习到指针那里再学单片机会事半功倍。

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

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

相关文章

Leetcode—114. 二叉树展开为链表【中等】

2023每日刷题(九十八) Leetcode—114. 二叉树展开为链表 Morris-like算法思想 可以发现展开的顺序其实就是二叉树的先序遍历。算法和 94 题中序遍历的 Morris 算法有些神似,我们需要两步完成这道题。 将左子树插入到右子树的地方将原来的右…

JVM系列-7内存调优

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理🔥如果感觉博主的文…

鸿蒙开发初体验

文章目录 前言一、环境配置1.1 安装DevEco Studio1.2 安装相关环境 二、工程创建三、工程结构介绍四、代码实现4.1 初识ArkTs4.2 具体实现 参考资料 前言 HarmonyOS是华为公司推出的一种操作系统,旨在为不同设备提供统一的操作系统和开发平台。鸿蒙开发的出现为用户…

CSS优先级内容

定义CSS样式时,经常出现两个或多个样式规则应用在同一元素的情况,这时就会出现优先级的情况,那么应用的元素应该显示哪一个样式呢? 一.下面举例对优先级进行具体讲解。 p{color:red;} .blue{color:orange;} #header{color:blu…

【Vue】1-2、Webpack 中的插件

一、Webpack 插件的作用 通过安装和配置第三方的插件,可以拓展 webpack 的能力,从而让 webpack 用起来更方便。 二、两个常用插件 1)webpack-dev-server 类似于 node.js 使用的 nodemon 工具 每当修改了源代码,webpack 会自动…

市场复盘总结 20240126

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 昨日主题投资 连板进级率 27/105 25.7% 二进三: 进级率低 50% 最常用的二种方法: 方…

QT + opengl 环境搭建(glfw, glad),创建一个简单窗口

一.下载glfw,glad并编译 1.glfw个人理解就是对底层opengl的一些基本接口的封装,提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。glfw的下载地址:Download | GLFW,下载完成后…

Qt编写手机端视频播放器/推流工具/Onvif工具

一、视频播放器 同时支持多种解码内核,包括qmedia内核(Qt4/Qt5/Qt6)、ffmpeg内核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc内核(vlc2/vlc3)、mpv内核(mpv1/mp2)、…

设计模式分类

常用的设计模式有哪些? 常用的设计模式通常按照创建型、结构型和行为型三大类别来划分,以下是每个类别中的一些常见设计模式: 创建型(Creational Patterns): 单例模式(Singleton Pattern&…

Ultraleap 3Di新建项目之给所有的Joint挂载物体

工程文件 Ultraleap 3Di给所有的Joint挂载物体 前期准备 参考上一期文章,进行正确配置 Ultraleap 3Di配置以及在 Unity 中使用 Ultraleap 3Di手部跟踪 新建项目 初始项目如下: 新建Create Empty 将新建的Create Empty,重命名为LeapPro…

[SWPUCTF 2021 新生赛]easyapp

下载得到一个附件 查壳后面就写一个apk,丢进java反编译也没辙 010看下文件头 ZIP Archive (zip),文件头:50 4B 03 04 ascii码部分是PK,可以直接根据PK判断是zip文件,也有可能是doc文件 rar文件: 52 61 72 21 7z文件头…

eclipse print

eclipse print 这个功能一般很少用,编制文档的时候,经常会用到,保存图片和PDF ADF打印机 我找了下我的win10没有那个图片的打印机 保存为PDF 这个序号很讨厌的,如果从PDF上复制下来的到文本等等,带序号,程…