?? keypad.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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -