当前位置: 首页 > java >正文

51单片机基础部分——独立按键检测

前言

在单片机开发中,我们会经常对单片机的状态进行控制,比如我们会控制某个灯点亮,某个灯熄灭,这个时候我们就要开始做控制,我们可以通过什么控制呢,这个地方我们选择按键控制

按键实物及工作原理

生活中很常见的东西,在手机,遥控器,键盘上面,我们可以看到很多的按键,很常用,我们开发板上面的按键是这样的
在这里插入图片描述
左侧的是按键的样子,右侧是按键被拆开的样子,我们可以看到右图左一有三个银点,两侧的是他连接外部的引脚,中间的是一个将左二顶起的一个扭,当我们按下左二的时候,会让两边的引脚相连,这是我们判断是否导通就可以来判断按键是否按下了。

以上就是按键的工作原理,我们来看我们实际设备的原理图
在这里插入图片描述
上面是我们实际设备的原理图,结合实物,我们可以看到板子的左下角有四个并排的按键,就是对应这里的原理图,他们分别连接了P31,P30,P32,P33四个IO。结合上面我们的按键工作原理,我们只需判断四个IO的状态,我们就可以判断按键是否按下。这么来看,还是比较简单的,大家可能也都有一个写代码的思路了,写一个if做一个判断就行了是吧

这里我们先这样写一个代码看看,可以不可以,我们以嘴左侧的按键为例

if(P3_1 == 0)
{//按键按下后执行的任务
}

大家把代码烧进去,会发现这个代码不能执行,这是为什么呢,这里我们就来说一下按键的特性,按键有一个抖动的特性,在按下和抬起的时候,上图左二的铁片会产生抖动,导致我们的检测会有问题
他的抖动大概是这样的
在这里插入图片描述
上面是我们的理想状态下,我们按下按键后,单片机直接可以检测到低电平,然后我们就可以直接做任务,但是实际情况是下面的,我们在按下按键的时候,产生一定时间的抖动,然后到低电平,抬起的时候,也会抖动一定的时间,然后到高电平,这个时间一般是10到20毫秒,这里我们就可以在找出我们上一篇讲数码管消隐的时候说到的延时,加入延时后,我们的思路就可以是,我们先判断一下按键的状态,是低电平还是高电平,然后我们等一段时间判断是不是真的到了我们所需要的低电平还是高电平,这时候我们再掏出我们的代码,看看应该怎么写

代码

我们这里加上代码,并且复习一下之前的内容,我们写两个按键来控制我们所有LED的状态

if(P3_2 == 0)//判断状态
{delay(20);//延时等待(消抖)if(P3_2 == 0)//继续判断{P2 = 0X00;//执行任务}while(!P3_2);//判断按键是否抬起
}
if(P3_3 == 0)
{delay(20);if(P3_3 == 0){P2 = 0XFF;}while(!P3_3);
}

以上就是我们独立按键的部分,大家可以结合一下我们上一篇的内容,用按键和数码管写一个计分器,四个按键分别控制两个按数据加减分,然后在数码管的两侧显示两个数据,计数范围是0——99,这个还是比较简单的,大家可以自己尝试写一下,后面会在其他文章更新

http://www.xdnf.cn/news/12176.html

相关文章:

  • 从零发布一个 Vue 3 Button 组件到 npm(基于 Vite)
  • 【推荐算法】WideDeep推荐模型:融合记忆与泛化的智能推荐引擎
  • Oracle杀进程注意事项
  • 力扣100题之128. 最长连续序列
  • 探秘 MyBatis:开启你的数据库操作「智能之旅」
  • 基于Qt的app开发第十三天
  • 【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
  • 服务器中CC攻击的特点有哪些?
  • 全面解析网络端口:概念、分类与安全应用
  • Windows 10 IoT 系统深度定制指南:从环境搭建到工业部署
  • 暴雨新专利解决服务器噪音与性能悖论
  • 【JavaScript-Day 32】深入理解 prototype、\_\_proto\_\_ 与原型链的奥秘**
  • SpringBoot3整合MySQL8的注意事项
  • 告别局域网:实现NASCab云可云远程自由访问
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的生态农庄留存运营策略研究
  • element-plus 单选组件 el-radio,选不上,又没报错,直接复制官网也不行解决方案
  • Ruoyi多主键表的增删改查
  • LeetCode 热题 100 - 哈希 - 128
  • 解决神经网络输出尺寸过小的实战方案
  • React从基础入门到高级实战:React 实战项目 - 项目二:电商平台前端
  • [pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)
  • OpenResty 安装指南
  • 【JS进阶】ES5 实现继承的几种方式
  • k8s开发webhook使用certmanager生成证书
  • 记一次spark在docker本地启动报错
  • PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
  • vllm安装注意事项[nccl、cuda、python相关]
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • spring官方脚手架连接不上解决方案
  • 语雀文档保存失败URI malformed