单片机矩阵式键盘连接方法及工作原理

合集下载

矩阵键盘的工作原理和扫描确认方式

矩阵键盘的工作原理和扫描确认方式
图 9-7 为一个 4 x 3 的行列结构,可以构成 12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个 16 键的键盘。很明显,在按键数量多的场合,矩 阵键盘与独立式按键键盘相比可以节省很多的 I/O 口线。
矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式 按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和 线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态, 因此会大量占用 MCU 的时间,所以较好的方式也是采用状态机的方法来设计, 尽量减少键盘查询过程对 MCU 的占用时间。
key_return = K1_1; break; case 0b00001101: key_return = K1_2; break; case 0b00001011: key_return = K1_3; break; case 0b00010110: key_return = K2_1; break; case 0b00010101: key_return = K2_2; break; case 0b00010011: key_return = K2_3; break; case 0b00100110: key_return = K3_1; break; case 0b00100101: key_return = K3_2; break; case 0b00100011: key_return = K3_3; break;

单片机矩阵键盘原理

单片机矩阵键盘原理

单片机矩阵键盘原理

单片机矩阵键盘是一种常见的输入装置,它可以实现对数字、字母、符号等不同类型的输入,是单片机控制系统中不可或缺的一部分。下面详细介绍单片机矩阵键盘的原理。

1. 键盘的基本原理

键盘是一种能够将人体按压的操作转换成电信号输出的输入设备。它由按键、矩阵电路和接口电路等多个部分组成。其中最关键的是矩

阵电路,它起到了连接按键和接口电路的桥梁作用。

2. 矩阵电路的构成

矩阵电路主要由行列式组成,其中行和列的数量决定了键盘能够

输入的按键数量。例如一个4行4列的矩阵电路可以连接16个按键。

3. 按键的工作原理

按键的工作原理是利用按键触点的开闭状态来变换电路状态,进

而实现输入信号的转换。按键的触点现在主要分为二态和三态两种,

二态触点只能够开闭两种状态,而三态触点则可以在按键未按下、按

下瞬间和按下保持三个状态之间变换。在设计矩阵电路时需要根据按

键的触点类型进行对应的接线方式。

4. 矩阵键盘的工作流程

单片机矩阵键盘的工作流程主要包括按键扫描、按键代码转换和

按键响应处理三步。按键扫描的原理是利用矩阵电路的行列结构来进

行扫描,每次扫描只需要对一个行和一个列进行检测,判断当前按键

是否被按下。如果检测到按键被按下,则会对应生成相应的按键代码,并将其发送到单片机系统进行处理。

5. 按键的编程实现

在单片机的程序中,实现矩阵键盘的输入需要用到外部中断和定

时器两个功能模块。其中定时器用于产生定时器中断,从而保证按键

信号的稳定性和准确性;而外部中断则在扫描矩阵电路时检测按键是

否被按下,用于触发中断并响应按键事件。

单片机c语言程序设计---矩阵式键盘实验报告

单片机c语言程序设计---矩阵式键盘实验报告

单片机c语言程序设计---矩阵式键盘实验报告

课程名称:单片机c语言设计实验类型:设计型实验

实验项目名称:矩阵式键盘实验

一、实验目的和要求

1.掌握矩阵式键盘结构

2.掌握矩阵式键盘工作原理

3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法

二、实验内容和原理

实验1.矩阵式键盘实验

功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。

(1)硬件设计

电路原理图如下

仿真所需元器件

(2)proteus仿真

通过Keil编译后,利用protues软件进行仿真。在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。启动仿真,观察仿真结果。

操作方完成矩阵式键盘实验。具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。完成思考题。

三、实验方法与实验步骤

1.按照硬件设计在protues上按照所给硬件设计绘制电路图。

2.在keil上进行编译后生成“xxx.hex”文件。

3.编译好的“xxx.hex”文件加入AT89C51。启动仿真,观察仿真结果。

