久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1402|回復: 1
打印 上一主題 下一主題
收起左側

八路搶答器

[復制鏈接]
跳轉到指定樓層
樓主
ID:338300 發表于 2018-6-1 18:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
OK EQU 20H                       ;搶答開始標志位
        RING EQU 22H                     ;響鈴標志位
        DATA0 EQU 36H                    ;搶答按鍵口數據存放地址
        ORG 0000H
        AJMP MAIN
        ORG 0003H  
        AJMP INTT0
        ORG 000BH
        AJMP T0INT
        ORG 001BH
        AJMP T1INT
        ORG 0040H
MAIN:   MOV R1,#14H                       ;初設搶答時間為20s
        MOV R2,#1EH                     ;初設答題時間為30s
        MOV 38H,#3CH                      ;啟用錦囊時間從60s倒計時
        MOV TMOD,#11H                    ;設置未定時器/模式1
        MOV TH0,#0F0H
        MOV TL0,#0FFH                    ;越高發聲頻率越高,越尖
        MOV TH1,#3CH
        MOV TL1,#0B0H                    ;50ms為一次溢出中斷
        SETB EA
        SETB ET0
        SETB ET1                         ;允許二個中斷,T0/T1
        CLR OK
        CLR RING
         SETB TR1
         SETB TR0                        ;一開始就運行定時器,以開始顯示FFF.如果想重新計數,重置TH1/TL1就可以了
START:   MOV DATA0,#0FFH                 ;初始化
         MOV R5,#0BH
         MOV R4,#0BH
         MOV R3,#0BH
         ACALL DISPLAY                   ;未開始搶答時候顯示FFF
         JNB P3.3,SELSUB0
         JNB P3.4,TZ3                    ;倒計時調整
         JB P3.0,NEXT
         ACALL DELAY
         JB P3.0,NEXT                    ;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢
         SETB EX0                        ;開放INT0
         ACALL BARK                      ;按鍵發聲
         MOV A,R1
         MOV R6,A                    ;送R1->R6,因為R1中保存了搶答時間
         SETB OK                         ;搶答標志位,在使用錦囊時用作判斷是搶答倒計時還是回答倒計時
         MOV R3,#0AH                     ;搶答只顯示計時,滅號數
         AJMP COUNT                      ;進入倒計時程序,"查詢有效搶答的程序"在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,TZ1
         JNB P1.7,TZ2
         AJMP START
TZ1:     AJMP FALSE7
TZ2:     AJMP FALSE8
TZ3:     AJMP SELSUB1
FALSE1: MOV R3,#01H
        AJMP ERROR
FALSE2: MOV R3,#02H               
        AJMP ERROR
FALSE3: MOV R3,#03H
        AJMP ERROR
FALSE4: MOV R3,#04H
        AJMP ERROR
FALSE5: MOV R3,#05H
        AJMP ERROR
FALSE6: MOV R3,#06H
        AJMP ERROR
FALSE7: MOV R3,#07H
        AJMP ERROR
FALSE8: MOV R3,#08H
        AJMP ERROR
SELSUB0: MOV A,R1
         MOV B,#0AH
         DIV AB
         MOV R5,A
         MOV R4,B
         MOV R3,#0AH
         ACALL DISPLAY                   ;先在兩個時間LED上顯示R1
         JNB P3.5,INC0                   ;P3.5為+1s鍵,如按下跳到INCO
         JNB P3.6,DEC0                   ;P3.6為-1s鍵,如按下跳到DECO
         JNB P3.1,BACK0                  ;P3.1為確定鍵,如按下跳到BACKO
         AJMP SELSUB0
INC0:   MOV A,R1
        CJNE A,#63H,ADD0                 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
        MOV R1,#00H
        ACALL DELAY1
        AJMP SELSUB0
ADD0:   INC R1
        ACALL DELAY1
        AJMP SELSUB0
DEC0:   MOV A,R1
        JZ SETR1                         ;如果R1為0, R1就置99,
        DEC R1
        ACALL DELAY1
        AJMP SELSUB0
SETR1:  MOV R1,#63H
        ACALL DELAY1
        AJMP SELSUB0
