📄 系统.lst
字号:
227
228
014A 229 KEY_IN2_3:
014A B400D9 230 CJNE A,#00H,KEY_IN2_2 ;末完,继续查
014D 80B9 231 JMP KEY_SCAN2 ;00H为结束码
232
014F 233 KEY_SCAN3: ;识别键盘有无键按下子程序
234
235
014F 75A0F0 236 MOV P2,#0F0H ;置列线为0,行线为1
237
0152 E5A0 238 MOV A,P2 ;读P2口
0154 54F0 239 ANL A,#0F0H ;取出高四位
0156 F5F0 240 MOV B,A ;暂存到B
0158 75A00F 241 MOV P2,#0FH ;置列线为1,行线为0
242
015B E5A0 243 MOV A,P2 ;读P2口
015D 540F 244 ANL A,#0FH ;取出低四位
015F 45F0 245 ORL A,B ;高四位与低四位逻辑或运算重新组合
0161 B4FF02 246 CJNE A,#0FFH,KEY_IN3_1 ;0FFH为无按键按下
0164 80E9 247 JMP KEY_SCAN3
248
0166 249 KEY_IN3_1: ;识别具体按键值子程序
0166 F5F0 250 MOV B,A ;将按键的特征编码暂存于B
0168 900192 251 MOV DPTR,#KEY_TABLE
016B 7BFF 252 MOV R3,#0FFH
016D 253 KEY_IN3_2:
016D 0B 254 INC R3 ;顺序码加1
016E EB 255 MOV A,R3
016F 93 256 MOVC A,@A+DPTR ;查表
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 5
0170 B5F015 257 CJNE A,B,KEY_IN3_3 ;比较,若相同则找到按键的特征编码。
0173 EB 258 MOV A,R3 ;找到特征编码后,取顺序码
259
0174 F543 260 MOV 43H,A ;存入43H单元
261
262
0176 BB0A0B 263 CJNE R3,#10,OUT3 ;输入是否结束
264
0179 854243 265 MOV 43H,42H
017C 854142 266 MOV 42H,41H
017F 754100 267 MOV 41H,#00H
0182 8009 268 JMP EXIT
269
0184 31B1 270 OUT3: CALL KEY_PLAER
0186 8005 271 JMP EXIT
272
0188 273 KEY_IN3_3:
0188 B400E2 274 CJNE A,#00H,KEY_IN3_2 ;末完,继续查
018B 80C2 275 JMP KEY_SCAN3 ;00H为结束码
276
018D 277 EXIT:
018D 00 278 NOP
018E 00 279 NOP
018F 31C9 280 CALL DISPLAY
281
282
0191 22 283 RET
284
0192 7D 285 KEY_TABLE:DB 07DH ;0 顺序码
0193 EEEDEB 286 DB 0EEH,0EDH,0EBH ;1,2,3 顺序码
0196 DEDDDB 287 DB 0DEH,0DDH,0DBH ;4,5,6 顺序码
0199 BEBDBB 288 DB 0BEH,0BDH,0BBH ;7,8,9 顺序码
019C 77 289 DB 077H ;D 输入结束确认
019D 00 290 DB 00H ;结束码
291
292 ;*******************************
293 ; 报警程序
294 ;*******************************
295
019E 296 ALARM:
019E C28C 297 CLR TR0 ;关计数器
01A0 C28E 298 CLR TR1
01A2 C2AF 299 CLR EA
01A4 C2A9 300 CLR ET0
01A6 C2AB 301 CLR ET1
01A8 C2A8 302 CLR EX0
303
01AA B2B1 304 CPL P3.1
305
306
01AC 31C9 307 CALL DISPLAY
308
01AE 80EE 309 JMP ALARM
310
01B0 22 311 RET
312
313 ;********************************
314 ; 显示程序
315 ;********************************
316
01B1 317 KEY_PLAER:
01B1 797F 318 MOV R1,#07FH ;扫描初值送入R1
01B3 7A08 319 MOV R2,#08H ;扫描位数送入R2
01B5 7840 320 MOV R0,#40H ;开始填充显示单元
321
01B7 E6 322 DISP0: MOV A,@R0 ;显示内容送入A
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 6
01B8 9001EC 323 MOV DPTR,#TABLE ;获得表头
01BB 93 324 MOVC A,@A+DPTR ;查表获得显示数据
01BC F580 325 MOV P0,A ;显示单元数据
01BE 8990 326 MOV P1,R1 ;开始显示当前位
01C0 E9 327 MOV A,R1 ;准备显示下一位
01C1 03 328 RR A
01C2 F9 329 MOV R1,A
01C3 08 330 INC R0 ;取下一个单元地址
01C4 5100 331 CALL DELAY ;延时0.25S
01C6 DAEF 332 DJNZ R2,DISP0 ;重复显示下一个
333 ;显示完成,返回
334
01C8 22 335 RET
336 ;**********************************
01C9 7940 337 DISPLAY: MOV R1,#40H
01CB 7D7F 338 MOV R5,#07FH
01CD ED 339 PLAY: MOV A,R5
01CE 7580FF 340 MOV P0,#0FFH
01D1 F590 341 MOV P1,A
01D3 E7 342 MOV A,@R1
343
01D4 9001EC 344 MOV DPTR,#TABLE
01D7 93 345 MOVC A,@A+DPTR
01D8 F580 346 MOV P0,A
01DA 31F7 347 CALL DL1MS
01DC 09 348 INC R1
01DD ED 349 MOV A,R5
01DE 30E004 350 JNB ACC.0,ENDOUT
01E1 03 351 RR A
01E2 FD 352 MOV R5,A
01E3 80E8 353 JMP PLAY
01E5 7590FF 354 ENDOUT: MOV P1,#0FFH
01E8 7580FF 355 MOV P0,#0FFH
356
01EB 22 357 RET ;显示完成,返回
358 ;
01EC 039F250D 359 TABLE:DB 03H,9FH,25H,0DH,99H,49H,41H,01FH,01H,09H,03H
01F0 9949411F
01F4 010903
360
361 ;********************************
362 ;延时程序
363 ;********************************
364
01F7 7E14 365 DL1MS: MOV R6,#14H
01F9 7F19 366 DL1: MOV R7,#19H
01FB DFFE 367 DL2: DJNZ R7,DL2
01FD DEFA 368 DJNZ R6,DL1
369
01FF 22 370 RET
371
372 ;*******************************
373 ;晶振12MHZ,延时0.25秒
374 ;*******************************
375
0200 757264 376 DELAY:MOV 72H,#100
0203 757164 377 LOOP3:MOV 71H,#100
0206 75700A 378 LOOP1:MOV 70H,#10
0209 D570FD 379 LOOP0:DJNZ 70H,LOOP0
020C D571F7 380 DJNZ 71H,LOOP1
020F 75702E 381 MOV 70H,#46
0212 D570FD 382 LOOP2:DJNZ 70H,LOOP2
0215 00 383 NOP
0216 D572EA 384 DJNZ 72H,LOOP3
0219 757030 385 MOV 70H,#48
021C D570FD 386 LOOP4:DJNZ 70H,LOOP4
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 7
387
021F 22 388 RET
389
390
391 ;**************************************************
392 ;* 距离计算程序(=计算值×17/1000cm) 近似 *
393 ;**************************************************
394
0220 C0E0 395 WORK:PUSH ACC
0222 C0D0 396 PUSH PSW
0224 C0F0 397 PUSH B
0226 75D018 398 MOV PSW, #18H ;RS1=1,RS0=1
0229 AB4B 399 MOV R3, 4BH
022B AA4A 400 MOV R2, 4AH
022D 7900 401 MOV R1, #00D
022F 7811 402 MOV R0, #17D ;与17相乘
0231 1202A5 403 LCALL MUL2BY2 ;R7R6R5R4<=R3R2*R1R0
0234 7B03 404 MOV R3, #03H
0236 7AE8 405 MOV R2, #0E8H
0238 1202D4 406 LCALL DIV4BY2 ;R7R6R5R4/R3R2=R7R6R5R4(商)......R1R0(余数)
023B 1202D4 407 LCALL DIV4BY2 ;R7R6R5R4/R3R2=R7R6R5R4(商)......R1R0(余数)
023E 8C44 408 MOV 44H, R4
0240 E544 409 MOV A, 44H
0242 7003 410 JNZ JJ0 ;A不等于0时,跳转
0244 754400 411 MOV 44H, #00H ;最高位为0,不点亮
412
0247 E8 413 JJ0: MOV A, R0
0248 FC 414 MOV R4, A
0249 E9 415 MOV A, R1
024A FD 416 MOV R5, A
024B 7B00 417 MOV R3, #00D
024D 7A64 418 MOV R2, #100D
024F 1202D4 419 LCALL DIV4BY2
0252 8C45 420 MOV 45H, R4
0254 E545 421 MOV A, 45H
0256 7009 422 JNZ JJ1
0258 E544 423 MOV A, 44H ;此高位为0,先看最高位是否为不亮
025A 940A 424 SUBB A, #0AH
025C 7003 425 JNZ JJ1
025E 754500 426 MOV 45H, #00H ;最高位不亮,次高位也不亮
427
0261 E8 428 JJ1: MOV A, R0
0262 FC 429 MOV R4, A
0263 E9 430 MOV A, R1
0264 FD 431 MOV R5, A
0265 7B00 432 MOV R3, #00D
0267 7A0A 433 MOV R2, #10D
0269 1202D4 434 LCALL DIV4BY2
026C 8C46 435 MOV 46H, R4
026E E546 436 MOV A, 46H
0270 7009 437 JNZ JJ2
0272 E545 438 MOV A, 45H ;次高位为0,先看次高位是否为不亮
0274 940A 439 SUBB A, #0AH
0276 7003 440 JNZ JJ2
0278 754600 441 MOV 46H, #00H ;次高位不亮,次高位也不亮
442
027B 8847 443 JJ2: MOV 47H, R0
027D 1545 444 DEC 45H
027F 1545 445 DEC 45H
0281 1545 446 DEC 45H
0283 1545 447 DEC 45H
0285 1545 448 DEC 45H
0287 1545 449 DEC 45H
450
0289 E545 451 MOV A,45H
028B B40002 452 CJNE A,#00H,JJ4
A51 MACRO ASSEMBLER 系统 05/23/2008 13:37:01 PAGE 8
028E 800C 453 JMP JJ5
0290 454 JJ4:
0290 E546 455 MOV A,46H
0292 B40007 456 CJNE A,#00H,JJ5
0295 754609 457 MOV 46H,#09H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -