找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1657|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)競(jìng)賽搶答器部分功能程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:349969 發(fā)表于 2018-6-12 07:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
====查詢程序=====
START:   MOV R5,#0BH
         MOV R4,#0BH
         MOV R3,#0BH
ACALL DISPLAY;未開始搶答時(shí)候顯示FFF
         JB P3.0,NEXT;ddddddd
         ACALL DELAY
         JB P3.0,NEXT;去抖動(dòng),如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢
         ACALL BARK;按鍵發(fā)聲
         MOV A,R1
  MOV R6,A;送R1->R6,因?yàn)镽1中保存了搶答時(shí)間
     SETB OK;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答
         MOV R7,#01H  ;讀搶答鍵數(shù)據(jù)信號(hào)標(biāo)志,這里表示只讀一次有用信號(hào)
          MOV R3,#0AH;搶答只顯示計(jì)時(shí),滅號(hào)數(shù)
        AJMP COUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在COUNT里面
NEXT:   JNB P1.0,FALSE1
    JNB P1.1,FALSE2
    JNB P1.2,FALSE3
    JNB P1.3,FALSE4
    JNB P1.4,FALSE5
    JNB P1.5,FALSE6
    JNB P1.6,FALSE7
    JNB P1.7,FALSE8
    AJMP START
;=====INT0(搶答時(shí)間R1調(diào)整程序)=====
INT0SUB:MOV A,R1
        MOV B,#0AH
         DIV AB
         MOV R5,A
         MOV R4,B
         MOV R3,#0AH
         ACALL DISPLAY;先在兩個(gè)時(shí)間LED上顯示R1
         JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO
         JNB P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO
         JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO
    AJMP INT0SUB
INC0:   MOV A,R1
CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
        MOV R1,#00H
        ACALL DELAY1
AJMP INT0SUB
ADD0:   INC R1
        ACALL DELAY1
        AJMP INT0SUB
DEC0:   MOV A,R1
    JZ SETR1;如果R1為0, R1就置99,
    DEC R1
    ACALL DELAY1
    AJMP INT0SUB
SETR1:  MOV R1,#63H
        ACALL DELAY1
        AJMP INT0SUB
BACK0:  RETI
;=====讀搶答按鍵數(shù)據(jù)口程序=====
;由于在讀搶答數(shù)據(jù)口的時(shí)候,單片機(jī)首先進(jìn)入倒計(jì)時(shí)程序,再調(diào)用顯示程序,最后才檢測(cè)按鍵口
;然而在檢測(cè)按鍵口時(shí)動(dòng)態(tài)掃描要調(diào)用三次(4ms)延時(shí)程序.這樣就會(huì)導(dǎo)致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號(hào)優(yōu)先最高.8號(hào)最低.
;故采用在延時(shí)子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性
AAAA1:   MOV A,P1
         CJNE A,#0FFH,AA1           ;當(dāng)不全為1時(shí)的數(shù)據(jù)為有效數(shù)據(jù)
AA0:     MOV 36H,A          ;將有效數(shù)據(jù)送到36H暫存
           AJMP LOOP2
          AA1:    DEC R7         
          AJMP AA0
   ;=====發(fā)聲程序=====
BARK:   SETB RING
        ACALL DELAY1
        ACALL DELAY1
        CLR RING;按鍵發(fā)聲
    RET
;=====TO溢出中斷(響鈴程序)=====
T0INT:  MOV TH0,#0ECH
        MOV TL0,#0FFH
        JNB RING,OUT;
     CPL P3.6;RING標(biāo)志位為1時(shí)候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音
OUT:    RETI
;=====T1溢出中斷(計(jì)時(shí)程序)=====
T1INT:  MOV TH1,#3CH
        MOV TL1,#0B0H
    INC R0
    RETI
END




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表