BACK0:  AJMP START
SELSUB1: MOV A,R2
        MOV B,#0AH
        DIV AB
       MOV R5,A
       MOV R4,B
       MOV R3,#0AH
       ACALL DISPLAY
    JNB P3.5,INC1
    JNB P3.6,DEC1
    JNB P3.1,BACK1
    AJMP SELSUB1
INC1:   MOV A,R2
        CJNE A,#63H,ADD1
        MOV R2,#00H
        ACALL DELAY1
AJMP SELSUB1
ADD1:   INC R2
         ACALL DELAY1
         AJMP SELSUB1
DEC1:   MOV A,R2
     JZ SETR2
     DEC R2
    ACALL DELAY1
    AJMP SELSUB1
SETR2:  MOV R2,#63H
        ACALL DELAY1
        AJMP SELSUB1
BACK1: AJMP START
REPEAT:MOV A,38h                        ;使用錦囊時重新計時
       MOV R6,A
       CLR RING         ;當倒計時進入最后5秒的時候,啟用錦囊能消除蜂鳴
COUNT:MOV R0,#00H                    ;重置定時器中斷次數
        MOV TH1,#3CH
        MOV TL1,#0B0H                  ;重置定時器
RECOUNT:MOV A,R6                       ;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6
        MOV B,#0AH
    DIV AB                             ;除十分出個位/十位
    MOV 30H,A                          ;十位存于(30H)
    MOV 31H,B                          ;個位存于(31H)
    MOV R5,30H                         ;取十位
    MOV R4,31H                         ;取個位
    MOV A,R6
    SUBB A,#07H
    JNC LARGER                   ;大于5s跳到LARGER,小于等于5s會提醒
    MOV A,R0
        CJNE A,#0AH,FULL               ;1s中0.5s向下運行
    CLR RING
    AJMP CHECK
FULL: CJNE A,#14H,CHECK              ;下面是1s的情況,響并顯示號數并清R0,重新計
      SETB RING
      MOV A,R6
    JZ QUIT                            ;計時完畢
    MOV R0,#00H
    DEC R6                            ;一秒標志減1
      AJMP CHECK
LARGER: MOV A,R0
        CJNE A,#14H,CHECK          ;如果1s向下運行,否者跳到"停/顯示"
        DEC R6                           ;計時一秒R6自動減1
        MOV R0,#00H
CHECK: JNB P3.1,QUIT         ;如按下停止鍵退出
        JNB OK,CHECKK      ;只在回答倒計時才有效
        AJMP NEXTT
CHECKK:JNB P3.0,REPEAT    ;判斷是否使用錦囊
NEXTT: ACALL DISPLAY
   JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用)
       AJMP RECOUNT
ACCOUT:MOV A,DATA0
       JNB ACC.0,TRUE1
       JNB ACC.1,TRUE2
       JNB ACC.2,TRUE3
       JNB ACC.3,TRUE4
       JNB ACC.4,TRUE5
       JNB ACC.5,TRUE6
       JNB ACC.6,TZ7
      JNB ACC.7,TZ8
      AJMP RECOUNT
TZ7: AJMP TRUE7
TZ8: AJMP TRUE8   
QUIT:  CLR OK                         ;如果按下了"停止鍵"執行的程序
   CLR RING
   AJMP START
TRUE1: ACALL BARK
       MOV A,R2
       MOV R6,A              ;搶答時間R2送R6
       MOV R3,#01H
       CLR OK                ;因為答題的計時不再查詢搶答,所以就鎖了搶答
       AJMP COUNT
TRUE2:ACALL BARK
      MOV A,R2
      MOV R6,A
      MOV R3,#02H
      CLR OK
      AJMP COUNT
TRUE3:ACALL BARK
      MOV A,R2
      MOV R6,A
      MOV R3,#03H
      CLR OK
      AJMP COUNT
TRUE4:ACALL BARK
      MOV A,R2
      MOV R6,A
      MOV R3,#04H
      CLR OK
      AJMP COUNT
TRUE5: ACALL BARK
        MOV A,R2
        MOV R6,A
        MOV R3,#05H
        CLR OK
        AJMP COUNT
TRUE6:  ACALL BARK
        MOV A,R2
        MOV R6,A
        MOV R3,#06H
        CLR OK
        AJMP COUNT
