51单片机学习笔记3 -- 按键输入检测

本文详细介绍了51开发板上按键检测的原理图绘制,软件消抖原理及编程技巧,以及硬件消抖的实现。通过实例演示了如何使用延时和while循环消除按键抖动,实现LED灯的不同控制,并探讨了硬件消抖在按键较多情况下的适用性。
摘要由CSDN通过智能技术生成

学习输出控制之后,学习输入检测,以按键为例


1.按键原理图绘制

51开发板的原理图如下
在这里插入图片描述
按原理图绘制电路图
在这里插入图片描述

2.按键输入检测

1.按键软件消抖

按键一般是利用机械触点的闭合、断开作用,由于机械触点的弹性作用,在其闭合、断开瞬间均存在抖动过程,抖动时间一般在5 -10ms,稳定闭合时间由操作人员的按键动作决定,一般为零点几秒到几秒。
为了保证单片机对一次闭合,仅作一次按键输入操作,必须在编程时候编写必要的程序代码(小段延时)来去除抖动影响,称键盘软件消抖。

2.按键操作电平变化

在上面讲到了软件消抖是为了准确识别单次按键操作,理想中的按键按下的电平输入是直接的高低电平切换,但实际上在按下及松开按键的瞬间,输入电平都会在高低电平中间产生抖动,可参考如下波形图
在这里插入图片描述

3.按键检测编程

在按键按下时添加延时,执行完按键操作后使用while函数等待按键释放

#include <reg52.h>

#define ON  0
#define OFF 1

sbit KEY1 = P3^3;

void delay_ms(unsigned int nms)
{
	 unsigned int i,j;

	 for(i=nms;i>0;i--)
	 	for(j=113;j>0;j--);
}

void main()
{	
	P1 = 0xff;
	while(1)
	{
		if(KEY1 == ON){
			delay_ms(10);
			if(KEY1 == ON)
			{
				P1 = 0x00;
			}
			while(KEY1 == ON);
		}
	}
}
4.实验结果

将工程放进仿真电路上运行,按下按键,点亮P1端口的LED
在这里插入图片描述

3.按键控制

将开发板上4个按键都用起来,做不同的LED灯控制,仿真电路如下
在这里插入图片描述
其余3个按键的检测代码跟上面的代码一个样,参考代码如下

#include <reg52.h>
#include <intrins.h>

#define ON  0
#define OFF 1

sbit KEY1 = P3^3;
sbit KEY2 = P3^4;
sbit KEY3 = P3^6;
sbit KEY4 = P3^7;

void delay_ms(unsigned int nms)
{
	 unsigned int i,j;

	 for(i=nms;i>0;i--)
	 	for(j=113;j>0;j--);
}

void main()
{	
	unsigned int i;
	P1 = 0xff;
	while(1)
	{
		if(KEY1 == ON){
			delay_ms(10);
			if(KEY1 == ON)
			{
				P1 = 0x00;
			}
			while(KEY1 == ON);
		}
		if(KEY2 == ON){
			delay_ms(10);
			if(KEY2 == ON)
			{
				P1 = 0xff;
			}
			while(KEY2 == ON);
		}
		if(KEY3 == ON){
			delay_ms(10);
			if(KEY3 == ON)
			{
				P1 = 0xfe;
				for(i=8;i>0;i--)
				{
					delay_ms(150);
					P1 = _crol_(P1,1);
				}
			}
			while(KEY3 == ON);
		}
		if(KEY4 == ON){
			delay_ms(10);
			if(KEY4 == ON)
			{
				P1 = 0x7f;
				for(i=8;i>0;i--)
				{
					delay_ms(150);
					P1 = _crol_(P1,-1);
				}
			}
			while(KEY4 == ON);
		}
	}
}

如KEY4按键的操作,_crol_ 函数也可以做循环右移流水灯

4.课外科普 – 硬件消抖

硬件消抖主要使用RS触发器或电容等方法实现消抖
一般是在按键电路上并联一个电容来实现硬件消抖,在按键较少时使用(按键较多时不建议采用硬件消抖)
关于并联电容的在按键按下松开时的放电延时和充电延时,可自行百度了解学习

51单片机检测按键下降沿,可以通过以下步骤来实现: 1. 绘制按键的原理图,包括按键和相应的电路连接。 2. 通过编程来实现按键输入检测。首先,需要进行按键软件消抖,即在按键闭合或断开瞬间加入适当的延时来去除抖动的影响。这可以通过在代码中添加小段延时来实现。然后,需要检测按键操作电平的变化,即在按键按下和松开的瞬间,输入电平会产生抖动。为了准确识别按键的下降沿,可以使用中断方式来检测按键的状态变化。 3. 编写相应的按键检测程序。在程序中,需要设置相应的中断服务函数来处理按键的下降沿触发。当按键按下时,中断服务函数会被调用,并执行相应的操作。可以根据需要进行按键的功能实现。 4. 进行实验,并观察实验结果。通过实验可以验证按键下降沿的检测是否正确,并确认按键的功能是否按预期工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [51单片机学习笔记3 -- 按键输入检测](https://blog.csdn.net/qq_36955622/article/details/122377663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值