📄 1.lst
字号:
A51 MACRO ASSEMBLER 1 02/22/2008 18:59:20 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 1.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 1.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0000 1 ORG 0000H ; ;初始化
0000 020030 2 LJMP MAIN ; ;跳到主程序
0003 3 ORG 0003H ; ;外部中断0入口地址
0003 0200FB 4 LJMP LOOP
0013 5 ORG 0013H ; ;外部中断1入口地址
0013 0201A7 6 LJMP LOOP1
0030 7 ORG 0030H ; ;主程序从0030H开始
0030 8 MAIN:
0030 75A885 9 MOV IE,#85H ; ;开中断
0033 758805 10 MOV TCON,#05H ; ;设计边沿触发方?
0036 7E00 11 MOV R6,#00H
0038 7F00 12 MOV R7,#00H
003A C2B4 13 CLR P3.4
003C C2B5 14 CLR P3.5
003E C294 15 CLR P1.4
0040 7D00 16 MOV R5,#00H ; ;选择第一列亮
0042 17 SCAN:
0042 8D90 18 MOV P1,R5
0044 7401 19 MOV A,#01H
0046 F580 20 MOV P0,A
0048 21 Q0:
0048 1200E9 22 LCALL DELAY
004B 23 23 RL A ; ;P0口从低位亮到高位
004C F580 24 MOV P0,A
004E B480F7 25 CJNE A,#80H,Q0
0051 F5A0 26 MOV P2,A
0053 27 Q1:
0053 1200E9 28 LCALL DELAY
0056 03 29 RR A ; ;P2口从高位亮到低位
0057 F5A0 30 MOV P2,A
0059 B401F7 31 CJNE A,#01H,Q1
005C 32 Q2:
005C 23 33 RL A ; ;P2口从低位亮到高位
005D F5A0 34 MOV P2,A
005F 1200E9 35 LCALL DELAY
0062 B480F7 36 CJNE A,#80H,Q2
0065 F580 37 MOV P0,A
0067 38 Q3:
0067 1200E9 39 LCALL DELAY
006A 03 40 RR A ; ;P0口从高位亮到低位
006B F580 41 MOV P0,A
006D B401F7 42 CJNE A,#01H,Q3
0070 F580 43 MOV P0,A
0072 F5A0 44 MOV P2,A
0074 45 Q4:
0074 1200E9 46 LCALL DELAY
0077 23 47 RL A ; ;P2、P0口从低位亮到高位
0078 F580 48 MOV P0,A
007A F5A0 49 MOV P2,A
007C 1200E9 50 LCALL DELAY
007F B480F2 51 CJNE A,#80H,Q4
0082 52 Q5:
0082 03 53 RR A ; ;P0、P2口从高位亮到低位
0083 F580 54 MOV P0,A
0085 F5A0 55 MOV P2,A
0087 1200E9 56 LCALL DELAY
008A B401F5 57 CJNE A,#01H,Q5
008D 7580FF 58 MOV P0,#0FFH ; ;P0、P2口交叉亮
A51 MACRO ASSEMBLER 1 02/22/2008 18:59:20 PAGE 2
0090 75A000 59 MOV P2,#00H
0093 1200E9 60 LCALL DELAY
0096 758000 61 MOV P0,#00H
0099 75A0FF 62 MOV P2,#0FFH
009C 1200E9 63 LCALL DELAY
009F 7401 64 MOV A,#01H
00A1 F580 65 MOV P0,A
00A3 1200E9 66 LCALL DELAY
00A6 1200E9 67 LCALL DELAY
00A9 F5A0 68 MOV P2,A
00AB 1200E9 69 LCALL DELAY
00AE 1200E9 70 LCALL DELAY
00B1 71 Q6:
00B1 23 72 RL A ; ;P0、P2口交叉从低位亮到高位
00B2 F580 73 MOV P0,A
00B4 1200E9 74 LCALL DELAY
00B7 1200E9 75 LCALL DELAY
00BA F5A0 76 MOV P2,A
00BC 1200E9 77 LCALL DELAY
00BF 1200E9 78 LCALL DELAY
00C2 B480EC 79 CJNE A,#80H,Q6
00C5 7B03 80 MOV R3,#03H ; ;P0、P2口低位和高位交叉亮3次
00C7 740F 81 MOV A,#0FH
00C9 82 Q7:
00C9 F580 83 MOV P0,A
00CB F5A0 84 MOV P2,A
00CD 1200E9 85 LCALL DELAY
00D0 C4 86 SWAP A
00D1 DBF6 87 DJNZ R3,Q7
00D3 7580FF 88 MOV P0,#0FFH
00D6 75A0FF 89 MOV P2,#0FFH
00D9 1200E9 90 LCALL DELAY
00DC 1200E9 91 LCALL DELAY
00DF BD0F03 92 CJNE R5,#0FH,L4 ; ;亮到16列了吗?否转
00E2 020030 93 LJMP MAIN
00E5 94 L4:
00E5 0D 95 INC R5
00E6 020042 96 LJMP SCAN
00E9 97 DELAY:
00E9 7864 98 MOV R0,#100 ; ;延时40MS
00EB 99 DELAY1:
00EB 79C8 100 MOV R1,#200
00ED D9FE 101 DJNZ R1,$
00EF D8FA 102 DJNZ R0,DELAY1
00F1 22 103 RET
00F2 104 DELAY2:
00F2 7BF8 105 MOV R3,#248 ; ;延时123MS
00F4 106 DELAY3:
00F4 7CF8 107 MOV R4,#248
00F6 DCFE 108 DJNZ R4,$
00F8 DBFA 109 DJNZ R3,DELAY3
00FA 22 110 RET
111
00FB 112 LOOP:
00FB C0E0 113 PUSH ACC
00FD C0D0 114 PUSH PSW
00FF 0E 115 INC R6
0100 D2D3 116 SETB RS0
0102 74FF 117 MOV A, #0FFH ; ;清除画面
0104 F580 118 MOV P0,A ; ;清除P0口
0106 53A000 119 ANL P2,#00 ; ;清除P2口
0109 7AC8 120 MOV R2,#200
010B 121 D1:
010B 7BF8 122 MOV R3,#248 ; ;延时100MS
010D DBFE 123 DJNZ R3,$
010F DAFA 124 DJNZ R2,D1
A51 MACRO ASSEMBLER 1 02/22/2008 18:59:20 PAGE 3
0111 752000 125 MOV 20H , #00H ; ;取码指针的初值
0114 126 l1:
0114 7964 127 MOV R1,#100 ; ;每个字的停留时间
0116 128 L2:
0116 7E10 129 MOV R6,#16 ; ;每个字的16个码
0118 7C00 130 MOV R4, #00H ; ; ;扫描指针清零
011A A820 131 MOV R0, 20H ; ;取码指针存入R0
011C 132 L3:
011C EC 133 MOV A,R4 ; ;扫描指针存入A
011D F590 134 MOV P1,A ; ;扫描输出
011F 0C 135 INC R4 ; ;扫描指针加1,扫描下一个
0120 E8 136 MOV A,R0 ; ;取码指针存入A
0121 120151 137 LCALL BL ; ;取数据表的上半部份的代码
0124 93 138 MOVC A,@A+DPTR
0125 F580 139 MOV P0,A ; ;输出到P0
0127 08 140 INC R0 ; ;取码指针加1,取下一个码
0128 E8 141 MOV A,R0
0129 120151 142 LCALL BL ; ;取数据表的下半部份的代码
012C 93 143 MOVC A,@A+DPTR
012D F5A0 144 MOV P2,A ; ;输出到P2
012F 08 145 INC R0
0130 7B02 146 MOV R3,#02 ; ;扫描1MS
0132 147 D2:
0132 7DF8 148 MOV R5,#248
0134 DDFE 149 DJNZ R5,$
0136 DBFA 150 DJNZ R3,D2
0138 7400 151 MOV A, #00H ; ;清除屏幕
013A F580 152 MOV P0,A
013C 53A000 153 ANL P2, #00H
013F DEDB 154 DJNZ R6,L3 ; ;一个字16个码是否完成?
0141 D9D3 155 DJNZ R1,L2 ; ;每个字的停留时间时间是否到了?
0143 8820 156 MOV 20H ,R0 ; ;取码指针存入20H
0145 B8E0CC 157 CJNE R0,#224,L1 ; ;8个字256个码是否完成?
0148 7F00 158 MOV R7,#00H
014A C2D3 159 CLR RS0
014C D0D0 160 POP PSW
014E D0E0 161 POP ACC
0150 32 162 RETI
0151 163 BL:
0151 C2D3 164 CLR RS0
0153 BE0708 165 CJNE R6,#7,QQ7
0156 7E00 166 MOV R6,#00H
0158 D2D3 167 SETB RS0
015A 900253 168 MOV DPTR,#TAB7
015D 22 169 RET
015E 170 QQ7:
015E C2D3 171 CLR RS0
0160 BE0606 172 CJNE R6,#6,QQ6
0163 D2D3 173 SETB RS0
0165 900333 174 MOV DPTR,#TAB6
0168 22 175 RET
0169 176 QQ6:
0169 C2D3 177 CLR RS0
016B BE0506 178 CJNE R6,#5,QQ5
016E D2D3 179 SETB RS0
0170 900413 180 MOV DPTR,#TAB5
0173 22 181 RET
182
0174 C2D3 183 QQ5: CLR RS0
0176 BE0406 184 CJNE R6,#4,QQ4
0179 D2D3 185 SETB RS0
017B 9004F3 186 MOV DPTR,#TAB4
017E 22 187 RET
188
017F C2D3 189 QQ4: CLR RS0
0181 BE0306 190 CJNE R6,#3,QQ3
A51 MACRO ASSEMBLER 1 02/22/2008 18:59:20 PAGE 4
0184 D2D3 191 SETB RS0
0186 9005D3 192 MOV DPTR,#TAB3
0189 22 193 RET
194
018A C2D3 195 QQ3: CLR RS0
018C BE0206 196 CJNE R6,#2,QQ2
018F D2D3 197 SETB RS0
0191 9006B3 198 MOV DPTR,#TAB2
0194 22 199 RET
200
0195 C2D3 201 QQ2: CLR RS0
0197 BE0106 202 CJNE R6,#1,QQ1
019A D2D3 203 SETB RS0
019C 900773 204 MOV DPTR,#TAB1
019F 22 205 RET
206
01A0 C2D3 207 QQ1: CLR RS0
01A2 7E00 208 MOV R6,#00H
01A4 D2D3 209 SETB RS0
01A6 22 210 RET
01A7 211 LOOP1:
01A7 C0E0 212 PUSH ACC
01A9 C0D0 213 PUSH PSW
01AB 0F 214 INC R7
01AC D2D3 215 SETB RS0
01AE 74FF 216 MOV A, #0FFH ; ;清除画面
01B0 F580 217 MOV P0,A ; ;清除P0口
01B2 53A000 218 ANL P2,#00 ; ;清除P2口
01B5 7AC8 219 MOV R2,#200
01B7 220 D11:
01B7 7BF8 221 MOV R3,#248 ; ;延时100MS
01B9 DBFE 222 DJNZ R3,$
01BB DAFA 223 DJNZ R2,D11
01BD 752000 224 MOV 20H , #00H ; ;取码指针的初值
01C0 225 l11:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -