?? 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 + -