5.STC15W408AS单片机按键输入

本文通过示波器实测指出,单片机按键检测时并不存在明显的机械抖动现象,与传统知识有所出入。作者分享了使用STC15单片机进行按键检测的代码,并提醒读者在编写代码时应根据实际测试结果来处理抖动。实验中,按键连接至P1.0口,LED连接至P1.1口,当检测到按键按下时,LED状态翻转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在上面介绍了使用I/O口点了LED,实际也可以用I/O口做按键检测。这里采用的是P1.0口外接按键到GND。P1.1口外接LED到GND。

P1.0--->按键--->GND。

P1.1--->LED--->GND。

图片

实验程序如下:

#include "stc15.h"
void main()
{
  P11 = 0; // 初始设置P1.1为0 熄灭LED
  while (1)
  {
    if(P10 == 0)    // P1.0口检测到按键按下
    {
      P11 = !P11; // P1.1口输出取反
    }
  }
}

按钮按下的时候的波形图:

图片

    这里发现,按钮按下的时候并没有机械抖动,而是波形直接被拉低了,松开之后也没有抖动,波形也直接恢复了。这里我使用的是这种按钮:

图片

那么在之前的文章《8.树莓派3B+按钮操作》中介绍的抖动是有问题了。当时在这篇文章中的抖动图:

图片

    这个图怎么说呢,在我十年前接触单片机的时候就是这么说的,现在自己有示波器了,实际测试是没有的。那么实际有没有抖动大家还是要以自己的测试为准。按钮检测代码也要以自己的实际电路和程序为准。之前我就是按照接触的别人的知识处理的,在按钮按下的时候等待20ms左右再次判断电平。


if (rpio.read(button_pin) == rpio.LOW) { // 检测到 低电平
  rpio.msleep(20); // 按键消抖
if (rpio.read(button_pin) == rpio.LOW) {
    rpio.write(led_pin, rpio.HIGH); // 点亮LED
  }
}

在去年弄树莓派的时候就一直对这个抖动抱有怀疑,现在自己有示波器了,也就证实了之前的怀疑。还是实践出真理。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值