三、键盘检测原理及应用实现

键盘检测原理及应用实现

视频链接:[3-4] 独立按键控制LED移位_哔哩哔哩_bilibili

对应课程P7-P10

键盘实际上就是一组按键,在单片机的外围电路中,通常用到的按键都是机械弹性开关,当开关闭合时,线路导通,开关断开时,线路断开。单片机系统常见的弹性小按键图示意图如图所示:

image-20221030152126362

弹性小按键被按下时闭合,松开后自动断开;自锁式按键与弹性按键不同,当按下时自锁式按键会闭合且会自动锁柱,只有再次按下时才会弹起断开,自锁式按键示意图如图所示:

image-20221030152535064

单片机检测按键的原理:单片机的I/O口既可以作为输出也可以作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一个高电平,然后单片机不断地检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。

独立键盘控制LED亮灭

按键的连接方法非常简单,独立按键的原理图如图所示:

image-20221030154114489

当按键被按下时,其触点电压变化过程如下图所示:

image-20221030154438887

由图不难看出,实际波形与理想波形之间是有区别的,实际波形在按键被按下和释放的瞬间都有抖动现象,抖动时间的长短与按键的机械特性有关,一般为5~10ms。通常我们手动按下键然后立即释放,这个动作中稳定闭合的时间超过20ms,这也就是为什么单片机在检测键盘是否按下时都要加上去抖操作了。去抖有专用的去抖电路,也有专用的去抖芯片,但是通常出于成本控制等原因,我们只需要在写程序的时候需延时处理就很容易解决抖动问题。

在编写单片机的键盘检测程序时,通常在检测按下时加入去抖延时,检测松手时就不需要加了。按键检测流程图如图所示:

image-20221030155816371

需要注意的是,在头文件regx52中既包含了寄存器声明也还包含了位声明,如图所示:

image-20221030161243045

关于头文件的不同以代码形式进行简单叙述:

#include <REGX52.H> //#include <REG52.H>则不包含对位寄存器的声明

void main
{
   
   
	while(1)
	{
   
   
		//P2=oxFE; 控制P2需要同时操作8位数据从而控制8个LED
		P2_0=0;  // 可以单独控制一个LED
	}
}

为了实现对独立键盘控制LED亮灭,显然需要用判断键盘何时被按下,何时被松开,代码如下:

#include <REGX52.H> //#include <REG52.H>则不包含

void main()
{
   
   
	while(1)
	{
   
   
		if(P3_1==0)//通过原理图可知,按键进行这样的连接:S13-RXD-P3.1
		{
   
              //当检测到P3.1位低电平时(即按键被按下)
			P2_0=0; //D2亮(最左边的LED亮)
		}
		else        //当检测到P3.1位不是低电平时(即按键被释放)
		{
   
   
			P2_0=1;//D2灭
		}
	}
}

在上面代码中如P3_1==0,涉及到C51数据运算相关知识,下面给出常用汇总的运算符:

image-20221030165112794

还涉及到if条件语句,基本格式和解释如下图所示:

image-20221030165356594

独立按键控制LED状态

如果想实现独立按键按下之后松开手才亮,再按下按键,灯灭,这该如何实现呢?

上一节已经说了按键抖动现象和去抖的操作,现在结合一张更为具体的图来进行说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值