專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

設(shè)置比賽數(shù)據(jù)記錄(實(shí)現(xiàn)指針判斷和隨機(jī)查詢功能)

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年11月12日   【字體:
程序的編寫,在日積月累中完成,同時(shí)更是在調(diào)試中完善。
TJ0109_1 DATA 50H ;1至9洞數(shù)據(jù)統(tǒng)計(jì)
    TJ0109_2 DATA 51H ;1至9洞數(shù)據(jù)統(tǒng)計(jì)
    TJ0109_3 DATA 52H ;1至9洞數(shù)據(jù)統(tǒng)計(jì)
    TJ1018_1 DATA 53H ;10至18洞數(shù)據(jù)統(tǒng)計(jì)
    TJ1018_2 DATA 54H ;10至18洞數(shù)據(jù)統(tǒng)計(jì)
    TJ1018_3 DATA 55H ;10至18洞數(shù)據(jù)統(tǒng)計(jì)
    TJ0118_1 DATA 56H ;1至18洞數(shù)據(jù)統(tǒng)計(jì)
    TJ0118_2 DATA 57H ;1至18洞數(shù)據(jù)統(tǒng)計(jì)
    TJ0118_3 DATA 58H ;1至18洞數(shù)據(jù)統(tǒng)計(jì)
    SHUJU_G  DATA 56H
    SHUJU_S  DATA 57H
    SHUJU_B  DATA 58H
    SHUJU_W  DATA 75H
    SHUJU_Z  DATA 76H
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    DON1 DATA    31H    ;洞1數(shù)據(jù)
    DON2 DATA    32H
    DON3 DATA    33H
    DON4 DATA    34H
    DON5 DATA    35H
    DON6 DATA    36H
    DON7 DATA    37H
    DON8 DATA    38H
    DON9 DATA    39H
    DON10 DATA    3AH
    DON11 DATA    3BH
    DON12 DATA    3CH
    DON13 DATA    3DH
    DON14 DATA    3EH
    DON15 DATA    3FH
    DON16 DATA    40H
    DON17 DATA    41H
    DON18 DATA    42H
;;;;;;;;;;;;;;;;;;;;;;;
    KS  BIT P0.0            ;開始
    JA  BIT P0.1            ;加
    JD  BIT P0.2            ;減
    CX  BIT P0.3            ;查詢
;;;;;;;;;;;;;;;;;;;;;;;;;
    ORG   0H                        ;程序代碼由地址0開始執(zhí)行
MAIN:
;;;;;;;;;;;;;;;;;;;;;;;;按任意鍵進(jìn)入人員編號(hào)設(shè)置
SX_RY:
        MOV P3,#0FFH  ;;;;;;關(guān)閉顯示
        JB  KS,SX_RY_1
        JNB KS,$
        AJMP  BISAI_1
SX_RY_1:
        JB  JA,SX_RY_2
        JNB JA,$
        AJMP  BISAI_1
SX_RY_2:
        JB  JD,SX_RY_3
        JNB JD,$
        AJMP  BISAI_1
SX_RY_3:
        JB  CX,SX_RY_4
        JNB CX,$
        AJMP  BISAI_1
SX_RY_4:
        AJMP SX_RY
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)據(jù)調(diào)用
SHUJU_T:LCALL SHUJU_1_9
        LCALL SHUJU_10_18
        LCALL  SHUJU_0118
        RET
;;;;;;;;;;;;;;;;;;;;;;;;洞位將沖突的數(shù)據(jù)暫時(shí)保存起來
BISAI_1:  MOV R1,#1
          MOV R0,#31H
BISAI_1_A:
          MOV SHUJU_Z,R0 ;將數(shù)據(jù)暫時(shí)保存
          MOV SHUJU_W,R1
          LCALL SHUJU_T
BISAI_1_B:;;;;;;;;;;作為查詢時(shí)的返回入口
          MOV R0,SHUJU_Z ;將數(shù)據(jù)送回
          MOV R1,SHUJU_W
          MOV R2,#50
          MOV R3,#50
BISAI_1_2:LCALL XSLED_CX
          DEC R2
          MOV A,R2
          CJNE A,#0,BISAI_1_4
BISAI_1_3: LCALL XSLED_CX_2
           DEC R3
           MOV A,R3
           CJNE A,#0,BISAI_1_6
           AJMP BISAI_1_A
           RET
BISAI_1_4: JB CX,BISAI_1_4_B
           JNB CX,$
           MOV SHUJU_Z,R0 ;將數(shù)據(jù)暫時(shí)保存
           MOV SHUJU_W,R1
           LCALL CX_1_B
           RET
BISAI_1_4_B:
           JB KS,BISAI_1_5
           JNB KS,$
           INC R0
           INC R1
           MOV A,R1
           CJNE A,#19,BISAI_1_2
           LCALL BISAI_37
           RET
BISAI_1_5:  MOV A,@R0
            LCALL BISAI_T
            MOV @R0,A
            AJMP BISAI_1_2
            RET
