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

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

 

 

 

 

   

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

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

相关文章

react 实现路由拦截

简单介绍下项目背景&#xff0c;我这里做了一个demo&#xff0c;前端使用mock数据&#xff0c;然后实现简单的路由拦截&#xff0c;校验session是否包含用户作为已登录的依据&#xff0c;react-router-dom是v6。不像vue可以设置登录拦截beforeenter&#xff0c;react需要我们自…

外包干了3个月,技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Linux之用户和用户组的深入了解

目录 一、简介 1.1、用户&#xff1a; 1.2、用户组 1.3、UID和GID 1.3、用户账户分类 查看用户类别 超级用户root(0) 程序用户(1~499) 普通用户(500~65535) 二、用户 2.1、添加新的用户账号&#xff1a;useradd 2.2、删除账号&#xff1a;userdel 有-r与没有-r区别…

OSDI 2023: Hyrax Fail-in-Place Server Operation in Cloud Platforms

我们使用以下6个分类标准对本文的研究选题进行分析: 1. 硬件故障类型 DRAM: 此类别涉及研究如何处理内存相关的错误。这包括单比特错误,使用传统 ECC 进行校正,以及需要冗余、修复技术或隔离故障内存区域的更广泛的故障。磁盘: 此处研究将解决存储故障,尤其是 SSD 中的故障…

运维07:堡垒机

什么是跳板机 跳板机就是一台服务器而已&#xff0c;运维人员在使用管理服务器的时候&#xff0c;必须先连接上跳板机&#xff0c;然后才能去操控内网中的服务器&#xff0c;才能登录到目标设备上进行维护和操作 开发小张 ---> 登录跳板机 ---> 再登录开发服务器 测试…

贷齐乐系统最新版SQL注入(无需登录绕过WAF可union select跨表查询)

一、环境 已上传资源&#xff08;daiqile&#xff09; 二、代码解释 1.1Request 不管get请求还是post请求都可以接收到 1.2过滤的还挺多 1.3第二个WAF把数据分为两个了一个Key一个value&#xff0c;全是explode的功劳 1.4submit是if进入的前提 很明显走进来了 1.5那我们在这…

学习JAVA的第三天(基础)

目录 流程控制语句 顺序结构 分支结构 循环结构 分类&#xff1a; 练习 跳转控制语句 练习 数组 数组介绍 数组的定义和静态初始化 数组定义 数组的静态初始化 数组元素访问 数组遍历 数组动态初始化 JAVA内存分配 流程控制语句 顺序结构 是Java程序默认的执行流程…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择&#xff0c;而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示&#xff1a;我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能&#xff0c;这…

js如何判断一个对象中某一个属性存在并且有值

在JavaScript中&#xff0c;可以使用不同的方法来判断一个对象中某个属性是否存在并且有值。以下是几种常见的方法&#xff1a; 1、使用hasOwnProperty()方法&#xff1a;该方法用于检查对象是否具有指定的属性。可以通过以下方式来判断属性是否存在并且有值&#xff1a; if (…

整理了去年的一些运维面试题一

Ingress的yaml文件需要包含哪些&#xff1f; CICD搭建流程&#xff1f; JAVA程序打包工具&#xff1f; 如何检测Linux端口如何通信&#xff1f; k8s集群之间如何通信的&#xff1f; docker组成部分&#xff1f; 20位掩码有多少主机IP&#xff1f; 在linux中四个T的硬盘使用什…

Zabbix 远程监控主机

目录 1、安装 Zabbix 安装客户端 服务端测试通讯 Web页面添加主机 2、监控 Nginx 自定义脚本监控 Nginx web配置台 3、监控 MySQL 配置模版文件 配置Web界面 1、安装 Zabbix node-12 作为zabbix的被监控端&#xff0c;提供mysql服务器&#xff0c;配置zabbix监控node…

jquery写组件滑动人机验证组件

jquery组件&#xff0c;虽然 jquery 语法古老&#xff0c;但是写好了用起来真的很爽啊&#xff0c;本文用滑动人机验证给大家做个详细教程&#xff08;直接复制代码就可以用噢o(*&#xffe3;▽&#xffe3;*)ブ&#xff09; 第一步 先看下组件本身 component.js (function() {…

Nginx网络服务三-----(三方模块和内置变量)

1.验证模块 需要输入用户名和密码 我们要用htpasswd这个命令&#xff0c;先安装一下httpd 生成文件和用户 修改文件 访问页面 为什么找不到页面&#xff1f; 对应的路径下&#xff0c;没有这个文件 去创建文件 去虚拟机浏览器查看 有的页面不想被别人看到&#xff0c;可以做…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

centos 系统盘 放到 win pc 中的异常解决

有一块 2.5 480g sata ssd&#xff0c;之前是笔记本电脑的centos系统盘&#xff0c;后来没用了&#xff0c;打算挂到台式机上当下载盘。台式机pc的主板是华硕 h610m-a。 难点一&#xff1a; 因为台式pc上已经挂了两块3.5 hdd&#xff0c;发现sata的电源线都在3.5hdd附近&#…

利用RBI(Remote Browser Isolation)技术访问ChatGPT

系统组网图 #mermaid-svg-Bza2puvd8MudMbqR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bza2puvd8MudMbqR .error-icon{fill:#552222;}#mermaid-svg-Bza2puvd8MudMbqR .error-text{fill:#552222;stroke:#552222;…

300分钟吃透分布式缓存-10讲:MC是怎么定位key的?

我们在进行 Mc 架构剖析时&#xff0c;除了学习 Mc 的系统架构、网络模型、状态机外&#xff0c;还对 Mc 的 slab 分配、Hashtable、LRU 有了简单的了解。本节课&#xff0c;将进一步深入学习这些知识点。 接下来&#xff0c;进入 Memcached 进阶的学习。会讲解 Mc 是如何进行…

QT应用软件【协议篇】周立功CAN接口卡代码示例

文章目录 USBCAN系列CAN接口卡规格参数资料下载QT引用周立功的库安装sdk代码USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速规范,可支持1/2/4/8路CAN接口。采用该接口卡,PC机可通过USB连入CAN网络,进行CAN总线数据采集和处理,主要具备以下几大优势特点: 支持车载…

正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现

压缩感知&#xff08;Compressed Sensing, CS&#xff09;是一种利用稀疏信号的先验知识&#xff0c;用远少于奈奎斯特采样定理要求的样本数目恢复整个信号的技术。正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;是一种常见的贪婪算法&#xff08;Gree…

【CF】团队训练赛2 J-Palindrome Reversion 题解

传送门&#xff1a;Palindrome Reversion 标签&#xff1a;字符串 题目大意 规定一个操作&#xff1a;选择字符串中的一段区间[l,r]并使其翻转。现在给出一个字符串s&#xff0c;你要判断能否通过一次操作使其变为回文串。 输入&#xff1a;一个字符串&#xff0c;其长度不超…