【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灯灭并保持;
相关推荐
q***06471 小时前
MySQL的UPDATE(更新数据)详解
数据库·mysql
8***B1 小时前
MySQL性能
数据库·mysql
q***72192 小时前
oracle使用PLSQL导出表数据
数据库·oracle
数据库生产实战2 小时前
Oracle DG备库日志切换解析,Private strand flush not complete如何理解?(基础知识)
数据库·oracle
百***75742 小时前
从 SQL 语句到数据库操作
数据库·sql·oracle
i***39582 小时前
SQL 注入详解:原理、危害与防范措施
数据库·sql·oracle
m***56723 小时前
Win10下安装 Redis
数据库·redis·缓存
Warren983 小时前
Python自动化测试全栈面试
服务器·网络·数据库·mysql·ubuntu·面试·职场和发展
kka杰5 小时前
MYSQL 表的增删查改-更新/删除
数据库·mysql
q***44815 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb