📄 scankey11.lst
字号:
A51 MACRO ASSEMBLER SCANKEY11 04/27/2007 10:36:29 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN ScanKey11.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\C51\C51\BIN\A51.EXE ScanKey11.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 000H
0000 021008 2 LJMP KEY
1000 3 ORG 1000H
4 ;------------检测是否有键按下------------------
1000 75A00F 5 IsKeyDown: MOV P2, #0FH ;P2.4~P2.7输出全为0
1003 E5A0 6 MOV A, P2
1005 540F 7 ANL A, #0FH ;读取P2.0~P2.3状态
1007 22 8 RET
9 ;---------------程序开始----------
1008 10 KEY: ;MOV SP, #50H
1008 1100 11 ACALL IsKeyDown ;
100A B40F04 12 CJNE A, #0FH, LK ;P2.0~P2.3不是全"1"时,有键闭合,转LK
100D 115B 13 N1: ACALL DELAY ;延时6ms
100F 0108 14 AJMP KEY ;
1011 115B 15 LK: ACALL DELAY
1013 115B 16 ACALL DELAY ;延时12ms去抖动
1015 1100 17 ACALL IsKeyDown ; 再次检查键是否闭合
1017 B40F04 18 CJNE A, #0FH, SCAN ; 键再闭合,转SCAN扫描键盘
101A 115B 19 ACALL DELAY
101C 0108 20 AJMP KEY ;无键闭合时 转KEY
21 ;--------------扫描键盘-----------------
101E 7800 22 SCAN: MOV R0, #00H ;扫描行号送R0
1020 79EF 23 MOV R1, #0EFH ;扫描初值送R1(第一行)
1022 7B04 24 MOV R3, #4H ; 行扫描计数
1024 E9 25 ROW: MOV A, R1 ;
1025 F5A0 26 MOV P2, A
1027 E5A0 27 MOV A, P2
1029 20E004 28 JB ACC.0, LINE2 ;P2.0=1时第一列无键闭合,转第二列
102C 7A00 29 MOV R2, #00H ;列号送R2
102E 0145 30 AJMP CALKEY ;转CALKEY, 计算键号
1030 20E104 31 LINE2: JB ACC.1, LINE3 ;
1033 7A01 32 MOV R2, #1H ;列号送R2
1035 0145 33 AJMP CALKEY
1037 20E204 34 LINE3: JB ACC.2, LINE4 ;
103A 7A02 35 MOV R2, #2H ;列号送R2
103C 0145 36 AJMP CALKEY
103E 20E30E 37 LINE4: JB ACC.3, NEXTROW ;
1041 7A03 38 MOV R2, #3H ;列号送R2
1043 0145 39 AJMP CALKEY
1045 88F0 40 CALKEY: MOV B, R0 ;键号=4*行号+列号
1047 7404 41 MOV A, #04H
1049 A4 42 MUL AB
104A 2A 43 ADD A, R2
44 ;PUSH ACC ;保存键号
104B 1167 45 ACALL KEYPROC ;只考虑最先按下的键,调用处理程序
104D 0108 46 AJMP KEY
104F 47 NEXTROW: ;DEC R3 ;扫描完一行后,计数减一
104F DB02 48 DJNZ R3, NEXT ;没有扫描完,转NEXT继续扫描
1051 0108 49 AJMP KEY ; 扫描完4行后,转KEY
1053 08 50 NEXT: INC R0 ;扫描行号加1
1054 E9 51 MOV A, R1 ;将上一次的扫描初值送A
1055 F4 52 CPL A ;A取反
1056 23 53 RL A ;
1057 F4 54 CPL A ;
1058 F9 55 MOV R1, A ;新一行的扫描初值送R1
1059 0124 56 AJMP ROW ;
57 ;----------------延时子程序--------------
105B 7E06 58 DELAY: MOV R6, #6H
A51 MACRO ASSEMBLER SCANKEY11 04/27/2007 10:36:29 PAGE 2
105D 7FC8 59 LOOP1: MOV R7, #0C8H ;200次
105F 00 60 LOOP2: NOP
1060 00 61 NOP
1061 00 62 NOP
1062 DFFB 63 DJNZ R7, LOOP2 ; 内循环200*5=1ms
1064 DEF7 64 DJNZ R6, LOOP1 ; 共延时6ms
1066 22 65 RET
66
67 ;----------------键盘处理程序,用于LED的显示-------------
1067 901079 68 KEYPROC: MOV DPTR, #TABLE ;指向表首地址
69 ;POP ACC ;取出键号
106A 93 70 MOVC A, @A+DPTR ;取出LED段选码
106B 754008 71 MOV 40H, #8H ;计数
106E 33 72 RLOOP: RLC A ;带进位循环左移
106F C280 73 CLR P0.0 ;
1071 9281 74 MOV P0.1, C ;将进位输进P0.1
1073 B280 75 CPL P0.0 ;完成一位读取数据
1075 D540F6 76 DJNZ 40H, RLOOP ;8位数据是否读完,
1078 22 77 RET
78
1079 3F 79 TABLE: DB 3FH
107A 06 80 DB 06H
107B 5B 81 DB 5BH
107C 4F 82 DB 4FH
107D 66 83 DB 66H
107E 6D 84 DB 6DH
107F 7D 85 DB 7DH
1080 07 86 DB 07H
1081 7F 87 DB 7FH
1082 6F 88 DB 6FH
1083 77 89 DB 77H
1084 7C 90 DB 7CH
1085 39 91 DB 39H
1086 5E 92 DB 5EH
1087 79 93 DB 79H
1088 71 94 DB 71H
95
96 END
A51 MACRO ASSEMBLER SCANKEY11 04/27/2007 10:36:29 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
CALKEY . . . . . . C ADDR 1045H A
DELAY. . . . . . . C ADDR 105BH A
ISKEYDOWN. . . . . C ADDR 1000H A
KEY. . . . . . . . C ADDR 1008H A
KEYPROC. . . . . . C ADDR 1067H A
LINE2. . . . . . . C ADDR 1030H A
LINE3. . . . . . . C ADDR 1037H A
LINE4. . . . . . . C ADDR 103EH A
LK . . . . . . . . C ADDR 1011H A
LOOP1. . . . . . . C ADDR 105DH A
LOOP2. . . . . . . C ADDR 105FH A
N1 . . . . . . . . C ADDR 100DH A
NEXT . . . . . . . C ADDR 1053H A
NEXTROW. . . . . . C ADDR 104FH A
P0 . . . . . . . . D ADDR 0080H A
P2 . . . . . . . . D ADDR 00A0H A
RLOOP. . . . . . . C ADDR 106EH A
ROW. . . . . . . . C ADDR 1024H A
SCAN . . . . . . . C ADDR 101EH A
TABLE. . . . . . . C ADDR 1079H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -