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,一经查实,立即删除!

相关文章

【机器学习】《机器学习算法竞赛实战》第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…

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;可用于修饰…

ChatGPT 之赋能提示词工程

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

中兴天机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…

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

在软件开发中&#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领…

算法设计与分析实验报告python实现(排序算法、三壶谜题、交替放置的碟子、带锁的门)

一、 实验目的 1&#xff0e;加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1、排序算法…

Github 2024-04-04 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目2Go项目1Jupyter Notebook项目1Java项目1C++项目1非开发语言项目1Vue项目1编程面试大学:成为软件工程师的全面学习计…

Spark-Scala语言实战(12)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的join,rightOuterJoin,leftOuterJoin三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢…

攻防世界 xff_referer 题目解析

xff_referer 一&#xff1a;了解xxf和Referer X-Forwarded-For:简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请求端真实的IP&#xff0c;只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 一般的客户端发送HTTP请求没有X-Forwarded-For头的&#xff0…

宁波ISO27001认证:信息安全管理的黄金标准

&#x1f603;宁波ISO27001认证&#xff1a;&#x1f916;信息安全管理的&#x1f4a1;黄金标准 随着信息技术&#x1f4bb;的迅猛发展&#xff0c;信息安全&#x1f50f;问题日益凸显&#xff0c;成为企业&#x1f3ec;稳定运营和持续发展的&#x1f4ca;关键因素。在这样&am…

Finite Element Procedures K.J.Bathe 【教材pdf+部分源码】|有限元经典教材 | 有限元编程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

Paddle实现人脸对比

人脸对比 人脸对比&#xff0c;顾名思义&#xff0c;就是对比两个人脸的相似度。本文将用Paddle实现这一功能。 PS&#xff1a;作者肝了整整3天才稍微搞明白实现方法 数据集准备 这里使用百度AI Studio的开源数据集&#xff1a; 人脸数据_数据集-飞桨AI Studio星河社区 (b…