⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jp.txt

📁 几种键盘扫描程序,比较详细、经典
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;*                                   *
;*************************************
 ORG     0000H           ;程序执行开始地址
 AJMP    MAIN            ;跳至MAIN执行
;*************************************
;*                                   *
;*        主  程  序                 *
;*                                   *
;*************************************
 ORG     0040H
MAIN:   MOV     P1,#0FFH
 MOV     P3,#0FFH
 LCALL   KEYSCAN         ;主体程序。调用查键子程序
   LJMP  MAIN     ;转MAIN循环
   NOP       ;软件陷阱
   NOP
   NOP
   LJMP  MAIN    
;*************************************
;*                                   *
;* 键盘工作子程序(4 * 5 阵列)        *
;* 接口为2051的P3和P1口              *
;*************************************
KEYSCAN:MOV  P3,#0FFH ;清P3口,初始化键低电平有效
      CLR  P3.2  ;清P3.2口
      MOV  A,P1  ;读P1口状态
      ANL  A,#0FH  ;清高4位,保留低四位低电平有效
      XRL  A,#0FH  ;异或相同则为0不同结果为1,为0则表;示无键被按下(这一行)
      JZ  NOKEY1  ;为0则转下一行键值处理
      LCALL  DL10MS  ;有键按下则延时10ms再测一次抗干扰
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY1  ;是干扰则转下一行键值处理程序
      MOV  A,P1
      ANL  A,#0FH  ;保留低四?
KB1: CJNE  A,#0EH,KB2 ;如果值为#0E则为P1.4与P1.0组合的键
      MOV  KEYBUF,#0 ;赋键值
      LJMP  KEYWORK  ;转键处理
KB2:  CJNE  A,#0DH,KB3 ;如果值为#0D则为P1.4与P1.1组合的键
      MOV  KEYBUF,#1
      LJMP  KEYWORK
KB3:  CJNE  A,#0BH,KB4 ;如果值为#0B则为P1.4与P1.2组合的
      MOV  KEYBUF,#2
      LJMP  KEYWORK
KB4:  CJNE  A,#07H,KB5 ;如果值为#07则为P1.4与P1.3组合的
      MOV  KEYBUF,#3
      LJMP  KEYWORK
KB5:  NOP
 ;
NOKEY1: MOV  P3,#0FFH
      CLR  P3.3
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY2
      LCALL  DL10MS
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY2
      MOV  A,P1
      ANL  A,#0FH
      CJNE  A,#0EH,KB6
      MOV  KEYBUF,#4
      LJMP  KEYWORK
KB6:  CJNE  A,#0DH,KB7
      MOV  KEYBUF,#5
      LJMP  KEYWORK
KB7:  CJNE  A,#0BH,KB8
      MOV  KEYBUF,#6
      LJMP  KEYWORK
KB8:  CJNE  A,#07H,KB9
      MOV  KEYBUF,#7
      LJMP  KEYWORK
KB9:  NOP
 ;
NOKEY2: MOV  P3,#0FFH
      CLR  P3.4
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY3
      LCALL  DL10MS
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY3
      MOV  A,P1
      ANL  A,#0FH
      CJNE  A,#0EH,KB10
      MOV  KEYBUF,#8
      LJMP  KEYWORK
KB10:  CJNE  A,#0DH,KB11
      MOV  KEYBUF,#9
      LJMP  KEYWORK
KB11:  CJNE  A,#0BH,KB12
      MOV  KEYBUF,#10
      LJMP  KEYWORK
KB12:  CJNE  A,#07H,KB13
      MOV  KEYBUF,#11
      LJMP  KEYWORK
KB13:  NOP
 ;
NOKEY3: MOV  P3,#0FFH
      CLR  P3.5
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY4
      LCALL  DL10MS
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY4
      MOV  A,P1
      ANL  A,#0FH
      CJNE  A,#0EH,KB14
      MOV  KEYBUF,#12
      LJMP  KEYWORK
KB14:  CJNE  A,#0DH,KB15
      MOV  KEYBUF,#13
      LJMP  KEYWORK
KB15:  CJNE  A,#0BH,KB16
      MOV  KEYBUF,#14
      LJMP  KEYWORK
KB16:  CJNE  A,#07H,KB17
      MOV  KEYBUF,#15
      LJMP  KEYWORK
KB17:  NOP
 ;
NOKEY4: MOV  P3,#0FFH
      CLR  P3.7
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY5
      LCALL  DL10MS
      MOV  A,P1
      ANL  A,#0FH
      XRL  A,#0FH
      JZ  NOKEY5
      MOV  A,P1
      ANL  A,#0FH
      CJNE  A,#0EH,KB18
      MOV  KEYBUF,#16
      LJMP  KEYWORK
KB18:  CJNE  A,#0DH,KB19
      MOV  KEYBUF,#17
      LJMP  KEYWORK
