234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

    26课:矩阵式键盘接口技术及程序设计

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年08月14日   【字体:

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


    <单片机矩阵式键盘接口技术及编程接口图>

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

    矩阵式键盘的一按钮识别办法

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

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

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

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

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

    图仍如上    所示 。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个相交点 。

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

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

    若有键被按下,应识别出是哪一个键闭合 。办法是对键盘的一行线进行扫描 。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”这一行没有键闭合,不 然有键闭合 。由此得到闭合键的一行值№和列值,然后可采用计算︻法或查表法将闭合键的一行值№和列值转换成所定义的一键值

    为了保证键每闭合一次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

    键盘处理程序就作这么一个简单的一介绍,实际上    ,键盘、显示处理是很复杂的一,它一般占到一个应用程序的一大部份代码,可见其重要性,但说到,这种复杂并不 来自于单片机的一本身,而是来自于操作者的一习惯等等问题,因 此,在编写键盘处理程序之前,最好先把它从逻辑上    理清,然后用适当的一算︻法表示出来,最后再去写代码,这样,才能快速有效地写好代码 。到本课为止,本站教程暂告一个段落!请继续关注http://www.的一单片机教程 。感谢大家的一关心№和支持!教程中如果有不 对之处也希望大家在评论中提出,我们会及时正更错误的一.

    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论