📄 qdq_8.lst
字号:
300:
301: 0148 C2 22 CLR RING
302:
303: 014A 21 60 AJMP CHECK
304:
305: 014C B4 14 11 FULL: CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计
306:
307: 014F D2 22 SETB RING
308:
309: 0151 EE MOV A,R6
310:
311: 0152 60 40 JZ QUIT;计时完毕
312:
313: 0154 78 00 MOV R0,#00H
314:
315: 0156 1E DEC R6;一秒标志减1
316:
317: 0157 21 60 AJMP CHECK
318:
319: 0159 E8 LARGER: MOV A,R0
320:
321: 015A B4 14 03 CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"
322:
323: 015D 1E DEC R6;计时一秒R6自动减1
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 7
Line I Addr Code Source
324:
325: 015E 78 00 MOV R0,#00H
326:
327: 0160 30 B1 31 CHECK: JNB P3.1,QUIT;如按下停止键退出
328:
329: 0163 30 20 02 JNB OK,CHECKK ;只在回答倒计时才有效
330:
331: 0166 21 6B AJMP NEXTT
332:
333: 0168 30 B0 BA CHECKK:JNB P3.0,REPEAT ;判断是否使用锦囊
334:
335: 016B 51 1E NEXTT: ACALL DISPLAY
336:
337: 016D 20 20 02 JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
338:
339: 0170 21 31 AJMP RECOUNT
340:
341: 0172 ACCOUT:
342: 0172 E5 36 MOV A,36H
343:
344: 0174 30 E0 23 JNB ACC.0,TRUE1
345:
346: 0177 30 E1 2A JNB ACC.1,TRUE2
347:
348: 017A 30 E2 31 JNB ACC.2,TRUE3
349:
350: 017D 30 E3 38 JNB ACC.3,TRUE4
351:
352: 0180 30 E4 3F JNB ACC.4,TRUE5
353:
354: 0183 30 E5 46 JNB ACC.5,TRUE6
355:
356: 0186 30 E6 05 JNB ACC.6,TZ1
357:
358: 0189 30 E7 05 JNB ACC.7,TZ2
359:
360: 018C 21 31 AJMP RECOUNT
361:
362: 018E 02 01 D6 TZ1:JMP TRUE7
363:
364: 0191 02 01 E0 TZ2:JMP TRUE8
365: 0194 C2 20 QUIT: CLR OK;如果按下了"停止键"执行的程序
366:
367: 0196 C2 22 CLR RING
368:
369: 0198 01 65 AJMP START
370:
371: ;=====正常抢答处理程序=====
372:
373: 019A 51 8A TRUE1: ACALL BARK
374:
375: 019C EA MOV A,R2
376:
377: 019D FE MOV R6,A;抢答时间R2送R6
378:
379: 019E 7B 01 MOV R3,#01H
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 8
Line I Addr Code Source
380:
381: 01A0 C2 20 CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答
382:
383: 01A2 21 29 AJMP COUNT
384:
385: 01A4 51 8A TRUE2:ACALL BARK
386:
387: 01A6 EA MOV A,R2
388:
389: 01A7 FE MOV R6,A
390:
391: 01A8 7B 02 MOV R3,#02H
392:
393: 01AA C2 20 CLR OK
394:
395: 01AC 21 29 AJMP COUNT
396:
397: 01AE 51 8A TRUE3:ACALL BARK
398:
399: 01B0 EA MOV A,R2
400:
401: 01B1 FE MOV R6,A
402:
403: 01B2 7B 03 MOV R3,#03H
404:
405: 01B4 C2 20 CLR OK
406:
407: 01B6 21 29 AJMP COUNT
408:
409: 01B8 51 8A TRUE4:ACALL BARK
410:
411: 01BA EA MOV A,R2
412:
413: 01BB FE MOV R6,A
414:
415: 01BC 7B 04 MOV R3,#04H
416:
417: 01BE C2 20 CLR OK
418:
419: 01C0 21 29 AJMP COUNT
420:
421: 01C2 51 8A TRUE5:ACALL BARK
422:
423: 01C4 EA MOV A,R2
424:
425: 01C5 FE MOV R6,A
426:
427: 01C6 7B 05 MOV R3,#05H
428:
429: 01C8 C2 20 CLR OK
430:
431: 01CA 21 29 AJMP COUNT
432:
433: 01CC 51 8A TRUE6: ACALL BARK
434:
435: 01CE EA MOV A,R2
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 9
Line I Addr Code Source
436:
437: 01CF FE MOV R6,A
438:
439: 01D0 7B 06 MOV R3,#06H
440:
441: 01D2 C2 20 CLR OK
442:
443: 01D4 21 29 AJMP COUNT
444:
445: 01D6 51 8A TRUE7:ACALL BARK
446:
447: 01D8 EA MOV A,R2
448:
449: 01D9 FE MOV R6,A
450:
451: 01DA 7B 07 MOV R3,#07H
452:
453: 01DC C2 20 CLR OK
454:
455: 01DE 21 29 AJMP COUNT
456:
457: 01E0 51 8A TRUE8:ACALL BARK
458:
459: 01E2 EA MOV A,R2
460:
461: 01E3 FE MOV R6,A
462:
463: 01E4 7B 08 MOV R3,#08H
464:
465: 01E6 C2 20 CLR OK
466:
467: 01E8 21 29 AJMP COUNT
468: ;=====犯规抢答程序=====
469:
470: 01EA 78 00 ERROR: MOV R0,#00H
471:
472: 01EC 75 8D 3C MOV TH1,#3CH
473:
474: 01EF 75 8B B0 MOV TL1,#0B0H
475:
476: 01F2 8B 34 MOV 34H,R3;犯规号数暂存与(34H)
477:
478: 01F4 E8 HERE: MOV A,R0
479:
480: 01F5 B4 06 0A CJNE A,#06H,FLASH;0.3s向下运行->灭并停响
481:
482: 01F8 C2 22 CLR RING
483:
484: 01FA 7B 0A MOV R3,#0AH
485:
486: 01FC 7C 0A MOV R4,#0AH
487:
488: 01FE 7D 0A MOV R5,#0AH;三灯全灭
489:
490: 0200 41 11 AJMP CHECK1
491:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 10
Line I Addr Code Source
492: 0202 B4 0C 0C FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计
493:
494: 0205 D2 22 SETB RING
495:
496: 0207 78 00 MOV R0,#00H
497:
498: 0209 AB 34 MOV R3,34H;取回号数
499:
500: 020B 7D 0B MOV R5,#0BH
501:
502: 020D 7C 0B MOV R4,#0BH;显示FF和号数
503:
504: 020F 41 11 AJMP CHECK1
505:
506: 0211 30 B1 04 CHECK1: JNB P3.1,QUIT1
507:
508: 0214 51 1E ACALL DISPLAY
509:
510: 0216 21 F4 AJMP HERE
511:
512: 0218 C2 22 QUIT1: CLR RING
513:
514: 021A C2 20 CLR OK
515:
516: 021C 01 65 AJMP START
517:
518: ;=====显示程序=====
519:
520: 021E 90 02 40 DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,
521:
522: 0221 EB MOV A,R3
523:
524: 0222 93 MOVC A,@A+DPTR
525:
526: 0223 75 A0 FE MOV P2,#0feH
527:
528: 0226 F5 80 MOV P0,A
529:
530: 0228 51 6E ACALL DELAY2
531:
532: 022A 90 02 4C MOV DPTR,#DAT2
533:
534: 022D ED MOV A,R5
535:
536: 022E 93 MOVC A,@A+DPTR
537:
538: 022F 75 A0 FD MOV P2,#0fdH
539:
540: 0232 F5 80 MOV P0,A
541:
542: 0234 51 6E ACALL DELAY2
543:
544: 0236 EC MOV A,R4
545:
546: 0237 93 MOVC A,@A+DPTR
547:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 11
Line I Addr Code Source
548: 0238 75 A0 FB MOV P2,#0fbH
549:
550: 023B F5 80 MOV P0,A
551:
552: 023D 51 6E ACALL DELAY2
553:
554: 023F 22 RET
555:
556: 0240 00 06 5B 4F DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
0244 66 6D 7D 07
0248 7F 6F 00 71
557:
558: ;"灭","1","2","3","4","5","6","7","8","9","灭","F"
559:
560: 024C 3F 06 5B 4F DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
0250 66 6D 7D 07
0254 7F 6F 00 71
561:
562: ;第一个为零,其他与上相同,因为十位如果为零显示熄灭
563:
564: ;====加减时间延时(起到不会按下就加N个数)======
565:
566: 0258 75 35 08 DELAY1: MOV 35H,#08H
567:
568: 025B 51 1E LOOP0: ACALL DISPLAY
569:
570: 025D D5 35 FB DJNZ 35H,LOOP0
571:
572: 0260 22 RET
573:
574: ;=====延时4236个机器周期(去抖动用到)=====
575:
576: 0261 75 32 12 DELAY: MOV 32H,#12H
577:
578: 0264 75 33 AF LOOP: MOV 33H,#0AFH
579:
580: 0267 D5 33 FD LOOP1: DJNZ 33H,LOOP1
581:
582: 026A D5 32 F7 DJNZ 32H,LOOP
583:
584: 026D 22 RET
585:
586: ;=====延时4236个机器周期(显示用到)=====
587:
588: 026E 75 32 43 DELAY2: MOV 32H,#43H
589:
590: 0271 75 33 1E LOOP3: MOV 33H,#1EH
591:
592: 0274 EF MOV A,R7 ;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转
到正常抢答处理
593:
594: 0275 70 07 JNZ AAAA1 ;没读到有效数据时继续转到AAAA1
595:
596: 0277 D5 33 FD LOOP2: DJNZ 33H,LOOP2
597:
598: 027A D5 32 F4 DJNZ 32H,LOOP3
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 12
Line I Addr Code Source
599:
600: 027D 22 RET
601:
602: ;=====读抢答按键数据口程序=====
603:
604: ;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
605: ;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -