📄 ex3-2.lst
字号:
A51 MACRO ASSEMBLER EX3_2 06/23/2007 16:58:09 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ex3-2.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ex3-2.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;--------------程序信息-----------------
2 ;文件名 : ex3-2.asm
3 ;版本 : 1.0
4 ;作者 :
5 ;修改时间 :
6
7 ;--------------程序说明------------------
8 ;CHAP 3.2 行列式键盘输入实例
9
10 ;-----------常量和变量声明---------------
0090 11 KEYIN EQU P1; 定义宏变量,易于硬件连线更改时,程序的修改
12
13 ;--------------预定义--------------------
14
0000 15 ORG 0000H
0000 020003 16 LJMP START
17
18 ;------------中断入口地址分配------------
19 ;ORG 0003H
20 ;LJMP INT0PRG
21 ;ORG 000BH
22 ;LJMP INT1PRG
23 ;ORG 0013H;
24 ;LJMP
25 ;ORG 0030H
26
0003 27 START:
0003 758160 28 MOV SP,#60H; 初始化堆栈指针
0006 7AFF 29 MOV R2,#0FFH;
30
31 ;--------------初始化子程序--------------
0008 856081 32 MOV SP,60H;
33 ;--------------主程序--------------------
000B 34 MAIN:
000B 120016 35 LCALL KEYBOARD; 按键识别子程序
000E 1200A5 36 LCALL KEYEXE; 按键执行子程序
0011 80F8 37 JMP MAIN
38
39
0013 02000B 40 LJMP MAIN
41
42
43 ;----------------子程序------------------
44
45
46 ;---------------------------------
47 ; 行列式键盘子程序部分
48 ;---------------------------------
0016 49 KEYBOARD:
0016 7800 50 MOV R0,#00H; r0寄存器保存键值,初始化清零
0018 75900F 51 ROW: MOV KEYIN,#0FH; 线反转法识别键盘的值,具体在下一节论述
001B 30900B 52 ROW00: JNB KEYIN.0,ROW0;
001E 309112 53 ROW01: JNB KEYIN.1,ROW1;
0021 309219 54 ROW02: JNB KEYIN.2,ROW2;
0024 309320 55 ROW03: JNB KEYIN.3,ROW3;
0027 80ED 56 JMP KEYBOARD;
0029 1200E4 57 ROW0: LCALL delay10ms;
002C 2090EF 58 JB KEYIN.0,ROW01;
A51 MACRO ASSEMBLER EX3_2 06/23/2007 16:58:09 PAGE 2
002F 7800 59 MOV R0,#00H;
0031 801E 60 JMP COL;
0033 1200E4 61 ROW1: LCALL delay10ms;
0036 2091E8 62 JB KEYIN.1,ROW02;
0039 7801 63 MOV R0,#01H;
003B 8014 64 JMP COL;
003D 1200E4 65 ROW2: LCALL delay10ms;
0040 2092E1 66 JB KEYIN.2,ROW03;
0043 7802 67 MOV R0,#02H;
0045 800A 68 JMP COL;
0047 1200E4 69 ROW3: LCALL delay10ms;
004A 2093CB 70 JB KEYIN.3,ROW;
004D 7803 71 MOV R0,#03H;
004F 8000 72 JMP COL;
73
0051 75900F 74 COL: MOV KEYIN,#0FH;
0054 30900B 75 COL00: JNB KEYIN.0, COL0;
0057 309113 76 COL01: JNB KEYIN.1, COL1;
005A 30921B 77 COL02: JNB KEYIN.2, COL2;
005D 309323 78 COL03: JNB KEYIN.3, COL3;
0060 80B4 79 JMP KEYBOARD;
0062 11E4 80 COL0: CALL delay10ms;
0064 2094F0 81 JB KEYIN.4,COL01;
0067 7400 82 MOV A,#00H;
0069 48 83 ORL A,R0;
006A F8 84 MOV R0,A;
006B 802A 85 JMP KEY;
006D 11E4 86 COL1: CALL delay10ms;
006F 2095E8 87 JB KEYIN.5,COL02;
0072 7410 88 MOV A,#10H;
0074 48 89 ORL A,R0;
0075 F8 90 MOV R0,A;
0076 801F 91 JMP KEY;
0078 11E4 92 COL2: CALL delay10ms;
007A 2096E0 93 JB KEYIN.6,COL03;
007D 7420 94 MOV A,#20H;
007F 48 95 ORL A,R0;
0080 F8 96 MOV R0,A;
0081 8014 97 JMP KEY;
0083 11E4 98 COL3: CALL delay10ms;
0085 2097CC 99 JB KEYIN.7,COL00;
0088 7430 100 MOV A,#30H;
008A 48 101 ORL A,R0;
008B F8 102 MOV R0,A;
008C 8009 103 JMP KEY;
104
008E 2094C6 105 JB KEYIN.4,COL01;
0091 7400 106 MOV A,#00H;
0093 48 107 ORL A,R0;
0094 F8 108 MOV R0,A
0095 8000 109 JMP KEY;
110
0097 E8 111 KEY: MOV A,R0; 将读到的行列信息转化成键值。
0098 C4 112 SWAP A; R0的高位是行号,低位是列号
0099 540F 113 ANL A,#0FH; 则 键值=R0的高位×8+R0的低位
009B 23 114 RL A;
009C 23 115 RL A;
009D 28 116 ADD A,R0;
009E 540F 117 ANL A,#0FH;
00A0 F8 118 MOV R0,A; 把得到的键值存在R0中。
00A1 7590FF 119 MOV KEYIN,#0FFH;
00A4 120 KEYBOARDEND:
00A4 22 121 RET;
122
00A5 9000F1 123 KEYEXE: MOV DPTR,#KEYVA ;按键执行子程序
00A8 E8 124 MOV A,R0; 读出R0的键值对应的键值表内容
A51 MACRO ASSEMBLER EX3_2 06/23/2007 16:58:09 PAGE 3
00A9 93 125 MOVC A,@A+DPTR;
00AA F8 126 MOV R0,A;
00AB B80104 127 KEY1: CJNE R0,#01H,KEY2; 判断是否是key1
00AE B2A1 128 CPL P2.1; 是,则改变其亮灭状态。
00B0 8031 129 JMP KEYEND; 调转到子程序尾。
00B2 B80204 130 KEY2: CJNE R0,#02H,KEY3;
00B5 B2A2 131 CPL P2.2
00B7 802A 132 JMP KEYEND;
00B9 B80404 133 KEY3: CJNE R0,#04H,KEY4;
00BC B2A3 134 CPL P2.3
00BE 8023 135 JMP KEYEND;
00C0 B80804 136 KEY4: CJNE R0,#08H,KEY5;
00C3 B2A4 137 CPL P2.4
00C5 801C 138 JMP KEYEND;
00C7 B81004 139 KEY5: CJNE R0,#10H,KEY6;
00CA B2A5 140 CPL P2.5
00CC 8015 141 JMP KEYEND;
00CE B82004 142 KEY6: CJNE R0,#20H,KEY7;
00D1 B2A6 143 CPL P2.6
00D3 800E 144 JMP KEYEND;
00D5 B84004 145 KEY7: CJNE R0,#40H,KEY8;
00D8 B2A7 146 CPL P2.7
00DA 8007 147 JMP KEYEND;
00DC B88004 148 KEY8: CJNE R0,#80H,KEYEND;
00DF B2A0 149 CPL P2.0
00E1 8000 150 JMP KEYEND;
151
00E3 22 152 KEYEND: RET;
153
154
155 ;--------------中断子程序----------------
156
157 ;---------------延时子程序---------------
158
00E4 7D04 159 Delay10ms: MOV R5,#04H;
00E6 7EF4 160 DELAY20: MOV R6,#00F4H;
00E8 7F33 161 DELAY21: MOV R7,#033H;
00EA DFFE 162 DELAY22: DJNZ R7,DELAY22;
00EC DEFA 163 DJNZ R6,DELAY21;
00EE DDF6 164 DJNZ R5,DELAY20;
00F0 22 165 RET;
166
00F1 01020304 167 KEYVA: DB 01H,02H,03H,04H; 键值列表,可改动键值调整相应的键值安排
00F5 05060708 168 DB 05H,06H,07H,08H
00F9 09000A0B 169 DB 09H,00H,0AH,0BH
00FD 0C0D0E0F 170 DB 0CH,0DH,0EH,0FH
171
172 END
;---------------注意事项-----------------
A51 MACRO ASSEMBLER EX3_2 06/23/2007 16:58:09 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
COL. . . . . . . . C ADDR 0051H A
COL0 . . . . . . . C ADDR 0062H A
COL00. . . . . . . C ADDR 0054H A
COL01. . . . . . . C ADDR 0057H A
COL02. . . . . . . C ADDR 005AH A
COL03. . . . . . . C ADDR 005DH A
COL1 . . . . . . . C ADDR 006DH A
COL2 . . . . . . . C ADDR 0078H A
COL3 . . . . . . . C ADDR 0083H A
DELAY10MS. . . . . C ADDR 00E4H A
DELAY20. . . . . . C ADDR 00E6H A
DELAY21. . . . . . C ADDR 00E8H A
DELAY22. . . . . . C ADDR 00EAH A
KEY. . . . . . . . C ADDR 0097H A
KEY1 . . . . . . . C ADDR 00ABH A
KEY2 . . . . . . . C ADDR 00B2H A
KEY3 . . . . . . . C ADDR 00B9H A
KEY4 . . . . . . . C ADDR 00C0H A
KEY5 . . . . . . . C ADDR 00C7H A
KEY6 . . . . . . . C ADDR 00CEH A
KEY7 . . . . . . . C ADDR 00D5H A
KEY8 . . . . . . . C ADDR 00DCH A
KEYBOARD . . . . . C ADDR 0016H A
KEYBOARDEND. . . . C ADDR 00A4H A
KEYEND . . . . . . C ADDR 00E3H A
KEYEXE . . . . . . C ADDR 00A5H A
KEYIN. . . . . . . D ADDR 0090H A
KEYVA. . . . . . . C ADDR 00F1H A
MAIN . . . . . . . C ADDR 000BH A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
ROW. . . . . . . . C ADDR 0018H A
ROW0 . . . . . . . C ADDR 0029H A
ROW00. . . . . . . C ADDR 001BH A
ROW01. . . . . . . C ADDR 001EH A
ROW02. . . . . . . C ADDR 0021H A
ROW03. . . . . . . C ADDR 0024H A
ROW1 . . . . . . . C ADDR 0033H A
ROW2 . . . . . . . C ADDR 003DH A
ROW3 . . . . . . . C ADDR 0047H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0003H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -