【51单片机系列】独立按键介绍

news2025/2/4 23:54:03

本文是关于独立按键的介绍及使用。首先介绍了按键,包括什么是按键及使用按键时如何实现软件消抖。然后使用proteus仿真实现独立按键控制LED指示灯的操作。

之前的LED、蜂鸣器、数码管中IO口都是作为输出使用,这里通过独立按键实验介绍IO口作为输入的使用。

文章目录

  • 一、按键介绍
  • 二、独立按键检测原理
  • 三、硬件设计
  • 四、软件设计

一、按键介绍

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

按键及内部简易图

按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态。

如果按键按下,初始导通状态变为断开,初始断开状态变为导通。

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

机械触点断开闭合时的电压信号

由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5ms到10ms。

按键稳定闭合时间的长短由操作人员的按键动作决定,一般为零点几秒至数秒。按键抖动会引起按键被误读多次。为了确保CPU对按键的依次闭合仅作一次处理,必须及时进行消抖。

按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更加简单,通常采用软件消抖。

软件消抖一般来说一个简单的按键消抖就是先读取按键的状态,如果得到按键按下之后,延时10ms,再次读取按键状态,如果按键还是按下状态,那么说明按键已经按下。其中的延时10ms就是软件消抖处理。

常用的软件去抖动方法:

  1. 先设置IO口为高电平,由于开发板IO有上拉电阻,默认IO为高电平;
  2. 读取IO口电平确认是否有按键按下;
  3. 如果有IO电平为低电平后,延时几个毫秒;
  4. 再读取该IO电平,如果仍为低电平,说明按键按下;
  5. 执行相应按键的程序;

键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。靠软件编程来识别的键盘称为非编码键盘。

单片机系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(即常说的矩阵键盘)。

二、独立按键检测原理

独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其它引脚分别接到单片机IO口。

单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,独立按键的一端接地,另一端与单片机的某个IO口相连,开始时先给IO口赋一高电平,然后让单片机不断检测该IO口是否变为低电平,当按键闭合时,相当于该IO口通过按键与地相连,变成低电平,程序一旦检测到IO口变为低电平则说明按键被按下,然后执行相应的指令。

三、硬件设计

要实现的功能是:通过开发板上的独立按键控制LED指示灯亮灭。使用到的硬件资源如下:

  • LED指示灯
  • K1按键

proteus中仿真如下:

独立按键硬件设计

从电路中可以知道,该电路是独立的,4个独立按键的控制管脚直接连接到单片机的P3^0 ~ P3^3 IO口上。

要想单片机能够检测按键是否按下,需要通过单片机管脚来控制独立按键。

四、软件设计

实现代码如下:

/*
	实现功能:使用独立按键控制指示灯的亮灭
	[2023-12-06] zoya
*/
#include "reg52.h"

typedef unsigned int u16;

sbit KEY1 = P3^0;  // 独立按键
 
#define GPIO_LED P2  // 指示灯

// 延时函数,i=1延时10us
void delay(u16 i)
{
	while(i--);
}

// 独立按键处理函数
void keypros()
{
	if(0 == KEY1){  // 2. 读取IO口是否为低电平确认按键是否按下
		delay(1000);  // 3. 延时10ms
		if(0 == KEY1) {  // 4. 在读取IO口判断是否为低电平,如果仍然是低电平,说明按键按下
			GPIO_LED = ~GPIO_LED;  // 5. 执行按键按下的操作
		}
		
		while(!KEY1);  // 6. 稳定闭合期间保持按键操作
	}
}


void main()
{
	KEY1 = 1;  // 1. 先设置IO口为高电平
	GPIO_LED = 0xFF;  // 默认指示灯为不亮状态
	while(1)
	{
		keypros();
	}
}

仿真结果:

独立按键控制指示灯

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

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

相关文章

web,Apache简述

一.HTTP请求访问的完整过程 1.建立连接 2.接收请求 3.处理请求 4.访问资源 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源 静态资源:不需要…

如何使用bash写脚本

本章主要介绍如何使用bash写脚本。 了解通配符了解变量了解返回值和数值运算数值的对比判断语句循环语句 grep的用法是“grep 关键字 file”,意思是从file中过滤出含有关键字的行。 例如,grep root /var/log/messages,意思是从/var/log/me…

C++笔记之C语言中的换行符和转义符

C笔记之C语言中的换行符和转义符 文章目录 C笔记之C语言中的换行符和转义符 在C语言中,换行符和转义符用于在字符串和字符常量中表示特殊字符。下面是关于换行符和转义符的解释: 换行符(Newline character): 在C语言中…

前端知识(十三)——JavaScript监听按键,禁止F12,禁止右键,禁止保存网页【Ctrl+s】等操作

禁止右键 document.oncontextmenu new Function("event.returnValuefalse;") //禁用右键禁止按键 // 监听按键 document.onkeydown function () {// f12if (window.event && window.event.keyCode 123) {alert("F12被禁用");event.keyCode 0…

MySQL Server 层和引擎层是如何交互的

Server 层、引擎层、BufferPool、磁盘间的关系 大体来说, MySQL可以分为Server层和存储引擎层两部分。 1)Server 层:Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所…

FaceBook推出新的翻译模型Seamless!可实现跨语言交流的无缝衔接!

FaceBook **(中文名:脸书)**近期发布了一个新的翻译模型 Seamless Communication,可实现跨语言实时"无缝"交流。 该模型可以保留跨语言的表达方式和复杂性(翻译时保留语音中的停顿和语速,以及声…

12.9_黑马数据结构与算法笔记Java

目录 057 多路递归 e03 杨辉三角2 thinking:二维数组的动态初始化? 057 多路递归 e03 杨辉三角3 058 链表 e01 反转单向链表1 058 链表 e01 反转单向链表2 058 链表 e01 反转单向链表3 递归 058 链表 e01 反转单向链表4 为什么是returnn1呢&…

递归的两个特点、典型案例----汉诺塔问题

一、递归的两个特点 1、要自己调用自己 2、递归函数里要有结束条件。 二、汉诺塔问题 有三根柱子,现在在一根柱子上,从下往上,按照大小顺序摞着很多盘子。现在要把这些盘子全部放到另一根柱子上,且盘子依然按照从大到小顺序摞着…

触手可及的便携CD播放器,随时享受音乐乐趣,山灵EC Mini上手

如今做发烧级实体CD播放器的国产品牌越来越少了了,最近我尝试了一款山灵的便携式CD播放器,感觉它做得很有味道。在CD机领域,山灵技术积累的不错,像是这款EC Mini,不论设计还是体验都很出色,既能够满足实体C…

基于Java SSM框架实现电影售票系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现电影售票系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&#…

第1章-第1节-编写第一个Java程序并在命令行编译和运行

第一个Java程序不用任何IDE,用记事本去编写,用命令行去编译并运行,这样便于了解Java程序运行原理。 1、首先打开记事本,写下如下代码: 然后另存为xxx.java,xxx文件名不强求与类名相同,但是建议…

bootstrap:选项卡功能DEMO

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>选项卡</title> <link rel"stylesheet" type"text/css" href"/cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css" />…

Python Faker库:轻松生成测试数据

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python Faker库&#xff1a;轻松生成测试数据&#xff0c;全文3300字&#xff0c;阅读大约8分钟。 在开发和测试过程中&#xff0c;经常需要使用虚假数据。Python的Faker库为…

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 52页论文及代码

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 52页论文及代码 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就…

基于Java SSM框架实现高校信息资源共享平台系统【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现高校信息资源共享平台系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们…

this.$emit(‘update:isVisible‘, false)作用

这个写是不是很新颖&#xff0c;传父组件传值&#xff01;这是什么鬼。。。 假设你有以下逻辑业务。在A页面弹出一个组件B&#xff0c;A组件里面使用B组件&#xff0c;是否展示B组件你使用的是baselineShow变量控制&#xff01; <BaselineData :isVisible.sync"basel…

鸿蒙OS应用开发之数据类型

前面学习了一个简单的例子&#xff0c;这是多年来学习应用程序开发的经典路径&#xff0c;在这里也是这种待遇&#xff0c;通过这样的学习明白了一个简单应用是怎么样构成的&#xff0c;知道它是怎么运行输出的。在这个基础之上&#xff0c;你还是不会开发应用程序的&#xff0…

RabbitMQ学习二

RabbitMQ学习二 发送者的可靠性生产者连接重试机制生产者确认机制开启生产者确认定义ReturnCallback定义confirmCallback MQ的可靠性交换机和队列持久化消息持久化LazyQueue控制台配置Lazy模式代码配置Lazy模式 消费者的可靠性失败重试机制失败处理策略业务幂等性唯一消息ID业务…

在Deepin中安装x11vnc工具并结合内网穿透软件实现远程访问桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具&#xff0c;它的原理是通过X Window系统的协议来实现远程桌面的展…

Tair(3):Tair入门demo

新建一个maven项目 1 导入依赖 <dependency><groupId>com.taobao.tair</groupId><artifactId>tair-client</artifactId><version>2.3.5</version></dependency><dependency><groupId>com.alibaba</groupId>…