BISAI_1_6: JB CX,BISAI_1_6_B
           JNB CX,$
           MOV SHUJU_Z,R0 ;將數(shù)據(jù)暫時(shí)保存
           MOV SHUJU_W,R1
           LCALL CX_1_B
           RET
BISAI_1_6_B:
            JB KS,BISAI_1_7
            JNB KS,$
            INC R0
            INC R1
            MOV A,R1
            CJNE A,#19,BISAI_1_3
            LCALL BISAI_37
            RET
BISAI_1_7:  MOV A,@R0
            LCALL BISAI_T
            MOV @R0,A
            AJMP BISAI_1_3
            RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比賽完成,不再進(jìn)行數(shù)據(jù)登記
BISAI_37:
         MOV R0,#100  ;;;;;;;; 修改參數(shù),就可以改變顯示的延時(shí)時(shí)間
         MOV R1,#100   ;;;;;;;; 修改參數(shù),就可以改變顯示的延時(shí)時(shí)間
XS_1:    LCALL ANJIAN_SX
         LCALL XSLED
         MOV P3,#0FFH
         DEC R0
         MOV A,R0
         CJNE A,#0,XS_1
         DEC R1
         MOV A,R1
         CJNE A,#0,XS_2
         LCALL ANJIAN_SX
         RET
XS_2:    MOV R0,#100
         AJMP XS_1
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;洞位數(shù)據(jù)調(diào)整
BISAI_T:  JB JA,BISAI_T_1
          JNB JA,$
          INC A
          RET
BISAI_T_1:JB JD,BISAI_T_2
          JNB JD,$
          DEC A
          RET
BISAI_T_2:RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顯示時(shí),按下,延時(shí)恢復(fù)
ANJIAN_SX:
        JB  KS,ANJIAN_SX_1
        JNB KS,$
        AJMP  BISAI_37
ANJIAN_SX_1:
        JB  JA,ANJIAN_SX_2
        JNB JA,$
        AJMP  BISAI_37
ANJIAN_SX_2:
        JB  JD,ANJIAN_SX_3
        JNB JD,$
        AJMP  BISAI_37
ANJIAN_SX_3:
        JB  CX,ANJIAN_SX_4
        JNB CX,$
        AJMP  CX_1
ANJIAN_SX_4:
        RET
;;;;;;;;;;;;;;;;;;;數(shù)據(jù)0118
SHUJU_0118:
             MOV A,TJ0109_1
             MOV B,TJ1018_1
             ADD A,B
             MOV TJ0118_1,A
             MOV A,TJ0109_2
             MOV B,TJ1018_2
             ADD A,B
             MOV TJ0118_2,A
             MOV A,TJ0109_3
             MOV B,TJ1018_3
             ADD A,B
             MOV TJ0118_3,A
             MOV A,TJ0118_3
             MOV B,#10
             DIV AB
             MOV TJ0118_3,B
             ADD A,TJ0118_2
             MOV B,#10
             DIV AB
             MOV TJ0118_2,B
             ADD A,TJ0118_1
             MOV B,#10
             DIV AB
             MOV TJ0118_1,B
             RET
;;;;;;;;;;;;;數(shù)據(jù)累加,盡量使用一個(gè)R爭取不要沖突使用
SHUJU_1_9:   MOV TJ0109_1,#0
             MOV TJ0109_2,#0
             MOV TJ0109_3,#0
             MOV R0,#31H
SHUJU_1_9_2: MOV A,@R0
             ADD A,TJ0109_3
             MOV B,#100
             DIV AB
             MOV SHUJU_B,A;;;;;;;;;;;百位臨時(shí)數(shù)據(jù)
             MOV A,B
             MOV B,#10
             DIV AB
             MOV SHUJU_S,A;;;;;;;;十位臨時(shí)數(shù)據(jù)
             MOV TJ0109_3,B;;;;個(gè)位送數(shù)據(jù)
             ;;;;;;;;;;;;;;;十位數(shù)相加
             MOV A,TJ0109_2
             ADD A,SHUJU_B
             MOV B,#10
             DIV AB
             ;;;;;;;;;;;;;;;;;;超過十位的,累加到百位
             ADD A,TJ0109_1
             MOV TJ0109_1,A ;;;;;;;累加最后值送百位
             MOV TJ0109_2,B ;;;;;;;余數(shù)送百位
             INC R0
             MOV A,R0
             CJNE A,#3AH,SHUJU_1_9_2
             RET
;;;;;;;;;;;;;數(shù)據(jù)累加,盡量使用一個(gè)R爭取不要沖突使用
SHUJU_10_18:   MOV TJ1018_1,#0
             MOV TJ1018_2,#0
             MOV TJ1018_3,#0
             MOV R0,#3AH
