MCU-51:独立按键控制LED灯的动作

news2025/7/8 5:28:46

目录

  • 一、独立按键
  • 二、独立按键控制LED亮灭
  • 二、消除按键抖动
    • 2.1 按键的抖动
    • 2.2 控制LED灯状态-消除按键抖动
    • 三、独立按键控制LED显示二进制
  • 四、独立按键控制LED灯移位

一、独立按键

轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开
在这里插入图片描述
独立按键原理图
在这里插入图片描述
这里总共有四个独立按键,它们公共的一段都接到了GND电源的负极,另一端引出了四个编号是连接到单片机板子中的MCU上面,还有一段是接到了IO口上。
那我们就知道了单片机上电的时候所有的IO口默认都是高电平,那么就是当是如果按键没有按下的时候那么这个IO口保证的就是高电平,按下的话那么这个IO口就变成低电平了。寄存器会检测IO口的电平,然后在读回来这个寄存器当中。如果按键松开去读取这个寄存器那么它其实就是一个高电平默认为1的一个高电平,反之。那么根据这个现象我们可以得知我们的独立按键是不是被按下了。

二、独立按键控制LED亮灭

通过查询原理图得知:K1=P3_1,则代码如下

#include <REGX52.H>
sbit led1=P2^0;
sbit key1=P3^1;
void main()
{
	while(1)
	{
		if(key1==0)
		{
			led1=0;
		}
		else
		{
			led1=1;
		}
	}
}

如果通过独立1键或独立2键都能控制亮灭该怎么写,这里就用到C语言的逻辑符号
回顾一下
在这里插入图片描述
在这里插入图片描述
那么代码应该如下

#include <REGX52.H>
sbit led1=P2^0;
sbit key1=P3^1;
sbit key2=P3^0;
void main()
{
	while(1)
	{
		if(key1==0||key2==0)
		{
			led1=0;
		}
		else
		{
			led1=1;
		}
	}
}

二、消除按键抖动

2.1 按键的抖动

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动
在这里插入图片描述
在按键闭合的时候会产生一些抖动,没有按键按下的话它就是一个高电平(1)(单片机上电的时候所有的IO口默认都是高电平)。在我们按下按键的时候它就会变成(0),并且由于它的是机械触电会弹开,然后上下抖动几下,然后才会稳定的变成(0)。抖动的时间上面图中也表示的是(510)ms。当抖动消失的时候进入了一个稳定的低电平(0),这个持续时间是看你手什么时候松开这个按键。在松手的时候也会产生抖动,它也不会突然变成高电平(1),也会抖动产生时间为(510)ms。最后,松手。

按键的消抖有两种方法:
加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!
通过软件来进行一个延迟函数,把这个消抖进行操作!

2.2 控制LED灯状态-消除按键抖动

根据上面的叙述转换成代码

#include <REGX52.H>
sbit led1=P2^0;
sbit key1=P3^1;
void delay(int i)
{
	while(i--);
}
void main()
{
	while(1)
	{
		if(key1==0)
		{
			delay(20);
			while(key1==0);
			delay(20);
			led1=~led1;
		}
	}
}

三、独立按键控制LED显示二进制

直接上代码

#include <REGX52.H>
sbit key1=P3^1;
void Delay(int i)
{
	while(i--);
}
int main(void)
{
	unsigned char LEDNum = 0;
	while(1)
	{
		if(key1==0)			
		{
			Delay(20);		
			while(key1==0);
			Delay(20);		
							
			LEDNum++;	
			P2=~LEDNum;      
		}
	}
}

这里用 unsigned char 类型是因为:无符号字符型(所占1字节 = 8bit位)刚好对应着8位二进制的数据,那这八位二进制的正好这个P2口和这个寄存器51单片机保持一致。

注意:P2口上电之后和单片机的IO上电一样都是默认的是高电平! 1111 1111

LEDNum取反给P2的话,其实变量取反给P2的值上它是并不会改变这个变量的值。它的值还是没有取反的值。在等号右边的话,它并不会改变LEDNum的值。其实就是取反当中你取反的值是右值就不会被改变。

四、独立按键控制LED灯移位