四、实验结果与分析

void Scan_line()//扫描行

{

Delay(10);//消抖

switch ( P1 )

{

case 0x0e: i=1;

break;

case 0x0d: i=2;

break;

case 0x0b: i=3;

break;

case 0x07: i=4;

《单片机矩阵键盘》课件

《单片机矩阵键盘》课件

矩阵键盘的扫描方法
2
制矩阵键盘的行和列。
编写扫描程序,逐行或逐列扫描矩阵键
盘,读取按键状态。
3
状态码处理
根据读取的按键状态码,进行相应的处 理和响应,实现按键功能。
实验演示
展示实验环境的介绍、实验步骤和实验效果。
实验环境介绍
介绍搭建实验所需的硬件和软 件环境。
实验步骤
详细说明进行实验的步骤和操 作流程。
《单片机矩阵键盘》PPT 课件
欢迎参加本次单片机矩阵键盘课程!本课程将深入介绍矩阵键盘的原理、接 口设计、编程实现以及实验演示。让我们一起探索这个神奇的技术吧!
课程介绍
了解本课程的背景和意义,明确课程目标。
背景和意义
掌握矩阵键盘的原理和设计,对单片机电子产 品的开发有重要意义。
课程目标
学习如何设计和编程矩阵键盘,掌握与单片机 的接口设计和连接。
实验效果演示
展示实验结果,演示矩阵键盘 的按键功能。
总结和展望
总结本课程的学习内容,展望矩阵键盘在更多应用场景中的发展。
1 总结本课程的学习内容
2 展望更多应用场景
回顾矩阵键盘的原理、接口设计和编程实现, 总结学习收获。
探讨矩阵键盘在电子设备、控制系统等领域 的应用前景。
来自百度文库
矩阵键盘的原理
深入了解矩阵键盘的组成结构、工作原理和扫描方式。

51单片机矩阵键盘原理

51单片机矩阵键盘原理

51单片机矩阵键盘原理

介绍

在嵌入式系统中,矩阵键盘是一种常见的输入装置。51单片机是广泛使用的一种

微控制器,结合矩阵键盘可以实现各种应用。本文将详细介绍51单片机矩阵键盘

的原理及其工作方式。

什么是矩阵键盘?

矩阵键盘是将一组按钮布置成矩阵形式,以减少输入引脚的数量。每个按钮在矩阵键盘中都会被分配一个坐标,通过扫描行和列,可以确定用户按下的是哪个按钮。

51单片机的输入输出结构

51单片机具有强大的输入输出能力,可以连接各种外设。在使用矩阵键盘时,通

常使用IO口进行输入和输出操作。

矩阵键盘的接线方式

将矩阵键盘与51单片机连接时,需要将键盘的行和列引脚分别连接到单片机的IO 口。通过对行进行扫描,再根据列的输入状态判断按钮是否按下。这种接线方式可以大大减少所需的IO口数量。

矩阵键盘的扫描原理

矩阵键盘的扫描原理是通过不断扫描行并读取列的状态来判断按钮是否按下。具体步骤如下: 1. 将所有行引脚设为输出,输出高电平。 2. 逐个扫描行,将当前行引脚设为低电平。 3. 读取所有列引脚的状态,如果有低电平表示有按钮按下。 4. 如果有按钮按下,则根据行和列的坐标确定按下的按钮。

51单片机矩阵键盘的实现

以下是使用51单片机实现矩阵键盘的基本步骤: 1. 将行和列引脚连接到单片机的IO口。 2. 初始化IO口的状态。 3. 在主程序中进行循环扫描,根据扫描结果执行相应的操作。

优化矩阵键盘的扫描速度

为了提高矩阵键盘的扫描速度,可以采用以下优化方法: 1. 使用硬件定时器来定时扫描行,减少CPU的负载。 2. 使用中断方式处理按键事件,从而减少程序中的轮询操作。 3. 将矩阵键盘的行和列布局进行优化,减少扫描的时间复杂度。

矩阵键盘

矩阵键盘

FPGA学习心得——矩阵键盘

1、行列式键盘概述

为了减少键盘与单片机接口时所占用I/O口线的数目,在键数较多时,通常都将键盘排列成行列矩阵式,行列式键盘又叫矩阵式键盘。用带有I/O口的线组成行列结构,按键设置在行列的交点上。例如用2*2的行列结构可以构成4个键的键盘,4*4的行列结构可以构成有16个键的键盘。这样,当按键数量平方增长时,I/O口线只是线性增长,这样就可以节省I/O口线。

2、行列式键盘原理

教研室已有薄膜矩阵键盘,其实物图如图所示。

其电路原理图如下图所示。

由行列式键盘的原理可以知道,要正确地完成按键输入工作必须有按键扫描电路产生keydrv3~keydrv0信号。同时还必须有按键译码电路从keydrv3~keydrv0信号和keyin3~keyin0信号中译码出按键的键值。此外,一般还需要一个按键发生标志信号用于和其他模块接口,通知其它模块键盘上有按键动作发生,并可以从键盘模块中读取按键键值。由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟信号。因此得到键盘接口电路的结构如图2所示。

图2 键盘接口电路结构图

行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。因此,为了解决这些问题,程序中使用不同的进程分别实现键盘扫描信号的产生、键盘去抖以及键盘的译码。

3、源程序

[plain]view plaincopy

1.----------------------------------------------------------------------------

矩阵键盘实验报告

矩阵键盘实验报告

矩阵键盘实验报告

矩阵键盘实验报告

引言:

矩阵键盘是一种常见的输入设备,广泛应用于电子产品中。本实验旨在通过对

矩阵键盘的研究和实验,深入了解其原理和工作机制,并探索其在实际应用中

的潜力。本文将从实验目的、实验步骤、实验结果和讨论四个方面进行论述。

实验目的:

1. 理解矩阵键盘的工作原理;

2. 掌握矩阵键盘的接线方法;

3. 通过实验验证矩阵键盘的可靠性和稳定性。

实验步骤:

1. 准备实验材料:矩阵键盘、电路板、导线等;

2. 连接电路:将矩阵键盘与电路板通过导线连接;

3. 编写程序:使用C语言编写程序,实现对矩阵键盘的扫描和按键检测;

4. 烧录程序:将编写好的程序烧录到单片机中;

5. 运行实验:按下矩阵键盘上的按键,观察电路板上的指示灯是否亮起。

实验结果:

经过实验,我们成功地完成了矩阵键盘的接线和程序烧录,并进行了按键测试。在按下不同的按键时,电路板上相应的指示灯亮起,证明了矩阵键盘的正常工作。

讨论:

1. 矩阵键盘的工作原理:矩阵键盘是由行线和列线组成的,每个按键都与行线

和列线相连。当按下某个按键时,对应的行线和列线会短接,从而使得电流流

过该按键,被检测到。

2. 矩阵键盘的接线方法:在本实验中,我们采用了常见的4行4列的接线方式,即将矩阵键盘的4个行线连接到单片机的4个输入引脚上,将4个列线连接到

单片机的4个输出引脚上。

3. 矩阵键盘的可靠性和稳定性:通过实验,我们发现矩阵键盘具有较高的可靠

性和稳定性。即使在长时间使用和频繁按键的情况下,矩阵键盘仍能正常工作,并且按键的检测准确率较高。

4. 矩阵键盘的应用潜力:矩阵键盘广泛应用于各种电子产品中,如计算机、手机、电视遥控器等。它具有结构简单、成本低廉、易于集成等优点,因此在电

单片机矩阵键盘

单片机矩阵键盘

按键抖动时间一般小于20ms,通常使用 延时的方法消除按键抖动,检测到“按 键按下”或“按键抬起”则延时20ms再 去检测该按键,若状态一致则说明有按 键按下或抬起
矩阵键盘信号线

行线(单片机写入到74HC573) 列线(单片机从74HC245读取) 片选线号 总线地址的计算
行线(单片机输出到573)
列线(单片机从245读取)
片选信号
总线地址的计算
当A15为1,A10-A8为0时74HC138的 Y0输出为0,即CS0为低电平。 则CS0地址为(二进制1XXXX000 XXXXXXXX),可取为0F8FFH,即为矩阵键盘 地址。
软件设计

获得按键



1. 2. 3. 4. 5.

判断键盘中有无键按下
4根行线置为低电平,读取4根列线,只要列线中 有一根为低电平,则说明该列有按键按下,并得到列数n。

取得键值
依次让行线中的一根为低电平,其他3根行线为高 电平,读取列线的值,若列线不全为高电平,说明该行 有按键按下,得到按键行数m。 则键值为 (m-1) * 4 + n
去抖动
判断是否有按键按下,没按键则结束 消抖动 获取键值 等待按键松开,进行松开时去抖动 结束

显示键值

将键值显示在数码管上
实验要求

矩阵键盘电路

矩阵键盘电路

ቤተ መጻሕፍቲ ባይዱ.矩阵键盘的编码
4
对于矩阵式键盘,按键的位置由行号 和列号唯一确定,因此可分别对行号 和列号进行二进制编码,然后将两值 合成一个字节,高4位是行号,低4位 是列号。
3.矩阵式键盘按键识别
5
扫描法:
1) 判断有无键按下。
2) 如果有键按下,识别是哪一个键按下,键盘扫描取得闭合键的行、列值。
3) 用计算法或查表法得到键值。
矩阵键盘电路
知识点目录
1
矩阵键盘电路结构与工作原理
矩阵键盘的编码
矩阵式键盘按键识别
键盘的工作方式
1.矩阵键盘电路结构与工作原理
2
矩阵式键盘又称为行列式键盘。用I/O接口线组成行和列结构,键位设置在行和 列的交叉点上。如图1所示,8个I/O口实现了16个按键。
图1 矩阵键盘电路结构
1.矩阵键盘电路结构与工作原理
4) 判断闭合键是否释放,如没释放则继续等待。
5) 将闭合键键号保存,同时转去执行该闭合键的功能。
4.键盘的工作方式
6
(1)编程扫描方式
利用CPU在完成其它工作的空余时间,调用键盘扫描子程序来响应键盘输入 的要求。
(2)定时扫描工作方式
每隔一定的时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间 (例如10ms)的定时,当定时时间到就产生定时器溢出中断,CPU响应定时器溢 出中断请求,对键盘进行扫描

