51单片机学习(3)-----独立按键控制LED的亮灭状态

 

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步了。

 

e6d98440ee274d5f9ee0ee6b6ac7f36a.jpeg

目录

一.  器件介绍及实验原理

1.独立按键

(1)独立按键在开发板中的位置:

(2)按键介绍:

(3)按键的抖动:

(4)开发板中独立按键模块:

2.LED模块 

3.独立按键与核心的连接:

二.  程序软件设计

1.延时函数的设置 :

2.按键抖动的消除: 

3.补充符号:

4.程序设计: 

程序1:K1,K2控制同时控制LED1

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

三.实验视频 

   


 

一.  器件介绍及实验原理

 

1.独立按键

(1)独立按键在开发板中的位置:

f830656140d948b19df77de168c8e81a.png

 

(2)按键介绍:

  按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。开发板上使用的按键及内部简易图:

f66cbe412eb24e72bb9ce17f567e78bf.png

 

  按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态, 如 果按键按下,初始导通状态变为断开,初始断开状态变为导通。 

 

(3)按键的抖动:

  通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号 如下图所示:

86ed13eccebd4a7f9b3a7cbc06c4867b.png

   由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间 的长短由按键的机械特性决定的,一般为 5ms 到 10ms。按键稳定闭合时间的长 短则由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引起按 键被误读多次。为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。 

 

(4)开发板中独立按键模块:

2d6019e471eb4d94920fc256265317f9.png

注意:1.这里开关K1对应P3-1,K2对应P3-0,K3对应P3-2,K4对应P3-3

           2.GND为接地符号,用于为电路提供一个电势参考点,通常与电路的电源负极相连,即表示低电势一端。

 

2.LED模块 :

LED模块图:7a461cbebc1c4077b306baa4a641a3a9.png 

注意:1.具体介绍可见51单片机博客2(LED流水灯)

           2.这里VCC代表电源正极或者电路的供电电压,即表示高电平一端 

 

3.独立按键与核心的连接:

连接图:

73a637b29a6e448889606405968a727b.png  

 

二.  程序软件设计

 

1.延时函数的设置 :

这里关于自定义的延时函数的获取可以参考51单片机2(LED流水灯),具体程序如下:

void Delay(unsigned int xms)	//@11.0592MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

 

2.按键抖动的消除: 

   按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更 加简单,通常采用软件消抖。我们开发板也是采用软件消抖,一般来说一个简单 的按键消抖就是先读取按键的状态,如果得到按键按下之后,延时 10ms,再次 读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。其中延时 10ms 就是软件消抖处理,这里给大家列出单片机常用的软件去抖动方法:

(1)先设置 IO 口为高电平(由于开发板 IO 都有上拉电阻,所以默认 IO 为高 电平)。          (2)读取 IO 口电平确认是否有按键按下。      (3)如有 IO 电平为低电平后,延时几个毫秒。                                                                   

(4)再读取该 IO 电平,如果仍然为低电平,说明按键按下。                                                       

(5)执行按键控制程序。 

     独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其他引脚 分别接到单片机 IO 口。 我们知道单片机的 IO 口既可作为输出也可作为输入使用,当检测按键时用 的是它的输入功能,独立按键的一端接地, 另一端与单片机的 I/O 口相连,开 始时先给该 IO 口赋一高电平,然后让单片机不断地检测该 I/O 口是否变为低 电平,当按键闭合时,即相当于该 I/O 口通过按键与地相连,变成低电平,程序一旦检测到 I/O 口变为低电平则说明按键被按下,然后执行相应的指令。

 

3.补充符号:

6f50799ffa614b939ae5d0274cb767fc.png

这里我们写的程序中主要含等于,逻辑或,按位取反符号。 

 

4.程序设计: 

程序1:K1,K2控制同时控制LED1

#include <REGX52.H>

void Delay(unsigned int xms)	//@11.0592MHz  //延时函数设置
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
void main()
{
	while(1)   //while循环语句
	{
		if(P3_1==0||P3_0==0)   //if语句,并且运用逻辑或
		{
			Delay(20);    //延时20ms,去除第一段抖动
			while(P3_1==0||P3_0==0);
			Delay(20);  //去除第二段抖动
			P2_0=~P2_0;   //按位取反,即对应的LED状态改变
		}
	}
}

注意:这里对于端口的定义也可以参考流水灯博客一文,即对于0与1所对应的含义,及端口所代表的连接地方和功能。 

 

程序2:K1控制LED1,K2控制LED2,K3控制LED3,K4控制LED4

#include <REGX52.H>

void Delay(unsigned int xms)	//@11.0592MHz
{
	unsigned char data i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
void main()
{
	while(1)
	{
			if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			P2_0=~P2_0;
		}
			if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			P2_1=~P2_1;
		}
			if(P3_2==0)
		{
			Delay(20);
			while(P3_2==0);
			Delay(20);
			P2_2=~P2_2;
		}
			if(P3_3==0)
		{
			Delay(20);
			while(P3_3==0);
			Delay(20);
			P2_3=~P2_3;
		}
	}
}

 

三.实验视频 

 

51单片机独立矩阵控制LED 

51单片机独立矩阵控制LED

感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 

 

 

 

 

   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity3d C#转换微信小游戏按小游戏包内模式包体20M限制问题记录

前言 在利用这个官方插件&#xff08;minigame-unity-webgl-transform&#xff09;将Unity3d的 项目转换为微信小游戏的过程中&#xff0c;转出的包体&#xff08;首包资源加载方式&#xff1a;小游戏包内&#xff09;不能超过20m的限制&#xff0c;如果大于这个值就需要采用首…

