51单片机入门之独立按键

   

目录

1.按键简介     

2.独立按键控制LED亮灭

3.独立按键控制LED移位


1.按键简介     

        在生活中,我们常常会见到各种按键,我们的开发板上也有按键,就在左下角有四个按键,我们把它们叫做独立按键。

        独立按键的原理比较简单,大概就是按下独立按键,按键就会把电路连通,松开按键,又会恢复原样。

        按键的内部结构是一个有弹性的金属片,按下会连接电路,松开之后又会恢复原样,所以电路又会断开。在单片机中,我们的按键对应的GPIO管口是下面这样的:

        你会发现这里其实有一点不太一样的东西,就是K1和K2对应的GPIO口好像有点不太一样,是反过来的,这个,具体的原因我们不得而知,但是我们使用的时候需要记住我们两个按键对应控制的端口是不一样的就行了。

        这里这里我们按下K1,电路连接,P31管脚就会接收到低电平信号,也就是P31会由默认的高电平1变成0,所以我们使用的时候只需要判断端口的值是1还是0就行了。

        其次,金属按键还有一个性质——按下抖动

        这也是一个按键的弊端,按键按下和松开时的抖动会导致控制的变化,比如我们定义按下按键灯就亮,那么存在抖动的情况下,我们的灯可以在前面的这段抖动的时间里面不断变化,也就是暗亮交替闪烁之后再保持稳定,所以,按键中一大重要的操作就是按键消抖。

2.独立按键控制LED亮灭

        这里,我们使用KEY1来控制LED1的亮灭,按键1对应的端口是P31,LED1对应的端口是P20,我们先考虑一下如何使用按键。

        首先我们使用按键就要检测按键的按下,按键按下的时候把LED1的状态更改,这样就好了,单在细节方面还需要补充,比如我们的按键需要消抖防止出现因为按键抖动导致的差错,所以我们需要在检测到按键按下之后暂停20ms进行消抖处理,在按键松开之后再进行消抖处理,这样就免除了按键抖动对我们操作的干扰了。

        其次,按键按下之后松开之前,会一直处于按下的状态,也就是说,我们如果在这里设置LED变为!LED(即LED由1变0,由0变1),这样的话,我们在按下按键之后松开之前会一直进行判断KEY,而且每次都会成功然后变化LED状态,这并不是我们想要的。所以我们就要使用while循环把按键处于按下状态锁定起来,循环内部不使用任何操作,也就是写一个while(KEY==0);这样我们就可以让按键按下的时候始终处于这个循环里,按键松开之后再执行相应操作。

        然后我们就可以实现我们的代码了:

#include <REGX52.H>
#include <INTRINS.H>sbit KEY1 = P3^1;
sbit LED1 = P2^0;void Delay(unsigned int xms)		//@11.0592MHz
{while(xms--){unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);}
}void main()
{LED1 = 1;while(1){if(KEY1 == 0){Delay(20);//消抖while(KEY1 == 0);//检测按键松开Delay(20);//消抖LED1 = !LED1;//变化状态}}
}

        这里我们的代码中使用了 sbit KEY1 = P3^1; 和 sbit LED1 = P2^0;这两句代码定义端口,其实我们也可以直接对两个端口赋值,但是我们的格式就要变了,比如我们使用P3_1和P2_0而不是P3^1和P2^0,因为这两种表示方式在51里是不一样的。

3.独立按键控制LED移位

        这里模仿LED流水灯的效果,我们使用按键检测来让LED移位,思路是KEY1控制左移,KEY2控制右移,初始LED默认在LED1的位置处于亮的状态。

        这样我们就可以实现代码了:

        我们需要控制整个LED串,所以就选择对P2端口直接赋值,初始值需要是只有LED1亮,那么输入的数据就要是1111 1110,也就是初始化P2为0xFE,然后就是LED的左右移动,使用_crol_()和_cror_()函数即可,按键的消抖和KEY1(P31)与KEY2(P30)对应的端口也要注意一下,并且数据输入的是反过来的数据,所以我们的左移右移操作也要相反,即KEY1使用右移函数实现LED左移,KEY2使用左移函数实现LED右移,这样就可以完成我们的操作:

#include <REGX52.H>
#include <INTRINS.H>sbit KEY1 = P3^1;
sbit KEY2 = P3^0;void Delay(unsigned int xms)		//@11.0592MHz
{while(xms--){unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);}
}void main()
{P2 = 0xFE;while(1){if(KEY1 == 0){Delay(20);while(KEY1 == 0);Delay(20);P2 = _cror_(P2,1);}if(KEY2 == 0){Delay(20);while(KEY2 == 0);Delay(20);P2 = _crol_(P2,1);}}
}

        然后上电测试,就完成了独立按键部分的内容

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

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

相关文章

VUE实现下一页的功能

实现步骤&#xff1a;1、确定分页参数&#xff1a;确定当前页码和每页显示的数量&#xff1b;2、获取数据&#xff1a;使用vue的axios或其他http库向后端发送请求&#xff0c;传递当前页码和每页显示的数量作为参数&#xff1b;3、更新数据&#xff1a;在vue组件中&#xff0c;…

Qt与OpenCV实现图像模板匹配

在 Qt 中使用 OpenCV 实现模板匹配可以通过集成 OpenCV 库和使用其相关函数来完成。以下是一般的步骤&#xff1a; 安装 OpenCV&#xff1a;首先&#xff0c;确保你已经安装了 OpenCV 库&#xff0c;并将其配置到你的开发环境中。 创建 Qt 项目&#xff1a;使用 Qt creator 或…

VSCode 插件 Todo Tree 待办事项

官方介绍&#xff1a;这个扩展可以快速搜索工作区中的注释标签&#xff0c;并将它们显示在活动栏的树状图中 我们写代码的时候&#xff0c;难免会遇到一些情况需要标记或搁置&#xff0c;比如&#xff1a;前端开发者在编写页面的时候页面样式完成了&#xff0c;但是后端接口还…

【机器学习】《机器学习算法竞赛实战》第7章用户画像

文章目录 第7章 用户画像7.1 什么是用户画像7.2 标签系统7.2.1 标签分类方式7.2.2 多渠道获取标签7.2.3 标签体系框架 7.3 用户画像数据特征7.3.1 常见的数据形式7.3.2 文本挖掘算法7.3.3 神奇的嵌入表示7.3.4 相似度计算方法 7.4 用户画像的应用7.4.1 用户分析7.4.2 精准营销7…

RabbitMQ安装详细教程

&#xff08;一&#xff09;在Windows系统上安装Erlang的步骤如下&#xff1a; 打开Erlang的官方下载页面&#xff0c;选择适合你的Windows系统的版本进行下载。 下载完成后&#xff0c;双击运行下载的.exe文件&#xff0c;进入Erlang的安装向导。 在安装向导中&#xff0c;按…

vscode-keil一起用

安装插件 1、C/C Extension Pack 2、Keil Assistant 配置 重启生效&#xff01;&#xff01;&#xff01; 下载安装 Mingw 下载链接&#xff1a; 添加环境变量&#xff1a; 注意确认&#xff01;&#xff01;&#xff01; 报错 gccC:\迅雷下载\MinGW\MinGW\bin…

力扣爆刷第111天之CodeTop100五连刷41-45

力扣爆刷第111天之CodeTop100五连刷41-45 文章目录 力扣爆刷第111天之CodeTop100五连刷41-45一、232. 用栈实现队列二、4. 寻找两个正序数组的中位数三、31. 下一个排列四、69. x 的平方根五、8. 字符串转换整数 (atoi) 一、232. 用栈实现队列 题目链接&#xff1a;https://le…

注解(Annotation)

10.1 注解概述 10.1.1 什么是注解 注解&#xff08;Annotation&#xff09;是从JDK5.0开始引入&#xff0c;以“注解名”在代码中存在。例如&#xff1a; Override Deprecated SuppressWarnings(value”unchecked”) Annotation 可以像修饰符一样被使用&#xff0c;可用于修饰…

【八股】Spring MVC

什么是Spring MVC&#xff1f; Spring MVC 是 Spring 中的一个很重要的模块&#xff0c;是一个根据MVC架构推出的web开发框架&#xff0c;目的是为了简化Java的web开发 Spring MVC 执行流程&#xff1f; 现在一般都是前后端分离&#xff0c;根据接口去开发嘛&#xff0c;所以…

ChatGPT 之赋能提示词工程

原文&#xff1a;Chatgpt Empowers Your Prompt Engineering with AI Tools 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 在当今这个时代&#xff0c;设计和人工智能工具对于企业在不断发展的市场中蓬勃发展至关重要。ChatGPT 为探索一系列可能性提供了机会&am…

Visual Studio(VS) 搭建 QT 开发环境

Visual Studio(VS) 搭建 QT 开发环境 在当今的软件开发领域,Visual Studio(VS)是一款备受欢迎的集成开发环境(IDE),而 QT 则是一个强大的跨平台应用程序框架。将两者结合使用,可以为开发人员提供高效、便捷的开发体验。本文将详细介绍如何在 VS2022 中搭建 QT 开发环…

中兴天机A31 A31PRO 5G zte A2122H te A2022H 解锁BootLoader root权限 教程magisk,原厂刷机包

zte A2122H P768A02 zte A2022H P875A02 中兴天机A31 A31PRO 5G zte A2122H te A2022H 解锁BootLoader root教程magisk&#xff0c;原厂刷机包 感谢 某大神支持&#xff0c;已经解锁root 刷了面具&#xff1b; 中兴天机A31 A31PRO 5G zte A2122H te A2022H 解锁BootLoad…

2024.3.16力扣每日一题——矩阵中移动的最大次数

2024.3.16 题目来源我的题解方法一 深度优先遍历&#xff08;超时&#xff09;方法二 动态规划方法三 广度优先遍历 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2684 我的题解 方法一 深度优先遍历&#xff08;超时&#xff09; 从第一列的每一行开始进行深度优先遍…

深入浅出 -- 系统架构之单体架构和微服务架构的区别

在软件开发中&#xff0c;架构设计是非常重要的一环。架构设计不仅决定了软件系统的性能、可维护性和扩展性&#xff0c;还直接关系到开发成本和项目进度。目前&#xff0c;主流的架构设计模式有两种&#xff0c;一种是单体架构&#xff0c;另一种是微服务架构。本文将详细介绍…

CVPR24_ArGue: Attribute-Guided Prompt Tuning for Vision-Language Models

Abstract 尽管软提示微调在调整视觉语言模型以适应下游任务方面表现出色&#xff0c;但在处理分布偏移方面存在局限性&#xff0c;通过属性引导提示微调&#xff08;Attribute-Guided&#xff0c;ArGue&#xff09;来解决这个问题 Contributions 与直接在类名之前添加软提示…

【Linux】Ubuntu 磁盘管理

准备一个U盘或者SD卡&#xff08;含读卡器&#xff09;&#xff0c;并将其格式化成 FAT32 格式&#xff0c;不要使用NTFS格式&#xff08;这是微软的专利&#xff0c;大部分Linux系统不支持&#xff09;和exFAT格式&#xff08;有的Linux系统也不支持&#xff09;。 如果Ubun…

递归算法讲解2

前情提要 上一篇递归算法讲解在这里 递归算法讲解&#xff08;结合内存图&#xff09; 没看过的小伙伴可以进去瞅一眼&#xff0c;谢谢&#xff01; 递归算法的重要性 递归算法是非常重要的&#xff0c;如果想要进大厂&#xff0c;以递归算法为基础的动态规划是必考的&…

关闭PyCharm中因双击Shift而跳出的搜索框

有时候老是多次按到shift而跳出一个搜索框&#xff0c;本来在编写代码&#xff0c;怎么突然就开始搜索了&#xff0c;非常的烦人。 其实这个搜索框叫做“随处搜索”。 关闭步骤 1、打开PyCharm的设置。 2、在设置-高级设置中勾选-禁用双击修改键快捷键即可。

idea改vm参数后没法重启

背景 Idea2023修改了编译器compiler内存&#xff0c;maven的run time内存&#xff0c;idea安装目录下idea64.exe.vmoptions选项的jvm内存参数后导致idea启动时没有任何反应&#xff0c;也没有任何日志输出 idea2023没法重启 导致idea2023没法重启的操作步骤如下 1.修改idea的…

Higgsfield AI: 对飙Sora打造个性化视频新浪潮,重塑社交媒体内容创作

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…