【蓝桥杯】——键盘是使用

目录

一、键盘的工作原理

(一)、键盘的特点

(二)、消除按键抖动的方法

1.硬件去抖动

2.软件去抖动

二、键盘的接口方式

(一)独立按键

1.独立按键原理

2.独立按键的例题运用

(二)、矩阵键盘

1.矩阵键盘的编码方法

2.键盘扫描的工作方式



 

一、键盘的工作原理

键盘是由若干个按键组成的开关陈列,是单片机最常用的输入设备,通过键盘可实现人机对话。键盘有编码键盘和非编码键盘两种。在单片机系统中通常采用非编码键盘,非编码键盘主要是由软件来识别闭合键,具有结构简单、使用灵活等特点。

(一)、键盘的特点

键盘是一组按键开关的集合,组成键盘的按键有触点式非触点式两种。常用的键盘一般采用有机械触点构成的键盘开关,利用机械触点的接通与断开将电压信号输入到单片机的I/O端口。由于是机械键盘,故在按下按键时存在抖动的问题,而且抖动时间的长短与开关的机械特性有关。一般在5~10ms.

(二)、消除按键抖动的方法

常用的去抖动的方法有硬件去抖动软件去抖动两种。

1.硬件去抖动

硬件去抖动一般采用双稳态去抖动和滤波电路去抖动。双稳态去抖动使用两个与非门构成RS触发器电路实现按键去抖动;滤波电路去抖动可以采用RC积分电路滤除干扰脉冲达到按键去抖动的目的。如图所示:

2.软件去抖动

软件去抖动一般采用延时的方法,已达到识别按键是否按下的结果。

二、键盘的接口方式

单片机中通常采用非编码键盘,非编码键盘分为独立式键盘行列式矩阵键盘两种。(一般为独立按键和矩阵按键)。下面以单片机开发与设计赛事中用到是独立按键和矩阵按键为讲解。

(一)独立按键

1.独立按键原理

独立按键时各个按键互相独立,每个按键单独连接一个输入线,另一端,通过检测输入线的电平就可以判断该键是否被按下。

独立按键适用于在按键较少的系统中和要求操作速度快的场合中使用,当系统要求按键数量比较多是需要消耗比较多的I/O端口,使电路结构繁杂。

如图2所示(此图是蓝桥杯官方提供是原理图),当J5接到2、3引脚时,其为独立按键,只有S4,S5,S6,S7 四个按键可以用。

电路分析:当J5接到2、3引脚时,为独立按键的使用,其中一段通过上拉电阻接到单片机的I/O端口,另外一端接地。即独立按键没有按下时,输出的是高电平,按键按下时,则输出的是低电平。

2.独立按键的例题运用

按下S7,8个LED全亮,按下S6,奇数个LED亮,按下S5,偶数个LED亮,按下S4,L1,L2,L3,L4,L8点亮。

#include "reg52.h"

sbit HC138_A=P2^5;
sbit HC138_B=P2^6;
sbit HC138_C=P2^7;


//独立按键引脚的定义
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;


void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		case 4 :
			HC138_A=0;
			HC138_B=0;
			HC138_C=1;
		break;
		
		case 5 :
			HC138_A=1;
			HC138_B=0;
			HC138_C=1;
		break;
		
		case 6 :
			HC138_A=0;
			HC138_B=1;
			HC138_C=1;
		break;
		
		case 7 :
			HC138_A=1;
			HC138_B=1;
			HC138_C=1;
		break;
	}
}


//延时函数
void DelayK(unsigned char t)
{
	while(t--);
	while(t--);
}

void SanKeys_duli()
{
	
	if(S7==0)
	{
		DelayK(100);
		if(S7==0)
		{
			P0=0x00;
			while(S7==1);
			P0=0xff;
		}
	}
	
	if(S6==0)
	{
		DelayK(100);
		if(S6==0)
		{
			P0=0xaa;
			while(S6==1);
			P0=0xff;
		}
	}
	
	if(S5==0)
	{
		DelayK(100);
		if(S5==0)
		{
			P0=0x55;
			while(S5==1);
			P0=0xff;
		}
	}
	
	if(S4==0)
	{
		DelayK(100);
		if(S4==0)
		{
			P0=0x70;
			while(S4==1);
			P0=0xff;
		}
	}
}



void main()
{
	SelectHC573(4);
	while(1)
	{
		SanKeys_duli();
	}
}

(二)、矩阵键盘

矩阵键盘是单片机中常用的一种键盘接口,主要使用于要求按键数量较多的系统。一般采用行、列矩阵方式交叉排列,按键跨接在行、列线的交叉点上,常见的有3*3矩阵键盘和4*4矩阵键盘(如图2)。其比独立按键能够节省I/O端口线。

1.矩阵键盘的编码方法

识别按键位置的方法有逐行扫描法和线反转法。下面介绍线反转法

线反转法是工作原路和查键步骤:

a:求按键的列线值:行线作为输出线,列线作为输入线,即可得到列线值。

b:求按键的行线值:行线作为输入线,列线作为输出线,即可得到行线值。

c:求按键的特征值:把列线值和行线值合并,组合成为按键的特征值。

d:查找按键:将键盘所有按键的特征编码按希望的顺序排成一张表,然后用当前读得的特征码查表,当表中有该特征码时,它的位置编码就是对应的顺序编码,当表中没有特征码时,说明这是一个没有定义的键码,一无效键处理,并与没有按键(0FFH)同等看待。

2.键盘扫描的工作方式

在单片机应用系统中,对于键盘的编码方式一般有4种,分别是空闲扫描编程工作方式、顺序扫描编程工作方式、定时器编程工作方式和中断扫描编程工作方式。下面简单介绍空闲扫描编程工作方式和定时器编程工作方式。

空闲扫描编程工作方式,这种编程工作方式是利用单片机空闲时间,通过调用键盘子程序,扫描按键是否有按键按下,一旦确认有按键按下,待按键松开后,则立即进行按键功能的处理操作。

定时器编程工作方式,是单片机通过定时扫描方式对键盘进行扫描,每隔一定时间就对键盘扫描一次。此方法能有效的提高系统的性能。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

斯择微韵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值