4x4矩阵键盘扫描原理

4x4矩阵键盘扫描原理

4x4矩阵键盘扫描原理

4x4矩阵键盘扫描原理是一种常用的键盘扫描方法,也称为矩阵键盘扫描。它可以将多个按键连接在一起并使用较少的引脚来检测按键的状态。

4x4矩阵键盘由4行和4列组成,共有16个按键。通常使用单片机或电路来进行扫描,以下是简要的原理:

1. 行扫描:首先,将行引脚设置为输出,同时将列引脚设置为输入,并将其上拉或下拉。所有行引脚中只有一个为低电平,其余为高电平。然后逐行检测按键状态。

2. 列检测:对于每一行,将对应的行引脚置为低电平后,检测列引脚的电平状态。如果有按键按下,则相应的列引脚会变为低电平。通过读取列引脚的状态,可以确定按键的位置。

3. 组合键:由于只能一次检测一行,因此当同时按下多个按键时,可能会导致误检。为了解决这个问题,可以在检测到按键按下时,延迟一段时间,并再次检测按键的状态。如果在第二次检测时仍然检测到按键按下,则确认按键有效。

4. 反向扫描:为了检测按键的释放状态,可以将行引脚设置为输入,列引脚设置为输出,并将其置为低电平。然后逐列检测行引脚的电平状态,如果有按键释放,则相应的行引脚会变为高电平。