SHUJU_10_18_2: MOV A,@R0
             ADD A,TJ1018_3
             MOV B,#100
             DIV AB
             MOV SHUJU_B,A;;;;;;;;;;;百位臨時(shí)數(shù)據(jù)
             MOV A,B
             MOV B,#10
             DIV AB
             MOV SHUJU_S,A;;;;;;;;十位臨時(shí)數(shù)據(jù)
             MOV TJ1018_3,B;;;;個(gè)位送數(shù)據(jù)
             ;;;;;;;;;;;;;;;十位數(shù)相加
             MOV A,TJ1018_2
             ADD A,SHUJU_B
             MOV B,#10
             DIV AB
             ;;;;;;;;;;;;;;;;;;超過十位的,累加到百位
             ADD A,TJ1018_1
             MOV TJ1018_1,A ;;;;;;;累加最后值送百位
             MOV TJ1018_2,B ;;;;;;;余數(shù)送百位
             INC R0
             MOV A,R0
             CJNE A,#43H,SHUJU_10_18_2
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比賽結(jié)束使用查詢功能
CX_1:   MOV R1,#1
        MOV R0,#31H
CX_1_1: JB KS,CX_1_2
        JNB KS,$
        LCALL BISAI_37
        RET
CX_1_2: JB JA,CX_1_3
        JNB JA,$
        INC R1
        INC R0
        MOV A,R0
        CJNE A,#43H,CX_1_1
        AJMP CX_1
CX_1_3: JB JD,CX_1_4
        JNB JD,$
        DEC R1
        DEC R0
        MOV A,R0
        CJNE A,#30H,CX_1_1
        AJMP CX_2
        RET
CX_1_4: LCALL XSLED_CX
        AJMP CX_1_1
        RET
CX_2:   MOV R1,#18
        MOV R0,#42H
        AJMP CX_1_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;比賽過程查詢數(shù)據(jù)
CX_1_B:   MOV R1,#1
          MOV R0,#31H
CX_1_1_B: JB KS,CX_1_2_B
          JNB KS,$
          LCALL BISAI_1_B
        RET
CX_1_2_B: JB JA,CX_1_3_B
        JNB JA,$
        INC R1
        INC R0
        MOV A,R0
        CJNE A,#43H,CX_1_1_B
        AJMP CX_1_B
CX_1_3_B: JB JD,CX_1_4_B
        JNB JD,$
        DEC R1
        DEC R0
        MOV A,R0
        CJNE A,#30H,CX_1_1_B
        AJMP CX_2_B
        RET
CX_1_4_B: LCALL XSLED_CX
        AJMP CX_1_1_B
        RET
CX_2_B: MOV R1,#18
        MOV R0,#42H
        AJMP CX_1_1_B
;;;;;;;;;;;;;;;;;;;;數(shù)據(jù)顯示
XSLED_CX:
          LCALL XSLED
          MOV A,R1   ;;;;;;;;;;;;;設(shè)置洞位1
          LCALL LED_LED_10
          MOV A,@R0 ;;;;;;;;;;;;;將相應(yīng)洞位數(shù)據(jù)傳給A
          LCALL LED_LED_10
          RET
;;;;;;;;;;;;;;;;;;;;閃爍數(shù)據(jù)顯示
XSLED_CX_2:
          LCALL XSLED
          MOV A,R1   ;;;;;;;;;;;;;設(shè)置洞位1
          LCALL LED_LED_10
          ;MOV A,@R0 ;;;;;;;;;;;;;將相應(yīng)洞位數(shù)據(jù)傳給A
          ;LCALL LED_LED_10
          RET
;;;;;;;;;;;;;;;;;;;;;;;;;運(yùn)行時(shí)數(shù)碼管顯示
XSLED:
    MOV P3,#0D0H
    MOV A,TJ0118_1
    LCALL LED
    INC P3
    MOV A,TJ0118_2
    LCALL LED
    INC P3
    MOV A,TJ0118_3
    LCALL LED
    INC P3
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;數(shù)碼顯示調(diào)用程序
LED:  MOV DPTR,#TABLE
      MOVC A,@A+DPTR
      MOV P1,A
      LCALL DELAY1
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;; 除以100得百位數(shù)
LED_LED_100:
        MOV B,#100
        DIV AB
        LCALL LED
        INC P3
        MOV A,B
;;;;;;;;;;;;;;;;;;;;;;;;;;;除以10得十位數(shù)
LED_LED_10:
        MOV B,#10
        DIV AB
        LCALL LED
        INC P3
        MOV A,B
;;;;;;;;;;;;;;;;;;;;;;;;;;不除得個(gè)位數(shù)
LED_LED_1:
        LCALL LED
        INC P3
        RET
TABLE:
   DB  0C0H        ;"0"
   DB  0F9H        ;"1"
   DB  0A4H        ;"2"
   DB  0B0H        ;"3"
   DB   99H        ;"4"
   DB   92H        ;"5"
   DB   82H        ;"6"
   DB  0F8H        ;"7"
   DB   80H        ;"8"
   DB   90H        ;"9"
   DB   0FFH       ;"-"
   DB   0FFH       ;"-"
   DB   0BFH       ;"-"
   DB   0BFH       ;"-"
DELAY1:
       MOV R7,#10
L1:    MOV R6,#50
        DJNZ R6,$
       DJNZ R7,L1
       RET
    END
關(guān)閉窗口

相關(guān)文章