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

📄 keypad.lst

📁 用c语言编写的计算器的源代码
💻 LST
字号:
A51 MACRO ASSEMBLER  KEYPAD                                                               11/03/2000 12:22:31 PAGE     1


MACRO ASSEMBLER A51 V6.02
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     
                       2     
                       3     
                       4     
                       5     
                       6     
                       7     
                       8     NAME    KEYPAD
                       9     ; This routine will read a character press from the keypad and return it in R7.
                      10     
                      11     
                      12     ;Set up Segments for the Input Routine - No parameters.
                      13     ?PR?input?KEYPAD               SEGMENT CODE
                      14             PUBLIC  input
                      15     ?DT?input?KEYPAD               SEGMENT DATA
                      16     
----                  17     RSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine
                             .
                      18     
  00EF                19     KEY_ROW1        equ     0EFh
  00DF                20     KEY_ROW2        equ     0DFh
  00BF                21     KEY_ROW3        equ     0BFh
  007F                22     KEY_ROW4        equ     07Fh
                      23     
0000                  24     keyflags:       ds      16
                      25     
                      26     
                      27     
----                  28     RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
0000                  29     input:
                      30     
                      31     
                      32     
                      33     
0000 C083             34     keyscan:        push DPH
0002 C082             35                     push DPL
                      36                     
0004 7800     F       37                     mov R0,#keyflags                ; R0 addresses the key toggle bytes
0006 79EF             38                     mov R1,#KEY_ROW1                ; R1 address the keyboard row address
0008 7A04             39                     mov R2,#4                       ; R2 counts rows
000A 89A0             40     ksrow:          mov P2,R1                       ; Set row address to port P2
000C 00               41                     nop
000D E590             42                     mov A,P1                        ; Read column data from port P1
000F 7B04             43                     mov R3,#4                       ; R3 counts keys per row
0011 543F             44                     anl A,#3Fh
0013 13               45     ks0:            rrc A                           ; Move next bit into carry
0014 FC               46                     mov R4,A                        ; R4 preserves the row data
0015 4007             47                     jc ks1                          ; Jump if key not pressed
0017 E6               48                     mov A,@R0                       ; Test if key already pressed
0018 7601             49                     mov @R0,#1                      ; Flag pressed anyway
001A 6011             50                     jz ksnew                        ; Jump if key newly pressed
001C 8002             51                     jmp ks2
001E 7600             52     ks1:            mov @R0,#0                      ; Flag key as not pressed
0020 08               53     ks2:            inc R0                          ; Loop for next key in this row
0021 EC               54                     mov A,R4
0022 DBEF             55                     djnz R3,ks0
                      56     
0024 E9               57                     mov A,R1                        ; Jiggle R1 to address next row
A51 MACRO ASSEMBLER  KEYPAD                                                               11/03/2000 12:22:31 PAGE     2

0025 23               58                     rl A 
0026 F9               59                     mov R1,A
0027 DAE1             60                     djnz R2,ksrow
                      61     
0029 E4               62                     clr A                           
002A FF               63                     mov R7,A                        ; Return zero - no (new) key press.     
002B 8009             64                     jmp ksend
                      65     
                      66                                                     
002D 900000   F       67     ksnew:          mov DPTR,#keycodes              ; We've found a new key since last time:
0030 E8               68                     mov A,R0                        ; The key flag address (ordinal) is in R0
0031 C3               69                     clr C
0032 9400     F       70                     subb A,#keyflags
0034 93               71                     movc A,@A+DPTR
0035 FF               72                     mov R7,A                        ; Move the Key into R7 to be returned.
0036 75A0FF           73     ksend:          mov P2,#0FFh
0039 D082             74                     pop DPL
003B D083             75                     pop DPH
003D 22               76                     ret
                      77     
                      78     ;Data tables for returned row bits
003E 3738392F         79     keycodes:       db      '7','8','9', '/'
0042 3435362A         80                     db      '4','5','6', '*'
0046 3132332D         81                     db      '1','2','3', '-'
004A 43303D2B         82                     db      'C','0','=', '+'
                      83     
                      84                     END
A51 MACRO ASSEMBLER  KEYPAD                                                               11/03/2000 12:22:31 PAGE     3

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


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

?DT?INPUT?KEYPAD .  D SEG    0010H       REL=UNIT
?PR?INPUT?KEYPAD .  C SEG    004EH       REL=UNIT
DPH. . . . . . . .  D ADDR   0083H   A   
DPL. . . . . . . .  D ADDR   0082H   A   
INPUT. . . . . . .  C ADDR   0000H   R   SEG=?PR?INPUT?KEYPAD
KEYCODES . . . . .  C ADDR   003EH   R   SEG=?PR?INPUT?KEYPAD
KEYFLAGS . . . . .  D ADDR   0000H   R   SEG=?DT?INPUT?KEYPAD
KEYPAD . . . . . .  N NUMB   -----       
KEYSCAN. . . . . .  C ADDR   0000H   R   SEG=?PR?INPUT?KEYPAD
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   0013H   R   SEG=?PR?INPUT?KEYPAD
KS1. . . . . . . .  C ADDR   001EH   R   SEG=?PR?INPUT?KEYPAD
KS2. . . . . . . .  C ADDR   0020H   R   SEG=?PR?INPUT?KEYPAD
KSEND. . . . . . .  C ADDR   0036H   R   SEG=?PR?INPUT?KEYPAD
KSNEW. . . . . . .  C ADDR   002DH   R   SEG=?PR?INPUT?KEYPAD
KSROW. . . . . . .  C ADDR   000AH   R   SEG=?PR?INPUT?KEYPAD
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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