4*4矩阵键盘的汇编设计_J_KKKK的空间_百度空间

本次设计是利用单片机技术,采用利用键盘产生中断的思想,利用中断查询的方法,用汇编语言设计了一个4×4的键盘模块,键盘有值0--F时产生中断,用数码管显示相应的按键值。

汇编程序如下:

;*********************************************************
;      0               1               2              3----P1^0
;      4               5               6              7----P1^1 输
;      8               9               A              B----P1^2 入
;      C               D              E               F----P1^3
;      |                |               |               |
;   P1^4        P1^5         P1^6        P1^7    输出
;*********************************************************
    ORG 0000H    
    LJMP MAIN
    ORG 0003H
    AJMP INT
    ORG   0030H

MAIN:   MOV     P0,#0FFH;    程序启动时灯灭
     MOV      P1,#0F0H
     SETB     TCON.0;       外部中断为下降沿触发
     MOV      IE,#81H;     外部中断开中断


     SJMP    $

INT: CLR      EA        ;进入中断服务程序
       PUSH    PSW
       LCALL   DELAY
       LCALL   KS
       JNZ       SAOMIAO
       LJMP     INT0R

SAOMIAO:MOV DPTR,#TAB;
      ACALL    K1;       调用键盘扫描程序
      MOVC     A,@A+DPTR; 查表后将值送入累加器
      MOV      P0,A; 在P0口显示键盘值

K1: MOV      R2,#0EFH; 将扫描值送入 R2暂存
      MOV      R4,#00H; R4用于存放列值,并将00H暂存
K3:   MOV    P1,R2;

L6: JB         P1^0,L1; P1^0等于1跳转到L1
      MOV       A,#00H; 将{dy}行的行值00H送入ACC
      AJMP      LK; 跳转到键值处理程序
L1: JB          P1^1,L2; P1.1等于1跳转到L2
      MOV       A,#04H; 将第二行的行值送入ACC
      AJMP      LK; 跳转到键值理程序进行键值处理
L2: JB         P1^2,L3; P1.2等于1跳转到L3
      MOV       A,#08H; 将第三行的行值送入ACC
      AJMP       LK; 跳转到键值处理程序
L3: JB         P1^3,NEXT ; P1.3等于1跳转到NEXT处
      MOV      A,#0cH; 将第四行的行值送入ACC
LK:   ADD     A,R4; 行值与列值相加后的键值送入A
    PUSH     ACC; 将A中的值送入堆栈暂存
K4:   LCALL DELAY; 调用延时去抖动程序
      LCALL   KS; 调用按键检测程序
      JNZ       K4; 按键没有松开继续返回检测
      POP      ACC; 将堆栈的值送入ACC
RET

NEXT:
     INC      R4; 将列值加一
     MOV     A,R2;
     JNB      ACC.7,INT0R; 未扫描出键值退出中断
     RL        A; 扫描未完成将A中的值右移一位进行下一列的扫描
     MOV    R2,A; 将ACC的值送入R2暂存
     AJMP    K3; 跳转到K3继续

KS: MOV   P1,#0FH; 将P1口高四位置0低四位置1
      MOV    A,P1; 读P1口
      XRL     A,#0FH; 将A中的值与0FH相异或
RET  

DELAY:                 ;    10ms延时去抖动子程序2*FA*2=10ms
     MOV      R5,#02H
L7: MOV R6,#0FAH
L8: DJNZ R6,L8
        DJNZ R5,L7
RET

INT0R: POP PSW
     MOV      P1,#0F0H
     SETB     TCON.0; 外部中断为下降沿触发
     MOV      IE,#81H; 外部中断开中断
RETI

TAB:        ; 采用共阳极LED显示器
        DB        0C0H;0
        DB        0F9H;1
        DB        0A4H;2
        DB        0B0H;3
        DB        099H;4
        DB        092H;5
        DB        082H;6
        DB        0F8H;7
        DB        080H;8
        DB        090H;9
        DB        088H;A
        DB        083H;b
        DB        0C6H;C
        DB        0A1H;d
        DB        086H;E
        DB        08EH;F
END

以下是硬件连接的电路图:

仿真图如下:

以上便是自己设计的4*4矩阵键盘的中断设计的服务程序,52系列的单片机的P1口作为键盘的扫描与输入口,P0作为数码显示的输出口,汇编程序的精华在扫描键盘值时,采用的是行值和列值相加的方式确定键值,键盘的程序设计应不断地提醒自己有消抖的过程,即程序的延时过程!



郑重声明:资讯 【4*4矩阵键盘的汇编设计_J_KKKK的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——