平凡单片机教学 第二十五讲 矩阵式键盘接口技术及编程

发布者:技术旅人最新更新时间:2016-03-25 来源: eefocus关键字:单片机教学  矩阵式  键盘接口  编程 手机看文章 扫描二维码
随时随地手机看文章
1.矩阵式键盘接口技术及编程

1.矩阵式键盘的结构与工作原理:

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

 

                              

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。

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

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

 

行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

 

 

1.判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

 

 

2.判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

 

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

图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。

 

 

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

 

 

2.去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。

 

 

3.若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:

 

P1.7 1 1 1 0

 

P1.6 1 1 0 1

 

P1.5 1 0 1 1

 

P1.4 0 1 1 1

 

在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值

 

 

4.为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

 

        

         

键盘扫描程序:

从以上分析得到键盘扫描程序的流程图如图2所示。程序如下

 

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

 

INC B

 

INC B

 

INC B

 

JC NEXT5

 

NEXT6: MOV A,P1

 

ANL A,#0FH

 

CJNE A,#0FH,NEXT6

 

MOV R0,#0FFH

 

RET

 

键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。

 

到本课为止,本站教程暂告一个段落!感谢大家的关心和支持!

关键字:单片机教学  矩阵式  键盘接口  编程 引用地址:平凡单片机教学 第二十五讲 矩阵式键盘接口技术及编程

上一篇:平凡单片机教学 第二十四讲 键盘接口与编程
下一篇:平凡单片机教学 实战一 流水灯

推荐阅读最新更新时间:2024-03-16 14:48

编程逻辑技术在数字信号处理系统中的应用
  1 引言   随着半导体技术的发展,可编程逻辑器件在结构、工艺、集成度、功能、速度和灵活性等方面有了很大的改进和提高,从而为高效率、高质量、灵活地设计数字系统提供了可靠性。CPLD或FPGA技术的出现,为DSP系统的设计又提供了一种崭新的方法。利用CPLD或FPGA设计的DSP系统具有良好的灵活性和极强的实时性。同时,其价格又可以被大众接受。由于乘法器在数字信号处理系统中具有广泛的应用,所以本文以乘法器的处理系统中具有广泛的应用,所以本文以乘法器的设计为例,来说明采用可编程逻辑器件设计数字系统的方法。如果想使系统具有较快的工作速度,可以采用组合逻辑电路构成的乘法器,但是,这样的乘法器需占用大量的硬件资源,因而很难实现宽位乘
[嵌入式]
DSP编程技巧之3:揭开编译器神秘面纱之程序优化
 在二三十年前人们刚开始使用 C语言 代替汇编进行开发的时候,因为当初的处理器/控制器性能很弱,而 编译器 的能力也有限,所以形成了一些 C语言 编程效率不高的印象。但是今天的硬件性能已经非常强大,而 编译器 的能力也是日新月异,如果我们不熟练掌握汇编编程中的一些关键技术,编写的汇编代码的效率已经很难超过 编译器 从 C语言 转换出来的汇编代码了。 如果我们使用C语言进行编程的话,编译器除了可以把我们的加减乘除这样的操作转换为ADD、MPY以及相关的寻址、寄存器操作外,还可以在编译产生汇编代码的过程中进行不同程度的优化。优化的过程要根据器件的特点与指令集等进行有针对性的配置,所以在不同的器件上同一段C代码优
[嵌入式]
DSP<font color='red'>编程</font>技巧之3:揭开编译器神秘面纱之程序优化
健身穿戴装置需求殷 可编程Sensor Hub行情涨
下一阶段的智慧生活,将会是什么样貌?ARM正不断引爆智慧生活的新革命,并擘划“隐形的智慧”未来蓝图。除此之外,ARM也持续与合作夥伴在行动装置、物联网(IoT)与伺服器等领域开花结果,显示ARM高度整合、系统化并可扩充的解决方案正一步步实现不易察觉、却无所不在的智慧生活。 Antonio说,ARM正不断引爆智慧生活的新革命,并擘划“隐形的智慧”未来蓝图。 ARM执行副总裁兼全球业务开发总裁Antonio J. Viana指出,一般消费者所见的科技都只是冰山一角,背后使其运作的程序远比想像中复杂。ARM与其产业体系的任务正是简化所有开发流程,让在不同岗位的专家们能各司其职,加强开发产品的差异性并加速产品上市时程。 A
[物联网]
用软件编程的方法来模拟51单片机产生PWM波
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。
[单片机]
用软件<font color='red'>编程</font>的方法来模拟51<font color='red'>单片机</font>产生PWM波
安富利电子元件部特价促销Xilinx电路板和入门工具套件,在IIC-China上掀起热潮
针对先进电路板提供全新超低折扣,软件开发套件降价最高达73%   中国深圳,2007年3月5日 – 在今天于深圳举办的第十二届国际集成电路研讨会暨展览会(IIC-China 2007)上,安富利电子元件部(Avnet Electronics Marketing)携最新突破性产品及创新可靠的解决方案闪亮登场,并以一系列折扣和促销计划掀起热潮。      该促销计划针对赛灵思公司(Xilinx)顶级产品提供全新超低折扣,采用65纳米技术的新型高性能Xilinx Virtex-5 LX板和采用90纳米技术的Xilinx Spartan-3系列电路板等产品的价格降低了20%。本次促销将从今日起进行,至2007年4月15日结束。     
[焦点新闻]
51单片机控制蜂鸣器播放5首歌曲汇编程
;机器人代码:(外部中断用来接红外传感器的) ORG 0000H JMP INIT ORG 0003H JMP INT_0 ORG 000BH JMP INT_T ORG 0023H JMP INT_S ;------------------------------------- FLAG_F EQU 01H ;功能选择,0为播放,1为演奏 FLAG_L EQU 02H ;指示灯选择,0指示灯亮或1亮 FLAG_P EQU 03H ;是否播放标志,0停止,1播放 FLAG_CH EQU 04H ;演奏时是否换音符,1有效 FLAG_LAST EQU 05H ;播放时是
[单片机]
AVR--IO设置编程
AVR的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令。所以需要采用 位逻辑运算 来实现,这是必须要掌握的。IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。不必考虑代码效率的问题,如果可能,GCCAVR会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。 例如 iom16.h 里面定义了 1 例如 iom16.h 里面定义了 2 3 #define PA0 0 4 5 PA0为1 PORTA |= (1 PA0) 6 PA0为0 PORTA &= ~(1 PA0)
[单片机]
AVR--IO设置<font color='red'>编程</font>
基于51单片机和可编程逻辑器件实现LED显示屏
LED显示屏主要由电流驱动电路及LED点阵阵列、控制系统和PC端管理软件三部分构成(图1)。控制系统负责接收、转换和处理各种外部信号,并实现扫描控制,然后驱动LED点阵显示需要的文字或图案。控制系统作为LED显示屏的核心部分,直接决定了显示屏的显示效果和性能的优劣。本文详细分析采用Verilog HDL对ATF1508AS进行编程,实现双口RAM访问和产生LED点阵驱动电路所需的各种时序信号。 1 LED显示屏的基本结构及关键技术 本系统设计中,控制系统采用单片机+CPLD的方案来实现,整个控制系统可分为:信号接收及处理模块和CPLD的扫描控制模块和LED点阵驱动模块,如图1 所示。本系统的关键技术是使用双口RAM和C
[单片机]
基于51<font color='red'>单片机</font>和可<font color='red'>编程</font>逻辑器件实现LED显示屏
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved