找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1212|回复: 1
收起左侧

基于51单片机的4x4键盘显示原理图与汇编语言程序

[复制链接]
ID:1025302 发表于 2022-5-15 19:24 | 显示全部楼层 |阅读模式
1.png 2.png
ORG     0000H
          LJMP    MAIN                                
ORG     0100H
MAIN:   LCALL   KEY_IN         
            MOV    P1,A
            LCALL   DEL                    ;   延时去抖
            AJMP    MAIN
;======================================================================
;   == == ==判断有无按键,无按键直接返回 ===========   
KEY_IN:     MOV    P2,#0FH             ;置列线为低电平,读行线状态(低四位,无按键则全为1)
                 MOV    A,P2                       ;读取中
                 ANL   A,#0FH                   ;屏蔽高四位
                MOV    B,A
                 MOV   P2,#0F0H                  ;置行线为低电平,读列线状态(低四位,无按键则全为1)
                 MOV    A,P2
                ANL     A,#0F0H                         ;屏蔽低四位
                ORL   A,B                               ;高低四位重新组合
                 CJNE    A,#0FFH,KEYSCAN
                AJMP  MAIN
;================================================================================
;//=========              键盘扫描程序                  //================================
KEYSCAN:  
                 MOV   R1,#0                          ;初始化列地址
                 MOV    R3,#01111111B           ;初始化扫描码
LOOP:        MOV   A,R3
                   RL    A
                   MOV    R3,A                        ;保留扫描码
                   MOV    P2,A                         ;送扫描码
                   MOV    A,P2                         ;读键盘
                   ORL   A,#0FH                      ;屏蔽低四位
                   CJNE   A,#0FFH,NEXT31        ;A不等于FFH,说明该列有按键按下
                   INC   R1                                 ;行地址加1,扫描下一行
                   CJNE    R1,#4,LOOP               ;行地址不等于4,继续扫描下一行
                   SJMP    EXTI                            ;没有按键,返回
;================//   //============================
NEXT31:       JB    ACC.4,NEXT32
                    MOV   R2,#0                      ;第1列有按键
                    SJMP    NEXT5
NEXT32:         JB    ACC.5,NEXT33
                       MOV   R2,#1                    ;第2列有按键
                     SJMP    NEXT5
NEXT33:         JB    ACC.6,NEXT34
                       MOV   R2,#2                      ;第3列有按键
                     SJMP    NEXT5                     
NEXT34:        
                       MOV   R2,#3                       ;第4列有按键
NEXT5:        MOV    A,R1                            ;计算按键地址
                   RL    A
                    RL      A                                 ;行地址乘4
                    ADD   A,R2                            ;加列地址
                 MOV     DPTR,#KEYTAB
                 MOVC     A,@A+DPTR
EXTI:      MOV      P2,#0FFH                         ;置键盘接口为高电平
RET
;===========//  延时子程序,0.1S延时 //====================
DEL:   MOV   R7,#1                 
DEL1:  MOV   R6,#200
DEL2:    MOV   R5,#248
HERE:   DJNZ   R5,HERE
            DJNZ    R6,DEL2
             DJNZ     R7,DEL1
RET
;==========//按键名称码,共阴数码管//============================
KEYTAB:    DB   3FH,      06H,       5BH,    4FH,   66H,      6DH,    7DH,     07H
                  DB   7FH,     6FH,        77H,    7CH,    39H,     5EH,     79H,     71H                 
;====================================================================
      END

评分

参与人数 1黑币 +10 收起 理由
admin + 10 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1049444 发表于 2022-11-1 16:38 | 显示全部楼层
按键显示的效果相反应该改哪里?您是0~F,我是F~0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表