通过不断地循环扫描所有的行和列,可以实时检测按键的状态,并根据需要进行相应的处理。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计

一、简介

矩阵键盘是一种常见的输入设备,可以通过按下不同的按键来输入各种字符或执行特定的操作。在本文档中,我们将介绍如何进行矩阵键盘的程序设计,包括矩阵键盘的原理、接口设计、按键扫描和按键处理等内容。

二、矩阵键盘原理

矩阵键盘由多行和多列的按键组成,每个按键都相当于一个开关。按下某个按键时,对应的行和列会产生一个接通信号,程序可以通过检测这个信号来判断哪个按键被按下。

三、接口设计

在进行矩阵键盘程序设计之前,我们需要确定矩阵键盘与单片机之间的接口。一般来说,矩阵键盘会采用行列交叉的方式进行接线,行引脚与单片机的输出端口相连,列引脚与单片机的输入端口相连。

四、按键扫描

为了检测矩阵键盘是否有按键被按下,我们需要进行按键扫描。按键扫描的原理是逐个地对每个按键进行检测,判断是否有按键被按下。

按键扫描的步骤如下:

1. 将矩阵键盘的行引脚设置为输出模式,列引脚设置为输入模式;

2. 逐个将行引脚置为低电平,检测列引脚的电平状态,如果某列引脚为低电平,则说明有按键被按下,记录下对应的行和列;

3. 循环上述步骤,直到检测完所有的行和列。

五、按键处理

在检测到按键被按下后,我们需要进行相应的按键处理。按键处理的内容可以包括记录按键的值、执行特定的操作等。

按键处理的步骤如下:

1. 根据记录的行和列信息,计算出对应的按键值;

2. 根据按键值执行相应的操作,输入字符、调用某个函数等。

六、示例代码

下面是使用C语言编写的一个简单的矩阵键盘程序示例:

c

include <stdio.h>

史上最详细矩阵键盘原理

史上最详细矩阵键盘原理

1
P1.3
1
1
0
1
1
P1.2
case(0X0d): KeyValue=2;break;
1
0
1
1
1
P1.1
0
1
1
1
1
P1.0
case(0X0e): KeyValue=3;break;
按键 0 按下 0X0e
按键 0 按下 0X0d
按键 1 按下 0X0b
按键 0 按下 0X07
无按值按下 0X0F
}
GPIO_KEY=0XF0; //接下来赋值给 P1,检测行,赋初值给 P1。由上图可知,P1.4-P1.7 为行//
}
}
#include "reg52.h"
//此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义,最值范围 0-65535// typedef unsigned char u8; //对数据类型进行声明定义,最值范围 0-255// #define GPIO_DIG P0 //定义 P0 口// #define GPIO_KEY P1 //定义 P1 口//
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;

矩阵式键盘扫描原理

矩阵式键盘扫描原理

矩阵式键盘扫描原理

矩阵式键盘扫描原理

将键值显示在七节显示器上的单片机源码。把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,比对之后就可知道是哪个键被按下。

比如说扫描码送入01111111,前面的0111是代表扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设为VDD,若第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。

由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。

矩阵键盘原理

矩阵键盘原理

单片机引脚高电平是路端电压是5V,低电平是地0V,为什么不会发生短路呢。

因为脚高电平电压5V不是电源的5V,是经过了一个上拉电阻后的5V,当高低电平端接是,高电平端就被接地,就有电流流过上拉电阻,所以不短路。单片机IO口电路其实就是一个NPN三极管,集电极与电源之间接一个上拉电阻。你所提到的高电平所测到的电压是集电极电压。不知道楼主明白没有呢

矩阵键盘在单片机中就是两个端口短接,都变为低电平,再取查询判断低电平的位置,得知是哪个键按下,再取执行相应的程序

呵呵,是有点尴尬,搞了这么几年,到现在竟然矩阵键盘都不会!不过也不意外,毕竟之前并不能把所有的知识都学到!比如串口,本科的时候就没仔细研究过,后来做GSM,没办法,还是一点一点的去深入理解它,才毕竟通了!矩阵键盘也是一样,现在实习有个项目,要用到矩阵键盘,就现在熟悉下原理,哈哈!

在按键数目比较多、I/O资源有限的情况下,有几种方法实现多按键检测:

•端口扩展:采用端口扩展芯片实现单片机I/O口的扩展;

•使用专门的键盘芯片;

•使用矩阵键盘。

其中矩阵键盘是一种比较常用的方法。矩阵键盘的电路图如下:

矩阵式键盘由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,单片机通过检测行或列线上的电平变化可以确定哪个按键被按下。

矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。

矩阵键盘的检测方法有多种,常见的有:逐点扫描法、逐行扫描法、全局扫描法。

在本实例中我们采用逐行扫描法来实现按键检测,其中PD0-PD3作为列线,PD4-PD7作为行线。识别过程如下:

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

单片机矩阵键盘实验实验报告

实验名称:单片机矩阵键盘实验

实验目的:掌握单片机矩阵键盘的原理和应用,能够使用单片机按键输入

实验内容:利用Keil C51软件,采用AT89C51单片机实现一个4x4的矩阵键盘,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。

实验步骤:

1、搭建实验电路,将矩阵键盘与单片机相连,连接好电源正负极,然后将电路焊接成一个完整的矩阵键盘输入电路。

2、打开Keil C51软件,新建一个单片机应用工程,然后编写代码。

3、通过代码实现对矩阵键盘输入的扫描功能,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。

4、编译代码,生成HEX文件,下载HEX文件到单片机中,将单片机与电源相连,然后就可以测试了。

5、测试完成后,根据测试结果修改代码,重新编译生成HEX 文件,然后下载到单片机中进行验证。

实验结果:

经过测试,实验结果良好,能够准确地输入按键的值,显示在液晶屏上。

实验感想:

通过这次实验,我深深地认识到了矩阵键盘技术的重要性以及应用价值,同时也更加深入了解单片机的工作原理和应用技术,这对我的学习和工作都有很好的帮助。

矩阵键盘的工作原理和扫描确认方式

矩阵键盘的工作原理和扫描确认方式
进行扫描检测。一旦检测到有键按下(key_value),立即停止键盘的扫描, 状态转换到状态 1。注意此时变量 key_value 中保存着读到的列线输入值, 而且该行线低电平的输出是保持不变的。 √ 状态 1,消抖处理和键盘编码。再次检测键盘列线的输入,并与状态 0 时的 key_value 比较,不相等则返回状态 0,实现了消抖处理。相等则确认该键 的输入,进行键盘编码和设置函数的返回值,状态转化到状态 2。 √ 状态 2,等待按键释放。控制 PD3-PD6,4 根行线全部输出低电平,检测 3 根列线输入全部为高电平(无按键按下)时状态返回到状态 0。 读者在阅读该段程序时,请注意 key_mask、key_value、key_line 的作和用
case 2:
// 等待按键释放状态
PORTD = 0b00000111; // 行线全部输出低电平
PORTD = 0b00000111; // 重复送一次
if ( (Key_mask & PIND) == Key_mask)
key_state=0;
// 列线全部为高电平返回状态 0
break;
}
return key_return;
9.3.2 定时扫描方式的键盘接口程序
根据图 9-7,下面的键盘接口函数 read_keyboaed() 完成了对 4*3 键盘的扫 描识别和键盘的编码。编码键盘的定义使用 define 语句定义,键盘的形式类似 电话和手机键盘,如图 9-8 所示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矩阵式键盘的连接方法和工作原理

什么是矩阵式键盘?当键盘中按键数量较多时,为了减少I/O 口线的占用,通常将按键排列成矩

阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样做有什么好处呢?大家看下面的电路图,一个并行口可以构成4*4=16 个按键,比之直

接将端口线用于键盘多出了一倍,而且线数越多,区别就越明显。比如再多加一条线就可以构成20 键

的键盘,而直接用端口线则只能多出一个键(9 键)。由此可见,在需要的按键数量比较多时,采用矩

阵法来连接键盘是非常合理的。

矩阵式结构的键盘显然比独立式键盘复杂一些,识别也要复杂一些,在上图中,列线通过电阻接

电源,并将行线所接的单片机4 个I/O 口作为输出端,而列线所接的I/O 口则作为输入端。这样,当按

键没有被按下时,所有的输出端都是高电平,代表无键按下,行线输出是低电平;一旦有键按下,则输

入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了,具体的识别及编程方法如下

所述:

二.矩阵式键盘的按键识别方法

确定矩阵式键盘上任何一个键被按下通常采用“行扫描法”或者“行反转法”。行扫描法又称为

逐行(或列)扫描查询法,它是一种最常用的多按键识别方法。因此我们就以“行扫描法”为例介绍矩

阵式键盘的工作原理:

1.判断键盘中有无键按下

将全部行线X0-X3 置低电平,然后检测列线的状态,只要有一列的电平为低,则表示键盘中有键

被按下,而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中;若所有列线均为高电平,则表

示键盘中无键按下。

2.判断闭合键所在的位置

在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平(即在

置某根行线为低电平时,其它线为高电平),当确定某根行线为低电平后,再逐行检测各列线的电平状

态,若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

下面给出一个具体的例子:

单片机的P1 口用作键盘I/O 口,键盘的列线接到P1 口的低4 位,键盘的行线接到P1 口的高4

位,也就是把列线P1.0-P1.3 分别接4 个上拉电阻到电源,把列线P1.0-P1.3 设置为输入线,行线

P1.4-P1.7 设置为输出线,4 根行线和4 根列线形成16 个相交点,如上图所示。

检测当前是否有键被按下:检测的方法是P1.4-P1.7 输出全“0”,读取P1.0-P1.3 的状态,若

P1.0-P1.3 为全“1”,则说明无键闭合;否则有键闭合。

去除键抖动:当检测到有键按下后,延时一段时间再做下一次的检测判断,若仍有键按下,应识

别出是哪一个键闭合,方法是对键盘的行线进行扫描,P1.4-P1.7 按下述4 种组合依次输出:P1.7 1110;

P1.6 1101;P1.5 1011;P1.4 0111;在每组行输出时读取P1.0-P1.3;若全为“1”,则表示为“0”这

一行没有键闭合;否则就是有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭

合键的行值和列值转换成所定义的键值。为了保证按键每闭合一次CPU 仅作一次处理,必须去除键释放

时的抖动。举个实例:

三.矩阵式键盘的实验程序

ORG 0030H ;

SCAN:MOV P1,#0FH ;

MOV A,P1 ;

ANL A,#0FH ;

CJNE A,#0FH,NEXT1 ;

SJMP NEXT3 ;

NEXT1:ACALL D20Ms ;

MOV A,#0EFH ;

NEXT2:MOV R1,A ;

MOV P1,A ;

MOV A,P1 ;

ANL A,#0FH ;

CJNE A,#0FH,KCODE ;

MOV A,R1 ;

SETB C ;

RLC A ;

JC NEXT2 ;

NEXT3:MOV R0,#00H ;

RET ;

KCODE:MOV B,#0FBH ;

NEXT4:RRC A ;

INC B ;

JC NEXT4 ;

MOV A,R1 ;

SWAP A ;

NEXT5:RRC A ;

INC B ;

JC NEXT5 ;

NEXT6:MOV A,P1 ; ANL A,#0FH ; CJNE A,#0FH,NEXT6; MOV R0,#0FFH ; RET ;

END。

相关文档
最新文档