KB19:  CJNE  A,#0BH,KB20
      MOV  KEYBUF,#18
      LJMP  KEYWORK
KB20:  CJNE  A,#07H,KB21
      MOV  KEYBUF,#19
      LJMP  KEYWORK
KB21:  NOP
 ;
NOKEY5: LJMP  MAIN
 ;
KEYWORK:MOV  A,KEYBUF  ;得到键值
       MOV   DPTR,#TABLE
       MOVC  A,@A+DPTR  ;查行键值送ACC
       MOV  P0,A
 ;
WAITFREE:
      MOV  A,P1   ;以下程序等待键释放
      MOV  KEYBUF,#00H
      ANL  A,#0FH
      XRL  A,#0FH
      JNZ  WAITFREE
      RET
 ;
;*************************************
;*                                   *
;*          延时513 us              *
;*                                   *
;*************************************
 ;
;513微秒延时程序
DELAY: MOV   R2,#0FEH
DELAY1: DJNZ    R2,DELAY1
   RET
 ;
;*************************************
;*                                   *
;*             延时10ms             *
;*                                   *
;*************************************
 ;
;10毫秒延时程序
DL10MS: MOV     R3,#14H
DL10MS1:LCALL   DELAY
        DJNZ    R3,DL10MS1
       RET
 ;
TABLE:                           ;七段显示器数据定义
 DB  0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234
      DB  92H,  82H,  0F8H, 80H,  90H ; 56789
      DB  88H,  83H,  0C6H,  0A1H, 86H; ABCDE
      DB  8EH             ; F
 ;
      END                ;程序结束
/*--------------------------------------------------------------*/
 KEYBUF EQU 30H
            ORG 00H
START:      MOV KEYBUF,#2
WAIT:   
            MOV P3,#0FFH
            CLR P3.4
            MOV A,P3
            ANL A,#0FH  
            XRL A,#0FH
            JZ NOKEY1
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY1
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK1
            MOV KEYBUF,#0
            LJMP DK1
NK1:        CJNE A,#0DH,NK2
            MOV KEYBUF,#1
            LJMP DK1
NK2:        CJNE A,#0BH,NK3
            MOV KEYBUF,#2
            LJMP DK1
NK3:        CJNE A,#07H,NK4
            MOV KEYBUF,#3
            LJMP DK1
NK4:        NOP
DK1:    
            MOV A,KEYBUF
            MOV DPTR,#TABLE
            MOVC A,@A+DPTR
            MOV P0,A 
DK1A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK1A
NOKEY1:
            MOV P3,#0FFH
            CLR P3.5
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY2
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY2
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK5
            MOV KEYBUF,#4
            LJMP DK2
NK5:        CJNE A,#0DH,NK6
            MOV KEYBUF,#5
            LJMP DK2
NK6:        CJNE A,#0BH,NK7
            MOV KEYBUF,#6
            LJMP DK2
NK7:        CJNE A,#07H,NK8
            MOV KEYBUF,#7
            LJMP DK2
NK8:        NOP
DK2:    
            MOV A,KEYBUF
            MOV DPTR,#TABLE
            MOVC A,@A+DPTR
            MOV P0,A
DK2A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK2A
NOKEY2:
            MOV P3,#0FFH
            CLR P3.6
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY3
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY3
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK9
            MOV KEYBUF,#8
            LJMP DK3
NK9:        CJNE A,#0DH,NK10
            MOV KEYBUF,#9
            LJMP DK3
NK10:       CJNE A,#0BH,NK11
            MOV KEYBUF,#10
            LJMP DK3
NK11:       CJNE A,#07H,NK12
            MOV KEYBUF,#11
            LJMP DK3
NK12:       NOP
DK3:
            MOV A,KEYBUF
            MOV DPTR,#TABLE
            MOVC A,@A+DPTR
            MOV P0,A
DK3A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK3A
NOKEY3:
            MOV P3,#0FFH
            CLR P3.7
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY4
            LCALL DELY10MS
            MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JZ NOKEY4
            MOV A,P3
            ANL A,#0FH
            CJNE A,#0EH,NK13
            MOV KEYBUF,#12
            LJMP DK4
NK13:       CJNE A,#0DH,NK14
            MOV KEYBUF,#13
            LJMP DK4
NK14:       CJNE A,#0BH,NK15
            MOV KEYBUF,#14
            LJMP DK4
NK15:       CJNE A,#07H,NK16
            MOV KEYBUF,#15
            LJMP DK4
NK16:       NOP
DK4:    
            MOV A,KEYBUF
            MOV DPTR,#TABLE
            MOVC A,@A+DPTR
            MOV P0,A
DK4A:       MOV A,P3
            ANL A,#0FH
            XRL A,#0FH
            JNZ DK4A
NOKEY4:
            LJMP WAIT
DELY10MS:
            MOV R6,#10
D1:         MOV R7,#248
            DJNZ R7,$
            DJNZ R6,D1
            RET
TABLE:      DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
            DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
            END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -