×
单片机 > 单片机程序设计 > 详情

2×2行列式键盘电路设计并编写键盘扫描子程序实例

发布时间:2020-08-26 发布时间:
|

1)2×2行列式键盘电路如图所示////////

 
图片1


(2)键盘扫描子程序: 

KEY1:  ACALL    KS1      ;调用判断有无键按下子程序


         JNZ       LK1      ;有键按下,转LK1

         AJMP     KEY1     ;无键按下,返回 

LK1:     ACALL   T12MS    ;调延时12ms子程序

         ACALL   KS1       ;查有无键按下


         JNZ      LK2       ;若有,则为键确实按下,转逐列扫描 

         AJMP    KEY1      ;无键按下,返回

LK2:       MOV    R4,#00H    ;首列号    R4


           MOV    R2,#FEH    ;首列扫描字    R2


LK4:       MOV    A,R2       ;列扫描字    P1口


           MOV    P1,A        ;使第一列线为0

MOV   A,P1       ;读入行状态


           JB       ACC.0,LONE;第0行无键按下,转查第一行 

           MOV    A,#00H   ;第0行有键按下,该行首键号#00H    A


           AJMP    LKP        ;转求键号

LONE:     JB       ACC.1,NEXT ;第一行无键按下,转查下一列


          MOV    A,#02       ;第一行有键按下,该行首键号#02   A


LKP:      ADD    A,R4        ;键号=首行号+列号


          PUSH    ACC        ;键号进栈保护 

LK3:      ACALL   KS1        ;等待键释放 

          JNZ      LK3        ;未释放,等待


          POP      AC         ;键释放,键号    A

          RET                  ;键扫描结束 

NEXT:    INC      R4          ;列号加1,指向下一列 

          MOV     A,R2        ;列扫描字    A

          JNB      ACC.1,KND  ;判断2列全扫描完?扫描完,转KND

          RL       A           ;没扫描完,扫描字左移一位,形成下一列扫描字

          MOV     R2,A        ;扫描字     R2


          AJMP     LK4        ;扫描下一列


          AJMP     KEY1       ;全扫描完,返回


          MOV     A,#FCH      ;全扫描字11111100B     A


          MOV     P1,A         ;全扫描字    所有行

          MOV     A,P1         ;读取列值

          CPL      A            ;取正逻辑,高电平表示有键按下 

          ANL      A,#0C0H     ;屏蔽低6位,取高2位


          RET                   ;出口状态(A)!=0,有键按下





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址