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

前言

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

目录

三.【控制LED状态】

1.按键抖动问题

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

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

  • 自定义延时子程序传送门:传送门
  1. 我们在第一个抖动时间段(按下时)设置一个延时程序
  2. 在中间时间段时,设置一个判断按键状态的while循环while(P3_1==0);,使他实现【到达中间时间段,停下等待按钮状态:实现按下进入循环,松手跳出循环继续程序】
  3. 我们在第二个抖动时间段(松手时)设置一个延时程序
cpp 复制代码
#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灯灭并保持;
相关推荐
老纪的技术唠嗑局2 小时前
OceanBase PoC 经验总结(二)—— AP 业务
数据库
阿里云大数据AI技术3 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
m0_623955665 小时前
Oracle使用SQL一次性向表中插入多行数据
数据库·sql·oracle
阿蒙Amon6 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#
东窗西篱梦6 小时前
Redis集群部署指南:高可用与分布式实践
数据库·redis·分布式
就是有点傻7 小时前
C#如何实现中英文快速切换
数据库·c#
1024小神8 小时前
hono框架绑定cloudflare的d1数据库操作步骤
数据库
KellenKellenHao9 小时前
MySQL数据库主从复制
数据库·mysql
@ chen10 小时前
Redis事务机制
数据库·redis
KaiwuDB10 小时前
使用Docker实现KWDB数据库的快速部署与配置
数据库·docker