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

📄 keypad.lst

📁 AT89C51开发例程 protues仿真 keil编程
💻 LST
字号:
A51 MACRO ASSEMBLER  KEYPAD                                                               10/23/2007 20:46:11 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN keypad.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE keypad.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     NAME    KEYPAD
                       2     
                       3     ?PR?input?KEYPAD               SEGMENT CODE
                       4             PUBLIC input
                       5             PUBLIC init
                       6     ?DT?input?KEYPAD               SEGMENT DATA
                       7     
----                   8     RSEG  ?DT?input?KEYPAD
  00F7                 9     KEY_ROW0        equ     0F7h
  00EF                10     KEY_ROW1        equ     0EFh
  00DF                11     KEY_ROW2        equ     0DFh
  00BF                12     KEY_ROW3        equ     0BFh
  007F                13     KEY_ROW4        equ     07Fh
                      14     
                      15     
0000                  16     keyflags:       ds      20
                      17     
----                  18     RSEG  ?PR?input?KEYPAD
0000                  19     init:
0000 5389F0           20             ANL TMOD,#0F0H
0003 438901           21             ORL TMOD,#01H
0006 758CFF           22             MOV TH0,#0FFH
0009 758AFF           23             MOV TL0,#0FFH
000C D2AF             24             SETB EA
000E D2A9             25             SETB ET0
0010 D28C             26             SETB TR0
0012 22               27             RET
                      28     
0013                  29     input:
                      30     
0013                  31     keyscan:
0013 C083             32                     push DPH
0015 C082             33                     push DPL
                      34                     
0017 7800     F       35                     mov R0,#keyflags                ; R0 addresses the key toggle bytes
0019 79F7             36                     mov R1,#KEY_ROW0                ; R1 address the keyboard row address
001B 7A05             37                     mov R2,#5                       ; R2 counts rows
001D                  38     ksrow:
001D 89B0             39                     mov P3,R1                       ; Set row address to port P3
001F 00               40                     nop
0020 E590             41                     mov A,P1                        ; Read column data from port P1
0022 7B04             42                     mov R3,#4                       ; R3 counts keys per row
0024 543F             43                     anl A,#3Fh
0026 13               44     ks0:            rrc A                           ; Move next bit into carry
0027 FC               45                     mov R4,A                        ; R4 preserves the row data
0028 4007             46                     jc ks1                          ; Jump if key not pressed
002A E6               47                     mov A,@R0                       ; Test if key already pressed
002B 7601             48                     mov @R0,#1                      ; Flag pressed anyway
002D 6011             49                     jz ksnew                        ; Jump if key newly pressed
002F 8002             50                     jmp ks2
0031                  51     ks1:
0031 7600             52                     mov @R0,#0                      ; Flag key as not pressed
0033                  53     ks2:
0033 08               54                     inc R0                          ; Loop for next key in this row
0034 EC               55                     mov A,R4
0035 DBEF             56                     djnz R3,ks0
                      57     
0037 E9               58                     mov A,R1                        ; Jiggle R1 to address next row
A51 MACRO ASSEMBLER  KEYPAD                                                               10/23/2007 20:46:11 PAGE     2

0038 23               59                     rl A 
0039 F9               60                     mov R1,A
003A DAE1             61                     djnz R2,ksrow
                      62     
003C E4               63                     clr A                           
003D FF               64                     mov R7,A                        ; Return zero - no (new) key press.     
003E 8009             65                     jmp ksend
                      66     
                      67                                                     
0040 900000   F       68     ksnew:          mov DPTR,#keycodes              ; We've found a new key since last time:
0043 E8               69                     mov A,R0                        ; The key flag address (ordinal) is in R0
0044 C3               70                     clr C
0045 9400     F       71                     subb A,#keyflags
0047 93               72                     movc A,@A+DPTR
0048 FF               73                     mov R7,A                        ;返回值放入R7.
0049 75B0FF           74     ksend:          mov P3,#0FFh
004C D082             75                     pop DPL
004E D083             76                     pop DPH
0050 22               77                     ret
                      78     
                      79     ;Data tables for returned row bits
0051                  80     keycodes:
0051 53090807         81                     db  'S',09h,08h,07h
0055 0708092F         82                     db      07h,08h,09h, '/'
0059 0405062A         83                     db      04h,05h,06h, '*'
005D 0102032D         84                     db      01h,02h,03h, '-'
0061 43303D2B         85                     db      'C','0','=', '+'
                      86     
                      87     
                      88                     END
A51 MACRO ASSEMBLER  KEYPAD                                                               10/23/2007 20:46:11 PAGE     3

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


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

?DT?INPUT?KEYPAD .  D SEG    0014H       REL=UNIT
?PR?INPUT?KEYPAD .  C SEG    0065H       REL=UNIT
DPH. . . . . . . .  D ADDR   0083H   A   
DPL. . . . . . . .  D ADDR   0082H   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
ET0. . . . . . . .  B ADDR   00A8H.1 A   
INIT . . . . . . .  C ADDR   0000H   R   SEG=?PR?INPUT?KEYPAD
INPUT. . . . . . .  C ADDR   0013H   R   SEG=?PR?INPUT?KEYPAD
KEYCODES . . . . .  C ADDR   0051H   R   SEG=?PR?INPUT?KEYPAD
KEYFLAGS . . . . .  D ADDR   0000H   R   SEG=?DT?INPUT?KEYPAD
KEYPAD . . . . . .  N NUMB   -----       
KEYSCAN. . . . . .  C ADDR   0013H   R   SEG=?PR?INPUT?KEYPAD
KEY_ROW0 . . . . .  N NUMB   00F7H   A   
KEY_ROW1 . . . . .  N NUMB   00EFH   A   
KEY_ROW2 . . . . .  N NUMB   00DFH   A   
KEY_ROW3 . . . . .  N NUMB   00BFH   A   
KEY_ROW4 . . . . .  N NUMB   007FH   A   
KS0. . . . . . . .  C ADDR   0026H   R   SEG=?PR?INPUT?KEYPAD
KS1. . . . . . . .  C ADDR   0031H   R   SEG=?PR?INPUT?KEYPAD
KS2. . . . . . . .  C ADDR   0033H   R   SEG=?PR?INPUT?KEYPAD
KSEND. . . . . . .  C ADDR   0049H   R   SEG=?PR?INPUT?KEYPAD
KSNEW. . . . . . .  C ADDR   0040H   R   SEG=?PR?INPUT?KEYPAD
KSROW. . . . . . .  C ADDR   001DH   R   SEG=?PR?INPUT?KEYPAD
P1 . . . . . . . .  D ADDR   0090H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
TH0. . . . . . . .  D ADDR   008CH   A   
TL0. . . . . . . .  D ADDR   008AH   A   
TMOD . . . . . . .  D ADDR   0089H   A   
TR0. . . . . . . .  B ADDR   0088H.4 A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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