#include <REGX52.H>
sbit key1=P3^1;
sbit key2=P3^0;
void Delay(int i)
{
	while(i--);
}
int main(void)
{
	unsigned char LEDNum = 0;
	P2=0xFE;
	while(1)
	{
		if(key1==0)			
		{
			Delay(20);		
			while(key1==0);
			Delay(20);		
							
			LEDNum++;	
			if(LEDNum>=8)
			{
				LEDNum=0;
			}
			P2=~(0x01<<LEDNum);
		}
		if(key2==0)			
		{
			Delay(20);		
			while(key2==0);
			Delay(20);		
							
			LEDNum--;	
			if(LEDNum==0)
			{
				LEDNum=7;
			}
			P2=~(0x01<<LEDNum);
		}
	}
}

P2口当中的P一定是要大写的,标识符一定要严格区分大小写!
当你在定义一个局部变量的时候一定要注意赋值初始值,在全局变量定义的话默认为0!

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

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

相关文章

微服务技术--认识微服务

技术栈&#xff1a; 认识微服务 服务架构演变 单体架构 将业务的功能集中在一个项目中开发&#xff0c;打成一个包部署优点&#xff1a; 架构简单部署成本低 缺点&#xff1a; 耦合度高 分布式架构 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&…

黑盒测试用例设计 - 场景法

原理 现在的软件几乎都是用时间触发来控制流程的。测试时&#xff0c;可以以生动的描述出触发时的情景&#xff0c;有利于设计测试用例&#xff0c;同时使测试用例更容易理解和执行。基本流&#xff1a;软件功能按照正确的事件流实现的一条正确流程。通常一个业务仅存在一个基…

[洛谷]P2234 [HNOI2002]营业额统计

[洛谷]P2234 [HNOI2002]营业额统计一、问题描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、问题分析1、算法标签2、思路分析三、代码实现一、问题描述 [洛谷]P2234 [HNOI2002]营业额统计 题目描述 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后…

微服务系列 - Zookeeper下篇:源码解析

前言 关于zookeeper的入门到精通请阅读&#xff1a;微服务系列 - Zookeeper上篇 注&#xff1a;本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 参考文档&#xff1a;https://blog.csdn.net/mjb740074431/article/details/120173792 一、算法基础 Zook…

@Configuration注解

1.作用 Configuration注解的作用&#xff1a;声明一个类为配置类&#xff0c;用于取代bean.xml配置文件注册bean对象。 2.基础运用 Configuration注解最常见的搭配使用有两个&#xff1a;Bean和Scope Bean&#xff1a;等价于Spring中的bean标签用于注册bean对象的&#xff…

SpringBoot 过滤器、拦截器、监听器对比及使用场景

一、关系图理解 二、区别 1.过滤器 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁 可以对请求的URL进行过滤, 对敏感词过滤 挡在拦截器的外层 实现的是 javax.servlet.Filter 接口&#xff0c;是 Servlet 规范的一部分 在请求进入容器后&#xff0c;但…

Java 线程的六种状态及其简易转换

1.Java中线程的状态分为六种 NEW&#xff1a;初始状态&#xff0c;线程被创建&#xff0c;但是还没有调用start()方法。 RUNNABLE&#xff1a;运行状态&#xff0c;Java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中”。 BLOCKED&#xff1a;阻塞状态,表示线程阻塞于…

IJCAI-2022 多级发射方法的脉冲神经网络

原文链接&#xff1a;CSDN-脉冲神经网络&#xff08;SNN&#xff09;论文阅读&#xff08;四&#xff09;-----IJCAI-2022 多级发射方法的脉冲神经网络 Multi-Level Firing with Spiking DS-ResNet: Enabling Better and Deeper Directly-Trained Spiking Neural Networks目录说…

SAP UI5 Smart Table 和 Smart Filter Bar 的联合使用方法介绍试读版

本教程第 147 个步骤&#xff0c;我们介绍了 SAP UI5 Smart Table 控件的用法&#xff1a; SAP UI5 应用开发教程之一百四十七 - SAP UI5 SmartTable 控件的使用介绍 如下图所示&#xff1a; 本步骤我们在 Smart Table 本身的基础上再进一步&#xff0c;学习如何将 Smart Tab…

占道摆摊经营监控报警系统 yolov5

占道摆摊经营监控报警系统通过Python基于yolov5深度学习网络模型&#xff0c;对城市道路区域实时检测&#xff0c;当yolov5模型检测到有流动摊点摆摊违规经营时&#xff0c;立即抓拍告警。Yolo模型采用预定义预测区域的方法来完成目标检测&#xff0c;具体而言是将原始图像划分…

[java]-JDBC

JDBC 是 Java 连接数据库的一种方式&#xff0c;它是一种 Java API&#xff0c;可以用于连接数据库&#xff0c;并且可以访问数据库中的数据。 JDBC 原理 JDBC 是接口&#xff0c;驱动是接口的实现&#xff0c;没有驱动将无法完成数据库连接&#xff0c;从而不能操作数据库!每…

USB TO SPI(上海同旺电子)调试器调试MCP4822

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、MCP4822&#xff1a;双通道12 位电压输出DAC; 特性 • MCP4802&#xff1a;双通道8 位电压输出DAC • MCP4812&#xff1a;双通道10 位电压输出DAC • MCP4822&#xff1a;双通道12 位电压输出DAC • 轨对…

React18:创建React项目(自动)

文章目录使用步骤项目目录结构Node_modulesPublicSrcPackage.Json总结使用步骤 打开命令行进入到项目所在目录使用如下命令&#xff1a;npx create-react-app 项目名 注意&#xff1a;项目名不能带大写字符 项目目录结构 项目目录结构如下&#xff1a; react-app├─ no…

网络实验之RIPV2协议(二)

一、RIPV2协议和实验简介 RIP-2是一种无类别路由协议&#xff08;Classless Routing Protocol&#xff09;&#xff0c;支持路由标记&#xff0c;在路由策略中可根据路由标记对路由进行灵活的控制。报文中携带掩码信息&#xff0c;支持路由聚合和CIDR&#xff08;Classless Int…

MMIM(2021 EMNLP)分级互信息最大化

论文题目&#xff08;Title&#xff09;&#xff1a;Improving Multimodal Fusion with Hierarchical Mutual Information Maximization for Multimodal Sentiment Analysis 研究问题&#xff08;Question&#xff09;&#xff1a;提出了一个名为 (MMIM)&#xff0c;它在层次上…

Centos7下安装Nginx及配置SSL

文章目录1.官网下载Nginx2.安装依赖包3.安装Nginx4.启动Nginx5.防火墙放开端口6.Nginx的SSL模块安装7.SSL证书准备8.Nginx配置SSL1.官网下载Nginx ​ 去官网下载需要的nginx压缩包&#xff0c;地址&#xff1a;http://nginx.org/en/download.html&#xff0c;此处下载最新稳定…

DFS——剪枝

文章目录概述优化搜索顺序排除等效冗余可行性剪枝最优性剪枝例题小猫爬山木棒总结概述 优化搜索顺序 不同的搜索顺序会产生不同的搜索树形态&#xff0c;与可行性剪枝结合&#xff0c;去除非法状态&#xff0c;按照一定顺序可使规模大幅度减小。 例&#xff1a; 给定一个无重复…

JavaSE第6篇:面向对象上

一、面向对象 1、面向对象&#xff1a;人关注对象、人关注具体事物信息 2、对象: 只要是客观存在的事物皆为对象 面向对象程序设计的重点是类的设计 设计类就是设计类的成员 思考&#xff1a;人把大象装进冰箱 ? 面向过程POP思想&#xff1a;强调的是过程&#xff08;动…

Web前端开发入门学习分享

Web前端开发入门学习分享 1&#xff1a;如何开始学习Web前端 首先你需要学习html的各个标签&#xff0c;掌握其用法和规范&#xff0c;明白其作用。 开始学习css的使用&#xff0c;你先学习在html页面中为标签增加css样式&#xff0c;其次是将css写在网页的<head></…

【记录】chmod修改组属性失效问题

记录一次chmod命令修改文件夹失效问题。 1.问题描述 有一个普通用户的目录test权限是750&#xff0c;使用chmod将文件权限修改成770发现同组的其他用户无法在该目录创建文件。 2.问题原因 给目录设置acl权限导致chmod在修改文件权限时失效【其实不是失效了】 调研发现&#…