TRUE7:  ACALL BARK
        MOV A,R2
        MOV R6,A
        MOV R3,#07H
        CLR OK
        AJMP COUNT
TRUE8:  ACALL BARK
        MOV A,R2
        MOV R6,A
        MOV R3,#08H
        CLR OK
        AJMP COUNT
ERROR:  MOV R0,#00H
        MOV TH1,#3CH
        MOV TL1,#0B0H
        MOV 34H,R3                ;犯規號數暫存與(34H)
HERE:   MOV A,R0
        CJNE A,#06H,FLASH         ;0.3s向下運行->滅并停響
        CLR RING
        MOV R3,#0AH
        MOV R4,#0AH
        MOV R5,#0AH               ;三燈全滅
        AJMP CHECK1
FLASH:  CJNE A,#0CH,CHECK1        ;下面是0.8s的情況,響并顯示號數并清R0,重新計
        SETB RING
        MOV R0,#00H
        MOV R3,34H                ;取回號數
        MOV R5,#0BH
        MOV R4,#0BH               ;顯示FF和號數
        AJMP CHECK1
CHECK1: JNB P3.1,QUIT1
        ACALL DISPLAY
        AJMP HERE
QUIT1:  CLR RING
        CLR OK
        AJMP START
DISPLAY:MOV DPTR,#DAT1           ;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出
        MOV A,R3
        MOVC A,@A+DPTR
        MOV P2,#0feH
        MOV P0,A
        ACALL DELAY
        MOV DPTR,#DAT2
        MOV A,R5
        MOVC A,@A+DPTR
        MOV P2,#0fdH
        MOV P0,A
        ACALL DELAY
        MOV A,R4
        MOVC A,@A+DPTR
        MOV P2,#0fbH
        MOV P0,A
        ACALL DELAY
        RET
DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  
;"滅","1","2","3","4","5","6","7","8","9","滅","F"
DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;第一個為零,其他與上相同,因為十位如果為零顯示熄滅

DELAY1: MOV 35H,#08H
LOOP0:  ACALL DISPLAY
         DJNZ 35H,LOOP0
         RET

DELAY:  MOV 32H,#12H
LOOP:   MOV 33H,#0AFH
LOOP1:  DJNZ 33H,LOOP1
        DJNZ 32H,LOOP
    RET
BARK:   SETB RING
        ACALL DELAY1
        ACALL DELAY1
        CLR RING                  ;按鍵發聲
    RET

T0INT:  MOV TH0,#0ECH
        MOV TL0,#0FFH
        JNB RING,OUT;
CPL P3.7                ;RING標志位為1時候P3.7口不斷取反使喇叭發出一定頻率的聲音
OUT:    RETI

T1INT: MOV TH1,#3CH
      MOV TL1,#0B0H
      INC R0
    RETI

INTT0: MOV DATA0,P1   
       CLR EX0
     RETI
     END

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

使用道具 舉報

沙發
ID:338173 發表于 2018-6-1 20:41 | 只看該作者
牛逼 現在還有用匯編寫的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美极品少妇xxxxⅹ免费视频 | 天天摸天天看 | 日日夜夜天天干 | 视频一区二区在线观看 | 国产精品爱久久久久久久 | 色综合久久伊人 | 久久久久网站 | 亚洲成人午夜电影 | 欧美精品片 | 红色av社区 | 中文字幕一区二区不卡 | 欧美成人精品二区三区99精品 | 久久久免费电影 | 夜夜操天天操 | 中国美女一级黄色片 | 国产真实精品久久二三区 | 亚洲视频欧美视频 | 五月激情婷婷网 | 欧美日韩大片 | 亚洲精品在线免费播放 | 国产免费xxx| av一二三区 | 91精品国产欧美一区二区 | 国产ts一区 | 99资源站 | 日韩av免费在线观看 | 久草视频观看 | 欧美福利一区 | 国产精品久久久久影院色老大 | 亚洲欧美日韩中文在线 | 国产精品免费一区二区 | 精品国产乱码一区二区三区 | 天天久久 | 欧美视频中文字幕 | 欧美日韩精品免费 | 亚洲免费精品一区 | 亚洲性视频 | 成人av电影网 | 国产精品久久久久久久久久久久 | 一区二区精品 | 一级a爱片久久毛片 |