51单片机的4×4键盘识别与74LS164驱动数码显示

来源:互联网 发布:易趣网与淘宝网的不同 编辑:程序博客网 时间:2024/06/05 00:21

;P1口外接4×4键盘,输出使用74LS164驱动一位数码显示器。
;当按下任一键时,在数码显示器上显示键值。
;程序用汇编语言编写,用PROTEUS仿真调试的画面如下:

51单片机的4×4键盘识别与74LS164驱动数码显示 - 非著名博主 - 电子信息角落
;图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/50c443507b7e3a43377abec1.html#

;程序如下:

    ORG   0000H
    LJMP  START
    ORG   0030H
START:
    MOV  P1, #255
    MOV  60H, #16
MAIN:
    CALL DISPLAY
;SJMP  $
M_LOOP:
    CALL K_SCAN         ;扫描程序
    JB   ACC.4, M_LOOP
    LJMP MAIN
;---------------------------------------
DISPLAY:
    MOV  A,  60H
    MOV  DPTR, #D_TAB   ;码表首地址
    MOVC A, @A + DPTR
    CPL  A
    MOV  R2, #8
INI1:
    RRC  A
    MOV  P3.0, C        ;A中低位输出至P3.0
    CLR  P3.1           ;移位脉冲
    SETB P3.1
    DJNZ R2, INI1       ;移位8次
    RET
;-------------------------
D_TAB:                  ;段码表
    DB  03FH, 006H, 05BH, 04FH
    DB  066H, 06DH, 07DH, 007H
    DB  07FH, 06FH, 077H, 07CH
    DB  039H, 05EH, 079H, 071H, 000H
;---------------------------------------
K_SCAN: 
    MOV  P1, #240       ;各行皆为0
    MOV  A,  P1         ;读出列
    CJNE A, #240, COW   ;有键按下转移
    SETB ACC.4          ;没有按键的标记
    RET
;-------------------------
COW:
    MOV  P1, #15        ;各列皆为0
    ADD  A, P1
    MOV  60H, A         ;保存键码
;-------------------------
    MOV  DPTR, #KEY_TAB ;键码表首地址
    MOV  R2, #0         ;从第0个开始查
K_S1:
    MOV  A, R2
    INC  R2
    MOVC A, @A + DPTR
    CJNE A, 60H, K_S1   ;与60H内容比较,不等则继续查
    DEC  R2
    CJNE R2, #16, K_ED
    SETB ACC.4          ;没有按键的标记
    RET
;-------------------------
K_ED:                   ;有键按下
    MOV  60H, R2        ;保存按键号码
    CALL DELAY          ;消除抖动
WAIT:
    MOV  P1, #0F0H
    MOV  A, P1
    CJNE A, #0F0H, WAIT ;等待释放
    CLR  A
    RET
;-------------------------
KEY_TAB:                ;键码表
    DB  07EH, 0BEH, 0DEH, 0EEH
    DB  07DH, 0BDH, 0DDH, 0EDH
    DB  07BH, 0BBH, 0DBH, 0EBH
    DB  077H, 0B7H, 0D7H, 0E7H
;---------------------------------------
DELAY:                  ;延时
    MOV  R5, #10
D2: MOV  R6, #2
D1: MOV  R7, #248
    DJNZ R7, $
    DJNZ R6, D1
    DJNZ R5, D2
    RET
;---------------------------------------
END

0 0
原创粉丝点击