PersonalCorpus 版 (精华区)

寄信人: asaki (牙子·:-#)
标  题: 没主题
发信站: 哈工大紫丁香 (2003年06月17日13:11:25 星期二)
来  源: 202.118.248.68 

键盘行扫描法 

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

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

P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘
的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P
1.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仅作一次处理,必须却除键释放时的抖动。
        延时子程序D20MS你自己编吧。几个循环递减就成。

键盘扫描程序:

SCAN:         MOV      P1,#0FH          ;望P1.4-P1.7输出0
              MOV      A,P1         ;读P1
              ANL       A,#0FH      ;取P1.0-P1.3的值
              CJNE      A,#0FH,NEXT1    ;如果P1.0-P1.3都为1无键按下
              SJMP      NEXT3           ;退出键盘扫描程序
NEXT1:        ACALL   D20MS                   ;延时20毫秒
              MOV      A,#0EFH          
NEXT2:        MOV      R1,A                 
              MOV      P1,A              ;P1口输出11101111,判断第一行
              MOV      A,P1
              ANL      A,#0FH           ;读P1口底四位
              CJNE     A,#0FH,KCODE     ;如果底位都为1,这行无键按下
              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 

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.248.68]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.558毫秒