在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵 形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成 4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。

图5-4(4*4矩阵式按键的接法)

首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态 ;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。

下面程序按照上述算法流程去编写的,其电路如图5-6,只是在图5-5的基础上多加了P0端口的8只LED灯。从键盘中检测到一个键值,然后将这个值写到LED数码管上显示。另外一种工作原理:

1、4×4矩阵键盘的工作原理

矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。

图1为ME300B矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。

图1  矩阵键盘电路

图2  按键排列

2、数码管动态扫描显示电路

在ME300B开发系统中,采用了8位数码管动态扫描显示。它将所有数码管的8个段线相应地并接在一起,并接到 AT89S51的P0口,由P0口控制字段输出。而各位数码管的共阳极由AT89S51的P2口控制Q20-Q27来实现8位数码管的位输出控制。

这样,对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。

由于各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。因此,同一时刻如果各位数码管的位选线都处于选通状态的话,8位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式。即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。同时,段线上输出相应位要显示字符的字型码。这样同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。

虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。

图3  数码管电路

数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。

在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。见图3

二、演示程序的编程方法

1、4×4矩阵键盘的编程方法:

1.1、先读取键盘的状态,得到按键的特征编码。

先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。

举例说明如何得到按键的特征编码:

假设“1”键被按下,找其按键的特征编码。

从P1口的高四位输出低电平,即P1.4-P1.7为输出口。低四位输出高电平,即P1.0-P1.3为输入口。读P1口的低四位状态为“ 1101”,其值为“0DH”。

再从P1口的高四位输出高电平,即P1.4-P1.7为输入口。低四位输出低电平,即P10-P13为输出口,读P1口的高四位状态为“1110”,其值为“E0H”。

将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“EDH”。

用同样的方法可以得到其它15个按键的特征编码。

1.2、根据按键的特征编码,查表得到按键的顺序编码。

将用上述方法得到的

16

个按键的特征编码按图

2

按键排列的顺序排成一张特征编码与顺序编码的对应关系表,然后用当前读得的特征编码来查表,当表中有该特征编码时,它所在的位置就是对应的顺序编码。

4x4矩阵键盘工作原理及扫描程序_4*4 矩阵键盘工作原理相关推荐

  1. 4x4矩阵键盘工作原理及扫描程序_基于复杂可编程逻辑器件实现键盘接口电路的设计...

    1 引言 无功补偿装置是用于补偿电网无功功率的不足,提高功率因数,保证供电系统安全运行和节约电能的设备,其核心是控制仪.本控制仪集无功补偿.电度量计量.电能质量监测及通信于一体,对电网参数进行实时采样 ...

  2. 4x4矩阵键盘工作原理及扫描程序_4X4矩形键盘

    介绍 什么是矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和 ...

  3. 4x4矩阵键盘工作原理及扫描程序_单片机人机交互矩阵按键

    按键是一种常开型按钮开关,与单片机的常见接法如图所示.按键未按下时两个触点断开,单片机I/O口输入高电平:当按键闭合时,I/O口输入低电平. 一.按键讲解 当I/O口为P0口时,由于没有内部上拉电阻, ...

  4. 4x4矩阵键盘工作原理及扫描程序_AVR单片机扫描4X4矩阵键盘并数码管显示程序

    /* program name :   keyboard ; 功能描述 :  扫描16个按键(4X4),并把键值显示在数码管上(两位); 要点 :  在扫描按键时运用了比较复杂的两个for()循环嵌套 ...

  5. 为什么开软件计算机停止工作原理,出现一个问题,导致程序停止正常工作 请关闭该程序...

    出现一个问题,导致程序停止正常工作 请关闭该程序internet explorer已停止工作,出现了一个问题,导致程序停止正常工作.请关闭该程序遇到这个问题,不知道有没有软件的错误日志. 出现一个问题 ...

  6. IP地址扫描程序/扫描工具

    随着许多组织采用自带设备 (BYOD) 等策略,IT 网络变得越来越复杂.随着越来越多的设备连接到网络,IP 地址扫描势在必行,以确保设备在连接到网络时不会遇到问题.IP 地址扫描器是 OpUtils ...

  7. 发送linux键盘消息,在C#程序中模拟发送键盘按键消息

    using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")] public static ext ...

  8. linux 应用程序 键盘,在基于 Web 的 VNC 应用程序中支持多种键盘布局

    基于 Web 的 KVM 管理工具(比如 Kimchi 和 Ovirt)可帮助用户轻松创建和管理虚拟机 (VM),甚至是从移动设备创建和管理虚拟机.这些工具依靠远程桌面共享技术,比如 虚拟网络计算 ( ...

  9. 4x3矩阵键盘扫描法c语言,4X4矩阵键盘扫描程序

    4X4矩阵键盘扫描程序 4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读 ...

  10. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘

    请先阅读上篇: 短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动) 上面的程序适用于单个按键,那是不是也可以适用于矩阵键盘呢? 答案是肯定的. 接下来在这里做一个简单的扩展,具体框架不用改变, ...

最新文章

  1. C语言----字符串左旋
  2. 转图片_图片怎么转PDF?图片转PDF就用这些方法吧!
  3. 微软技术能力测试工具V0.1试用
  4. linux命令:xargs
  5. jvm性能调优 - 10白话年轻代数据晋升老年代规则及老年代回收算法
  6. go 分段锁ConcurrentMap,map+读写锁,sync.map的效率测试
  7. Django启动服务器时,报错mysql的2059错误的原因。
  8. sql2008 获取表结构说明
  9. Flutter MouseRegion 链接高亮显示样式 只有你想不到 没有你做不到的
  10. Python_argparse
  11. vForum 2011 Beijing现场图文播报三 动手实验营
  12. python基础快速入门day01
  13. JavaScript中Array类型方法总结
  14. 2018云+未来峰会圆桌面对面:以网络安全之能,造国之重器
  15. 行测备考丨易混词傻傻分不清?大神来拯救你!
  16. AI新星丨普林斯顿陈丹琦
  17. 《JavaScript设计模式》初次笔记——wsdchong
  18. el-checkbox-group 的坑
  19. ftp下载工具绿色版,有没有好用且免费的ftp下载工具绿色版,有几款值得推荐?
  20. 谁是 GameFi 3 月最大的赢家| March Monthly Report

热门文章

  1. ansys选择一个面上所有节点_ansys中如何选择面及其上的节点
  2. Eclipse| Eclipse安装中文版本教程
  3. Mac下载eclipse的方法
  4. 2021 年 五一数学建模比赛 B 题(第四问至第六问)
  5. 求ucinet软件下载资源!!!!
  6. network 节点label以及相关字体设置
  7. 计算机工作日志如何调取,怎样查找电脑日志?
  8. 用拉普拉斯变换求零状态响应_什么是UPS?为什么用UPS?关于UPS电源的知识都在这里!...
  9. java udp发送速率_项目总结22:Java UDP Socket数据的发送和接收
  10. 组合逻辑电路的分析与设计