libigl 网格曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Mesh曲率特征通常指的是在三维几何网格(Mesh)上计算的曲率相关的一系列特征,包括主曲率、高斯曲率、平均曲率等。这些曲率特征提供了对Mesh表面形状的详细描述,对于表面形状分析、形状比较和几何建模等领域非常…

BUGKU-WEB 文件包含

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥我就干啥&#xff1a;点击一下试试你会想到PHP伪协议这方面去嘛&#xff0c;你有这方面的知识储备吗&#xff1f; 相关工具 解题步骤 查看源码 看到了一点提示信息&#xff1a; ./index.…

[TCP] TCP/IP 基础知识词典(2)

我想统计一下&#xff0c;TCP/IP 尤其是TCP协议&#xff0c;能搜到的常见的问题&#xff0c;整理起来&#xff0c;关键词添加在目录中&#xff0c;便于以后查阅。 目前预计整理共3篇&#xff1a; [TCP] TCP/IP 基础知识问答 &#xff1a;基础知识 [TCP] TCP/IP 基础知识问答&…

LeetCode--代码详解 59. 螺旋矩阵 II

59. 螺旋矩阵 II 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&a…

django配置视图并与模版进行数据交互

目录 安装django 创建一个django项目 项目结构 创建视图层views.py 写入视图函数 创建对应视图的路由 创建模版层 配置项目中的模版路径 创建模版html文件 启动项目 浏览器访问结果 安装django pip install django 创建一个django项目 这里最好用命令行完成&#xf…

力扣OJ题——随机链表的复制

题目&#xff1a; 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 要求&#xff1a;构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中…

websocket与Socket的区别

概念讲解 网络&#xff1a;通俗意义上&#xff0c;也就是连接两台计算器 五层网络模型&#xff1a;应用层、传输层、网络层、数据链路层、物理层 应用层 (application layer)&#xff1a;直接为应用进程提供服务。应用层协议定义的是应用进程间通讯和交互的规则&#xff0c;不…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

【2024软件测试面试必会技能】Selenium(6):元素定位_xpath定位

XPATH是什么 XPATH是一门在XML文档中查找信息的语言&#xff0c;XPATH可用来在XML文档中对元素和属性进行遍历&#xff0c;主流的浏览器都支持XPATH&#xff0c;因为HTML页面在DOM中表示为XHTML文档。Selenium WebDriver支持使用XPATH表达式来定位元素。 Xpath常用如下6种定位…

安卓APP和小程序渗透测试技巧总结

本文章仅供学习和研究使用&#xff0c;严禁使用该文章内容对互联网其他应用进行非法操作&#xff0c;若将其用于非法目的&#xff0c;所造成的后果由您自行承担。 由于安卓7开始对系统安全性做了些改动&#xff0c;导致应用程序不再信任客户端证书&#xff0c;除非应用程序明确…

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 项目成员岑灌铭同学创作。 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略&#xff0c;每个应用可以选择不同的技术栈&#xff0c;独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端十…

搜维尔科技:【周刊】适用于虚拟现实VR中的OptiTrack

适用于 VR 的 OptiTrack 我们通过优化对虚拟现实跟踪最重要的性能指标&#xff0c;打造世界上最准确、最易于使用的广域 VR 跟踪器。其结果是为任何头戴式显示器 (HMD) 或洞穴自动沉浸式环境提供超低延迟、极其流畅的跟踪。 OptiTrack 主动式 OptiTrack 世界领先的跟踪精度和…

医药之链:基于Django的智能药品管理系统

框架 Python 3.7 django 3.2.13 Bootstrap&#xff08;前端&#xff09; sqlite&#xff08;数据库&#xff09;导包 pip install django3.2.13 pip install pandas pip install xlwt环境搭建 登录 zfx 123456

docker 容器内服务随容器自动启动

docker 容器内服务随容器自动启动 背景准备工作方案一&#xff0c;直接修改.bashrc文件&#xff08;简单粗暴&#xff09;方案二&#xff0c;编写启动脚本加入.bashrc文件&#xff08;文明一点&#xff09;制作nginx服务自启动镜像测试新镜像&#xff0c;nginx服务随容器自动启…

HGAME week2 web

1.What the cow say? 测试发现可以反引号命令执行 ls /f* tac /f*/f* 2.myflask import pickle import base64 from flask import Flask, session, request, send_file from datetime import datetime from pytz import timezonecurrentDateAndTime datetime.now(timezone(…

【Java多线程】分析线程加锁导致的死锁问题以及解决方案

目录 1、线程加锁 2、死锁问题的三种经典场景 2.1、一个线程一把锁 2.2、两个线程两把锁 2.3、N个线程M把锁&#xff08;哲学家就餐问题&#xff09; 3、解决死锁问题 1、线程加锁 其中 locker 可以是任意对象&#xff0c;进入 synchronized 修饰的代码块, 相当于加锁&…

OpenGauss数据库本地搭建并结合内网穿透实现远程访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

【AIGC】开源音频工具AudioCraft

AudioCraft是一个开源框架&#xff0c;旨在生成高质量的音频&#xff0c;适用于音乐、声音生成和压缩等多种应用。 先听效果&#xff1a; aimusic 它由三个模型组成&#xff1a;MusicGen、AudioGen和EnCodec。 MusicGen&#xff1a; 这个模型使用了Meta拥有和特别许可的音乐进…

如何使用Docker本地部署Jupyter+Notebook容器并结合内网穿透实现远程访问

文章目录 1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook&#xff0c;并结合cpolar内网穿透…