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

📄 kb.lst

📁 4*4键盘控制一个七段数码管显示
💻 LST
字号:
A51 MACRO ASSEMBLER  KB                                                                   01/17/2008 21:49:43 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN kb.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE kb.a51 SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

0000                   1     ORG 00H
0000 803E              2            JMP START
                       3     ;-----------------------------------------------------------
  0090                 4     KB_PORT EQU P1
  00A0                 5     LED_PORT EQU P2
                       6     ;-----------------------MAIN_PRO----------------------------
0040                   7     ORG 40H
0040                   8     START:
0040 114C              9             CALL KEY_SCAN
0042 8BA0             10             MOV P2,R3
0044 7D0A             11             MOV R5,#10
0046 1186             12     L1:     CALL DL20MS
0048 DDFC             13             DJNZ R5,L1
004A 80F4             14     JMP START       
                      15     ;--------------------查表法得顺序码------键码存于R3中------------------------
004C                  16     KEY_SCAN: 
004C 75900F           17             MOV KB_PORT,#0FH        ;用反转法查键 
004F E590             18             MOV A,KB_PORT
0051 540F             19             ANL A,#0FH
0053 F5F0             20             MOV B,A
0055 7590F0           21             MOV KB_PORT,#0F0H
0058 E590             22             MOV A,KB_PORT
005A 54F0             23             ANL A,#0F0H
005C 45F0             24             ORL A,B
005E B4FF01           25             CJNE A,#0FFH,KEY1
0061 22               26             RET                     ;无键按下
0062                  27     KEY1: 
0062 F5F0             28             MOV B,A                 ;有键按下,存键码 
0064 900075           29             MOV DPTR,#TABLE 
0067 7BFF             30             MOV R3,#0FFH            ;存顺序码单元初始化 
0069                  31     KEY2: 
0069 0B               32             INC R3 
006A EB               33             MOV A,R3 
006B 93               34             MOVC A,@A+DPTR 
006C B5F002           35             CJNE A,B,KEY3           ;判键码,求顺序码 
006F EB               36             MOV A,R3                ;若找到键码,存顺序码 
0070 22               37             RET 
0071                  38     KEY3: 
0071 B4FFF5           39             CJNE A,#0FFH,KEY2       ;判是否查完
0074 22               40             RET                     ;已查完,键码未找到,以无按键处理
                      41     
                      42     ;-------------------可改表的须序来改变对应键的顺序-----------------------------------------
                             ---  
0075                  43     TABLE: 
0075 E7D7DBDD         44             DB 0E7H,0D7H,0DBH,0DDH;7        8       9       F
0079 B7BBBD77         45             DB 0B7H,0BBH,0BDH,077H;4        5       6       E
007D 7B7DEBED         46             DB 07BH,07DH,0EBH,0EDH;1        2       3       D
0081 EEDEBE7E         47             DB 0EEH,0DEH,0BEH,07EH;0        A       B       C
0085 FF               48             DB 0FFH
                      49     ;------------------可改表的须序来改变对应键的顺序------------------------------------------
                             --   
                      50     ;TABLE: 
                      51     ;       DB 077H,07BH,07DH,07EH          ;0      1       2       3
                      52     ;       DB 0B7H,0BBH,0BDH,0BEH          ;4      5       6       7       
                      53     ;       DB 0D7H,0DBH,0DDH,0DEH          ;8      9       A       B
                      54     ;       DB 0E7H,0EBH,0EDH,0EEH          ;C      D       E       F
                      55     ;       DB 0FFH                         ;查表的结束标记
                      56     ;--------------------delay 20 ms-----------------------
A51 MACRO ASSEMBLER  KB                                                                   01/17/2008 21:49:43 PAGE     2

0086                  57     DL20MS:
0086 7F64             58            MOV R7,#100
0088 7E64             59     D1:    MOV R6,#100
008A DEFE             60            DJNZ R6,$
008C DFFA             61            DJNZ R7,D1
008E 22               62            RET
                      63     ;-------------------------------------------------
                      64     END
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             ;------------------------------------------------------------------------
                             ;KEY_SCAN:
                             ;       MOV KEY_PORT,#0FH               ;置高4位为低电平,低四位为输入   
                             ;       MOV A,KEY_PORT                  ;保存键码
                             ;       CJNE A,#0FH,KEY1                ;有键按下就到KEY1
                             ;       JMP OUT 
                             ;KEY1:
                             ;       CALL DL20MS                     ;去抖
                             ;       MOV A,KEY_PORT                  ;再次读键码
                             ;       CJNE A,#0FH,KEY2                ;是否有键按下
                             ;       JMP OUT
                             ;KEY2:
                             ;       MOV KEY_PORT,#0F0H              ;置低四位为低电平,高四位为输入
                             ;       MOV B,KEY_PORT                  ;保存键码
                             ;KEY3:
                             ;       ORL A,B                         ;将两次的键码合并为1B的键码并放在A中
                             ;----------------------------查表-----------------------------------------
                             ;       MOV B,A                         ;保存键码于B中
                             ;       MOV DPTR,#TABLE                 ;取表首地址
                             ;       MOV R3,#00H                     ;存顺序码单元初始化 
                             ;KEY4: 
                             ;       MOV A,R3 
                             ;       MOVC A,@A+DPTR
                             ;       CJNE A,B,KEY5                   ;判键码,求顺序码 
                             ;       MOV A,R3                        ;若找到键码,存顺序码
                             ;        JMP OUT
                             ;KEY5:
                             ;       INC R3                          ;指向表的下一个
                             ;       CJNE R3,#16,KEY4                ;判断是否查完
                             ;OUT:   RET
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             ;-------------------------KEY_SCAN---------------------------
                             ;采用行送低电平,列设输入,读列值
                             ;列送低电平,行设为输入,读行值,
A51 MACRO ASSEMBLER  KB                                                                   01/17/2008 21:49:43 PAGE     3

                             ;最后得到按键对应唯一的代码,优点:可识别多键同时按下的情况
                             ;------------------------------------------------------------  
                             ;KB_PORT EQU P1 
                             ;KEY_CODE EQU 30H
                             ;
                             ;KEY_SCAN:
                             ;       MOV KEY_CODE,#0
                             ;       MOV KB_PORT,#0FH
                             ;       MOV A,KB_PORT
                             ;       ANL A,#0FH
                             ;       CJNE A,#0FH,SAV1                
                             ;       JMP OUT                 ;若无键按下,退出
                             ;SAV1:  MOV KEY_CODE,A          ;保存
                             ;
                             ;       CALL DELAY              ;去抖动
                             ;
                             ;       MOV KB_PORT,#0F0H
                             ;       MOV A,KB_PORT
                             ;       ANL A,#0F0H
                             ;       CJNE A,#0F0H,SAV2       ;若无键按下,退出
                             ;       JMP OUT
                             ;SAV2:
                             ;       ORL A,KEY_CODE          ;得到8位键盘码
                             ;       MOV KEY_CODE,A          ;保存8位键盘码
                             ;OUT:   RET
                             ;---------------------------------------------------------------
                             
A51 MACRO ASSEMBLER  KB                                                                   01/17/2008 21:49:43 PAGE     4

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

B. . . . . . . . .  D ADDR   00F0H   A   
D1 . . . . . . . .  C ADDR   0088H   A   
DL20MS . . . . . .  C ADDR   0086H   A   
KB_PORT. . . . . .  D ADDR   0090H   A   
KEY1 . . . . . . .  C ADDR   0062H   A   
KEY2 . . . . . . .  C ADDR   0069H   A   
KEY3 . . . . . . .  C ADDR   0071H   A   
KEY_SCAN . . . . .  C ADDR   004CH   A   
L1 . . . . . . . .  C ADDR   0046H   A   
LED_PORT . . . . .  D ADDR   00A0H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
START. . . . . . .  C ADDR   0040H   A   
TABLE. . . . . . .  C ADDR   0075H   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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