📄 键盘.lst
字号:
A51 MACRO ASSEMBLER 键臺 05/16/2008 16:41:39 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN 键盘.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\KeiL\C51\BIN\A51.EXE 键盘.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H
0000 8000 2 JMP MAIN
3
4
0002 75814F 5 MAIN: MOV SP,#4FH
0005 7580FF 6 MOV P0,#0FFH
0008 7590FF 7 MOV P1,#0FFH
000B 75A0FF 8 MOV P2,#0FFH
000E 754000 9 MOV 40H,#00H
0011 754100 10 MOV 41H,#00H
0014 754200 11 MOV 42H,#00H
0017 754300 12 MOV 43H,#00H
001A 754400 13 MOV 44H,#00H
001D 754500 14 MOV 45H,#00H
0020 754600 15 MOV 46H,#00H
0023 754700 16 MOV 47H,#00H
17
0026 18 KEY_SCAN1: ;识别键盘有无键按下子程序
19
0026 75A0F0 20 MOV P2,#0F0H ;置列线为0,行线为1
21
0029 E5A0 22 MOV A,P2 ;读P2口
002B 54F0 23 ANL A,#0F0H ;取出高四位
002D F5F0 24 MOV B,A ;暂存到B
002F 75A00F 25 MOV P2,#0FH ;置列线为1,行线为0
26
0032 E5A0 27 MOV A,P2 ;读P2口
0034 540F 28 ANL A,#0FH ;取出低四位
0036 45F0 29 ORL A,B ;高四位与低四位逻辑或运算重新组合
0038 B4FF02 30 CJNE A,#0FFH,KEY_IN1_1 ;0FFH为无按键按下
003B 80E9 31 JMP KEY_SCAN1
32
003D 33 KEY_IN1_1: ;识别具体按键值子程序
003D F5F0 34 MOV B,A ;将按键的特征编码暂存于B
003F 90017A 35 MOV DPTR,#KEY_TABLE
0042 7BFF 36 MOV R3,#0FFH
0044 37 KEY_IN1_2:
0044 0B 38 INC R3 ;顺序码加1
0045 EB 39 MOV A,R3
0046 93 40 MOVC A,@A+DPTR ;查表
0047 B5F010 41 CJNE A,B,KEY_IN1_3 ;比较,若相同则找到按键的特征编码。
004A EB 42 MOV A,R3 ;找到特征编码后,取顺序码
43
004B F543 44 MOV 43H,A ;存入43H单元
004D 11EA 45 CALL DISPLAYKEY_1
004F 854342 46 MOV 42H,43H
0052 75430A 47 MOV 43H,#0AH
48
0055 BB0A07 49 CJNE R3,#10,KEY_SCAN2 ;输入是否结束
0058 01E4 50 JMP EXIT
005A 51 KEY_IN1_3:
005A B400E7 52 CJNE A,#00H,KEY_IN1_2 ;末完,继续查
53 ;CALL KEY_PLAER1
005D 80C7 54 JMP KEY_SCAN1 ;00H为结束码
55
005F 56 KEY_SCAN2: ;识别键盘有无键按下子程序
57
58
A51 MACRO ASSEMBLER 键臺 05/16/2008 16:41:39 PAGE 2
005F 75A0F0 59 MOV P2,#0F0H ;置列线为0,行线为1
60
0062 E5A0 61 MOV A,P2 ;读P2口
0064 54F0 62 ANL A,#0F0H ;取出高四位
0066 F5F0 63 MOV B,A ;暂存到B
0068 75A00F 64 MOV P2,#0FH ;置列线为1,行线为0
65
006B E5A0 66 MOV A,P2 ;读P2口
006D 540F 67 ANL A,#0FH ;取出低四位
006F 45F0 68 ORL A,B ;高四位与低四位逻辑或运算重新组合
0071 B4FF02 69 CJNE A,#0FFH,KEY_IN2_1 ;0FFH为无按键按下
0074 80E9 70 JMP KEY_SCAN2
71
0076 72 KEY_IN2_1: ;识别具体按键值子程序
0076 F5F0 73 MOV B,A ;将按键的特征编码暂存于B
0078 90017A 74 MOV DPTR,#KEY_TABLE
007B 7BFF 75 MOV R3,#0FFH
007D 76 KEY_IN2_2:
007D 0B 77 INC R3 ;顺序码加1
007E EB 78 MOV A,R3
007F 93 79 MOVC A,@A+DPTR ;查表
0080 B5F01E 80 CJNE A,B,KEY_IN2_3 ;比较,若相同则找到按键的特征编码。
0083 EB 81 MOV A,R3 ;找到特征编码后,取顺序码
82
0084 F543 83 MOV 43H,A ;存入43H单元
84
85
0086 BB0A0B 86 CJNE R3,#10,OUT2 ;输入是否结束
0089 854243 87 MOV 43H,42H
008C 75420A 88 MOV 42H,#0AH
008F 75410A 89 MOV 41H,#0AH
0092 8050 90 JMP EXIT
91
0094 92 OUT2:
0094 11EA 93 CALL DISPLAYKEY_1
0096 854241 94 MOV 41H,42H
0099 854342 95 MOV 42H,43H
009C 75430A 96 MOV 43H,#0AH
97
009F 8005 98 JMP KEY_SCAN3
99
100
101
00A1 102 KEY_IN2_3:
00A1 B400D9 103 CJNE A,#00H,KEY_IN2_2 ;末完,继续查
104 ;CALL KEY_PLAER1
00A4 80B9 105 JMP KEY_SCAN2 ;00H为结束码
106
00A6 107 KEY_SCAN3: ;识别键盘有无键按下子程序
108
109
00A6 75A0F0 110 MOV P2,#0F0H ;置列线为0,行线为1
111
00A9 E5A0 112 MOV A,P2 ;读P2口
00AB 54F0 113 ANL A,#0F0H ;取出高四位
00AD F5F0 114 MOV B,A ;暂存到B
00AF 75A00F 115 MOV P2,#0FH ;置列线为1,行线为0
116
00B2 E5A0 117 MOV A,P2 ;读P2口
00B4 540F 118 ANL A,#0FH ;取出低四位
00B6 45F0 119 ORL A,B ;高四位与低四位逻辑或运算重新组合
00B8 B4FF02 120 CJNE A,#0FFH,KEY_IN3_1 ;0FFH为无按键按下
00BB 80E9 121 JMP KEY_SCAN3
122
00BD 123 KEY_IN3_1: ;识别具体按键值子程序
00BD F5F0 124 MOV B,A ;将按键的特征编码暂存于B
A51 MACRO ASSEMBLER 键臺 05/16/2008 16:41:39 PAGE 3
00BF 90017A 125 MOV DPTR,#KEY_TABLE
00C2 7BFF 126 MOV R3,#0FFH
00C4 127 KEY_IN3_2:
00C4 0B 128 INC R3 ;顺序码加1
00C5 EB 129 MOV A,R3
00C6 93 130 MOVC A,@A+DPTR ;查表
00C7 B5F015 131 CJNE A,B,KEY_IN3_3 ;比较,若相同则找到按键的特征编码。
00CA EB 132 MOV A,R3 ;找到特征编码后,取顺序码
133
00CB F543 134 MOV 43H,A ;存入43H单元
135
136
00CD BB0A0B 137 CJNE R3,#10,OUT3 ;输入是否结束
138
00D0 854243 139 MOV 43H,42H
00D3 854142 140 MOV 42H,41H
00D6 75410A 141 MOV 41H,#0AH
00D9 8009 142 JMP EXIT
143
00DB 11EA 144 OUT3: CALL DISPLAYKEY_1
145
00DD 8005 146 JMP EXIT
147
00DF 148 KEY_IN3_3:
00DF B400E2 149 CJNE A,#00H,KEY_IN3_2 ;末完,继续查
150 ;CALL KEY_PLAER1
00E2 80C2 151 JMP KEY_SCAN3 ;00H为结束码
152
00E4 153 EXIT:
00E4 00 154 NOP
00E5 00 155 NOP
00E6 310D 156 LOOP: CALL DISPLAYKEY_2
00E8 80FC 157 JMP LOOP
158
159
160
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -