当前位置: 首页 > news >正文

MCU独立按键单控LED实现

##江科大视频学习,并且对具体的一些小细节进行更详细的分析。

什么是独立按键?

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

注意:GND为负极,按下按键时相当于连通负极,传到给寄存器时反馈为0V,低电平。

        松开独立按键则为高电平---5V。

K1对应的是P3_1  K2对应的是P3_0 注意一下。

如图所示:

//P3为独立按键处所控制的寄存器if(P3_1==0) //当k1按键被按下时if(P3_1==1) // 当k1按键被松开时

以上便是我们这篇文章所要用到的基本原理。

【3-1】 独立按键控制LED亮灭

#include <REGX52.H>void main()
{while(1){if(P3_1==0) //判断独立按键是否被按下{P2_0=0;//打开第一个LED灯 }else{P2_0=1; //关上LED灯}}
/* LED是正极接正极 ,负极接负极才可以亮
此时的LED右边已经是正极VCC了,那么左边就得
为低电平0V才可亮.*/

记得将文件转为HEX文件。

【3-2】 独立按键控制LED状态

1.什么是按键的抖动?

对于机械开关,当机械触点断开,闭合时,由于机械触电的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时,也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。其实我们有两种解决方案:

  1. 硬件防止抖动(对于我们实现来说,比较困难)
  2. 软件防抖 (比较轻松实现)

回忆一下,我们有个延迟操作,刚好可以用延迟的时间来覆盖这个抖动时间。

如果忘记怎么操作了,可以看这个---点击[1-2] LED灯闪烁.

2.实现独立按键控制LED状态

#include <REGX52.H>void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main()
{while(1){//p3_1指的是k1按键if(P3_1==0){Delay(20);//20ms刚好覆盖抖动while(P3_1==0); //检测按键是否被松开Delay(20);//松开抖动 覆盖//正式操作P2_0=~P2_0;//按位取反//P2_0的L端口默认为高电频,那么就为1,按位取反后便为0}}}

本来的D1的状态为熄灭的是高电平为1,则按位取反后变为低电平为0,则D1灯亮起。

【3-3】独立按键控制LED显示二进制

插入一个知识点:

在MCU编制中,我们通常喜欢用unsigned char 变量名 ,来表示寄存器

因为unsigned char 为八位,符合寄存器大小,其大小范围为0~255。

#include <REGX52.H>
void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{//八位二进制 表示一个寄存器unsigned char LEDNum=0;while(1){if(P3_1==0){Delay(20);//软件消抖while(P3_1==0);//检测松手Delay(20);//消抖LEDNum++;P2=~LEDNum; //按位取反,并赋值给P2}}}

为何要这么写?因为,常识是对于单片机上的所有L端口,初始都默认为高电平,所以都为寄存器里都为1.那么对于P2寄存器也是如此。

如果我们直接对P2进行--->P2++; 则得到0000 0000;对吧

那么然后,我们在按位取反会发生什么;---> 1111 1111;P2寄存器又回到初始状态了,然后一直这么循环下去,直接卡死在这里。所以,我们就用unsigned char LEDNum来代替寄存器,然它进行++,然后按位取反赋值给P2,便可以实现二进制位移了。

【3-4】独立按键控制LED移位.

#include <REGX52.H>
void Delay(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}//定义一个全局变量
unsigned char LEDNum; //一个寄存器定义void main()
{P2=~0x01;//初始化,让第一个灯亮起来if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);
//完成抖动防控后LEDNum++;if(LEDNum>=8){LEDNum=0;//回到首位置}P2=~(0x01<<LEDNum);}
//LED灯右移成功//使用k2按键控制左移if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);
//完成抖动防控后 防止越界if(LEDNum==0){LEDNum=7;//回到最右边}else{LEDNum--;}//进行位移操作P2=~(0x01<<LEDNum);}}

对于 << 这个位计算符号,大家可能有所陌生,请看下图。

请亲自动手来实现以上操作,进行加深印象。 

今天的内容便是这么多。感谢您的观看

相关文章:

MCU独立按键单控LED实现

##江科大视频学习&#xff0c;并且对具体的一些小细节进行更详细的分析。 什么是独立按键&#xff1f; 轻触按键:相当于是一种电子开关&#xff0c;按下开头接通&#xff0c;松开时开头断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意…...

[数据集][目标检测]游泳者溺水数据集VOC+YOLO格式2类别895张

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;895 标注数量(xml文件个数)&#xff1a…...

2402C++,C++使用单链列表

原文 #include <windows.h> #include <malloc.h> #include <stdio.h>//用于列表项的结构;第一个成员是SLIST_ENTRY结构,其他成员是数据.在此,数据只是测试 typedef struct _PROGRAM_ITEM {SLIST_ENTRY ItemEntry;ULONG Signature; } PROGRAM_ITEM, *PPROGR…...

《Docker极简教程》--Docker服务管理和监控--Docker服务的监控

Docker监控的必要性在于确保容器化环境的稳定性、性能和安全性。以下是几个关键原因&#xff1a; 性能优化和故障排除&#xff1a;监控可以帮助识别容器化应用程序的性能问题&#xff0c;并快速进行故障排除。通过监控关键指标&#xff0c;如CPU利用率、内存使用、网络流量等&…...

C++初阶 | [八] (下) vector 模拟实现

摘要&#xff1a;vector 模拟实现讲解&#xff08;附代码示例&#xff09;&#xff0c;隐藏的浅拷贝&#xff0c;迭代器失效 在进行 vector 的模拟实现之前&#xff0c;我们先粗略浏览一下 stl_vector.h 文件中的源码来确定模拟实现的大体框架。 这里提供一些粗略浏览源码的技巧…...

信息安全计划

任何管理人员或人力资源专业人士都知道&#xff0c;除非彻底记录标准和实践&#xff0c;否则永远无法真正实施和执行标准和实践。正如您可能想象的那样&#xff0c;在保护您的网络、技术和数据系统免受网络威胁以及在发生这些事件时规划最及时、高效和有效的响应时&#xff0c;…...

【更新完毕】2024牛客寒假算法基础集训营6 题解 | JorbanS

文章目录 [A - 宇宙的终结](https://ac.nowcoder.com/acm/contest/67746/A)[B - 爱恨的纠葛](https://ac.nowcoder.com/acm/contest/67746/B)[C - 心绪的解剖](https://ac.nowcoder.com/acm/contest/67746/C)[D - 友谊的套路](https://ac.nowcoder.com/acm/contest/67746/D)[E …...

FL Studio All Plugins Edition2024中文完整版Win/Mac

FL Studio All Plugins Edition&#xff0c;常被誉为数字音频工作站&#xff08;DAW&#xff09;的佼佼者&#xff0c;是音乐制作人和声音工程师钟爱的工具。它集音频录制、编辑、混音以及MIDI制作为一体&#xff0c;为用户提供了从创作到最终作品输出的完整工作流程。这个版本…...

神经网络系列---归一化

文章目录 归一化批量归一化预测阶段 测试阶段γ和β&#xff08;注意&#xff09;举例 层归一化前向传播反向传播 归一化 批量归一化 &#xff08;Batch Normalization&#xff09;在训练过程中的数学公式可以概括如下&#xff1a; 给定一个小批量数据 B { x 1 , x 2 , … …...

2023 龙蜥操作系统大会演讲实录:《兼容龙蜥的云原生大模型数据计算系统——πDataCS》

本文主要分三部分内容&#xff1a;第一部分介绍拓数派公司&#xff0c;第二部分介绍 πDataCS 产品&#xff0c;最后介绍 πDataCS 与龙蜥在生态上的合作。 杭州拓数派科技发展有限公司&#xff08;简称“拓数派”&#xff0c;英文名称“OpenPie”&#xff09;是国内基础数据计…...

【Vue渗透】Vue站点渗透思路

原文地址 极核GetShell 前言 本文经验适用于前端用Webpack打包的Vue站点&#xff0c;阅读完本文&#xff0c;可以识别出Webpack打包的Vue站点&#xff0c;同时可以发现该Vue站点的路由。 成果而言&#xff1a;可能可以发现未授权访问。 识别Vue 识别出Webpack打包的Vue站…...

主数据管理是数字化转型成功的基石——江淮汽车案例分享

汽车行业数字化转型的背景 在新冠疫情导火索的影响下&#xff0c;经济全球化政治基础逐渐动摇。作为全球最大的汽车市场&#xff0c;我国的汽车市场逐渐由增量转为存量市场。 在数字化改革大背景下&#xff0c;随着工业4.0时代的到来&#xff0c;江淮汽车集团力争实现十四五数…...

【Spring连载】使用Spring Data访问 MongoDB(十一)----加密Encryption (CSFLE)

[TOC](【Spring连载】使用Spring Data访问 MongoDB&#xff08;十一&#xff09;----加密Encryption (CSFLE)) 一级目录 二级目录 三级目录...

【postgresql】数据表id自增与python sqlachemy结合实例

需求&#xff1a; postgresql实现一个建表语句&#xff0c;表名&#xff1a;student,字段id,name,age&#xff0c; 要求&#xff1a;每次添加一个数据id会自动增加1 在PostgreSQL中&#xff0c;您可以使用SERIAL或BIGSERIAL数据类型来自动生成主键ID。以下是一个创建名为stude…...

什么是索引?在 MySQL 中有哪些类型的索引?它们各自的优势和劣势是什么?

什么是索引&#xff1f;在 MySQL 中有哪些类型的索引&#xff1f;它们各自的优势和劣势是什么&#xff1f; 索引是数据库中用于帮助快速查询数据的一种数据结构。在 MySQL 中&#xff0c;索引可以显著提高查询性能&#xff0c;因为它允许数据库系统不必扫描整个表来找到相关数据…...

Docker安装与基础知识

目录 -----------------Docker 概述--------------------------- 容器化越来越受欢迎&#xff0c;因为容器是&#xff1a; Docker与虚拟机的区别&#xff1a; Docker核心概念&#xff1a; ●镜像 ●容器 ●仓库 -----------------安装 Docker--------------------------…...

搭建Facebook直播网络对IP有要求吗?

在当今数字化时代&#xff0c;Facebook直播已经成为了一种极具吸引力的社交形式&#xff0c;为个人和企业提供了与观众直接互动的机会&#xff0c;成为推广产品、分享经验、建立品牌形象的重要途径。然而&#xff0c;对于许多人来说&#xff0c;搭建一个稳定、高质量的Facebook…...

Qt开发:MAC安装qt、qtcreate(配置桌面应用开发环境)

安装qt-creator brew install qt-creator安装qt brew install qt查看qt安装路径 brew info qtzhbbindembp ~ % brew info qt > qt: stable 6.6.1 (bottled), HEAD Cross-platform application and UI framework https://www.qt.io/ /opt/homebrew/Cellar/qt/6…...

python学习网站

Python系列干货之——Python与设计模式 - 知乎 Python之23种设计模式_23种设计模式 python-CSDN博客 用python实现设计模式 — python-golang-web-guide 0.1 文档 python设计模式_Python六大原则&#xff0c;23种设计模式 - 掘金 Python 常用设计模式 Python入门 类class提…...

编程笔记 Golang基础 033 反射的类型与种类

编程笔记 Golang基础 033 反射的类型与种类 一、反射的类型和种类二、切片与反射三、集合与反射四、结构体与反射五、指针与反射六、函数与反射小结 反射机制的作用范围涵盖了几乎所有的类型和值的操作层面&#xff0c;它极大地增强了Go语言在运行时对于自身类型系统的探索和操…...

Java项目Loom化实战:3步完成Spring WebFlux与虚拟线程深度整合(含生产级架构图)

第一章&#xff1a;Java项目Loom响应式编程转型指南Project Loom 为 Java 带来了轻量级虚拟线程&#xff08;Virtual Threads&#xff09;和结构化并发模型&#xff0c;与响应式编程范式&#xff08;如 Project Reactor 或 R2DBC&#xff09;并非互斥&#xff0c;而是可协同演进…...

AMD锐龙+A320主板装Win7,我踩过的那些坑和最终解决方案(保姆级避坑指南)

AMD锐龙A320主板安装Win7全攻略&#xff1a;从蓝屏到完美运行的实战手册 当AMD锐龙处理器遇上A320主板&#xff0c;再搭配Windows 7系统&#xff0c;这个看似简单的组合却成了无数技术爱好者的噩梦。作为一名经历过无数次蓝屏、黑屏和自动重启的"踩坑专业户"&#xf…...

晶体管工作原理与半导体技术解析

1. 晶体管工作原理与半导体技术解析1947年圣诞节前夕&#xff0c;贝尔实验室的两位物理学家约翰巴丁和沃尔特布拉顿在锗晶体表面放置了两个相距仅0.05毫米的金属触点&#xff0c;意外发现这个简单装置能够放大电信号。这个被称为"点接触晶体管"的发明&#xff0c;彻底…...

终极指南:如何彻底解锁《原神》帧率限制,实现高刷新率游戏体验

终极指南&#xff1a;如何彻底解锁《原神》帧率限制&#xff0c;实现高刷新率游戏体验 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否在游玩《原神》时感觉60FPS的帧率限制让你的…...

如何让音乐成为你的社交名片:3个神奇技巧让Discord好友实时看到你的播放列表 [特殊字符]

如何让音乐成为你的社交名片&#xff1a;3个神奇技巧让Discord好友实时看到你的播放列表 &#x1f3b5; 【免费下载链接】NetEase-Cloud-Music-DiscordRPC 在Discord上显示网抑云/QQ音乐. Enables Discord Rich Presence For Netease Cloud Music/Tencent QQ Music. 项目地址…...

WeChatMsg:你的微信聊天记录永久保存与智能分析终极指南

WeChatMsg&#xff1a;你的微信聊天记录永久保存与智能分析终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...

告别‘Link 1189’错误:Geant4在VS2022 Release/Debug模式下的编译策略选择

突破Geant4编译限制&#xff1a;VS2022下高效开发与调试的实战指南 当你在Visual Studio 2022中尝试编译Geant4这样的巨型物理仿真库时&#xff0c;是否遇到过那个令人头疼的"Link 1189"错误&#xff1f;这个看似简单的编译错误背后&#xff0c;隐藏着Windows平台下开…...

nli-MiniLM2-L6-H768效果展示:开源项目README与Issue描述的蕴含关系质量评估

nli-MiniLM2-L6-H768效果展示&#xff1a;开源项目README与Issue描述的蕴含关系质量评估 1. 模型核心能力解析 nli-MiniLM2-L6-H768是一个专为文本关系判断设计的轻量级自然语言推理模型。与常见的生成式AI不同&#xff0c;它的核心价值在于精准评估两段文本之间的逻辑关系。…...

掌握IEC 61850通信协议:libiec61850开源库的完整入门指南

掌握IEC 61850通信协议&#xff1a;libiec61850开源库的完整入门指南 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 libiec61850…...

如何用AI对话彻底改变你的Godot游戏开发:Godot-MCP终极指南

如何用AI对话彻底改变你的Godot游戏开发&#xff1a;Godot-MCP终极指南 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP …...