【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

前言

大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁

  • 本章是51LCD单片机设计的一个环节,完整可前往相应博客查看完整
  • 传送门

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

三.【控制LED状态】

1.按键抖动问题

  • 我们发现中间存在:
  • 2个抖动时间段(按下时)(松开时)
  • 1个中间时间段
  • 我们要采用【时间延迟】的原理规避这一现象
    在这里插入图片描述

2.我们要采用【时间延迟】的原理规避这一现象

  • 自定义延时子程序传送门:传送门
  1. 我们在第一个抖动时间段(按下时)设置一个延时程序
  2. 在中间时间段时,设置一个判断按键状态的while循环while(P3_1==0);,使他实现【到达中间时间段,停下等待按钮状态:实现按下进入循环,松手跳出循环继续程序】
  3. 我们在第二个抖动时间段(松手时)设置一个延时程序
#include <REGX52.H>

void Delay(unsigned int xms)		
{
   
	unsigned char i, j;

	while(xms)
	{
   
		i = 2;
		j = 239;
		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;//取反
			}
		}
}
  • 现象:我们烧写入单片机后,可以发现按下k1按键,d1灯亮并保持;再次按下,d1灯灭并保持;

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-13 22:34:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-13 22:34:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-13 22:34:04       82 阅读
  4. Python语言-面向对象

    2024-02-13 22:34:04       91 阅读

热门阅读

  1. 一篇文章学透所有Python知识

    2024-02-13 22:34:04       55 阅读
  2. Python列表中的clear功能及用法举例

    2024-02-13 22:34:04       52 阅读
  3. 突破编程_C++_面试(基础知识(13))

    2024-02-13 22:34:04       43 阅读
  4. 读书笔记:《人件:PeopleWare》

    2024-02-13 22:34:04       46 阅读
  5. 阿里云Redis

    2024-02-13 22:34:04       46 阅读
  6. C语言:函数

    2024-02-13 22:34:04       49 阅读
  7. Dev-c++跑酷小游戏 1.0.0

    2024-02-13 22:34:04       41 阅读
  8. KY141 最大连续子序列

    2024-02-13 22:34:04       55 阅读
  9. 团队管理--程序员值班

    2024-02-13 22:34:04       54 阅读
  10. spring mvc和 spring boot 以及 spring cloud的区别

    2024-02-13 22:34:04       50 阅读
  11. iTop-4412 裸机程序(二十)- 按键中断Demo

    2024-02-13 22:34:04       55 阅读