⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7_flagdisp.asm.asm

📁 程序用中断扫描7段数码显示,有外部中断10MS中断串行通信中断等
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        SETB    P3.6
        CALL    SDELAY
        RET
;
DSP1
        MOV     P0,DIGIT1
        CALL    CLK4
        MOV     P0,DIGIT7
        CALL    CLK5
        CLR     P3.4    ;P3.6 P3.5 P3.4=1 0 0
        CLR     P3.5
        SETB    P3.6
        CALL    SDELAY
        RET
DSP2
        MOV     P0,DIGIT2
        CALL    CLK4
        MOV     P0,DIGIT8
        CALL    CLK5
        SETB    P3.4    ;P3.6 P3.5 P3.4=0 1 1
        SETB    P3.5
        CLR     P3.6
        CALL    SDELAY
        RET
DSP3
        MOV     P0,DIGIT3
        CALL    CLK4
        MOV     P0,DIGIT9
        CALL    CLK5
        CLR     P3.4    ;P3.6 P3.5 P3.4=0 1 0
        SETB    P3.5
        CLR     P3.6
        CALL    SDELAY
        RET
DSP4
        MOV     P0,DIGIT4
        CALL    CLK4
        MOV     P0,DIGIT10
        CALL    CLK5
        SETB    P3.4    ;P3.6 P3.5 P3.4=0 0 1
        CLR     P3.5
        CLR     P3.6
        CALL    SDELAY
        RET
DSP5
        MOV     P0,DIGIT5
        CALL    CLK4
        MOV     P0,DIGIT11
        CALL    CLK5
        CLR     P3.7    ;ENABLE
        CLR     P3.4    ;P3.6 P3.5 P3.4=0 0 0
        CLR     P3.5
        CLR     P3.6
        CALL    SDELAY
        RET
;
CLK4    CLR     P2.1
        SETB    P2.1
        RET
CLK5    CLR     P2.0
        SETB    P2.0
        RET
;
SYSTEM_INIT
        MOV     P0,#FFH
        MOV     P1,#FFH
        MOV     P2,#FFH
        MOV     P3,#FFH
        SETB    P2.2    ;74273 CLR=1
        SETB    P2.1    ;U4 CLK
        SETB    P2.0    ;U5 CLK
        MOV     R0,#DIGIT0              ;CLEAR (30H)-(3BH)
        CLR     A
$1      MOV     @R0,A
        INC     R0
        CJNE    R0,#DIGIT11+1,$1
        RET
;
T0_INT                          ;TIMER0 OVERFLOW INTERRUPT
        MOV     TH0,#TMSH
        MOV     TL0,#TMSL
        PUSH    PSW
        PUSH    A
        PUSH    DPL
        PUSH    DPH
        PUSH    00H
        PUSH    01H
        PUSH    02H
        PUSH    03H
        PUSH    04H
        PUSH    05H
        PUSH    06H
        PUSH    07H
        CALL    DISP
        POP     07H
        POP     06H
        POP     05H
        POP     04H
        POP     03H
        POP     02H
        POP     01H
        POP     00H
        POP     DPH
        POP     DPL
        POP     A
        POP     PSW
        RETI
;
;FUNCTION NAME : HEX_TO_BCD
;FUNCTION : CONVERT 20BIT BINARY TO 6 BYTE BCD CODE
;HEX DATA   IN (NUMBER_H:LOW 4bit only)(NUMBER_M)(NUMBER_L)
;BCD RESULT IN (09H)(08H)(07H)(06H),(09H) ALWAYS 00H
;
        MOV     03H,NUMBER_L
        MOV     04H,NUMBER_M
        MOV     05H,NUMBER_H
HEX_TO_BCD
        ANL     05H,#00001111B  ;GET ONLY LOW 4 BITS
        MOV     06H,#00H        ;CLEAR (06)(07)(08)(09)
        MOV     07H,#00H
        MOV     08H,#00H
        MOV     09H,#24         ;COUNT
$1      MOV     R0,#03H         ;BINARY POINTER
        MOV     R2,#03H         ;3 BYTE SHIFT LEFT
        CLR     C
$2      MOV     A,@R0           ;SHIFT LEFT 1 BIT WITH CARRY
        RLC     A
        MOV     @R0,A
        INC     R0
        DJNZ    R2,$2
        MOV     R2,#03H
$3      MOV     A,@R0           ;A=(06H)
        ADDC    A,A             ;A=A+CARRY
        DA      A               ;DECIMAL ADJUST
        MOV     @R0,A
        INC     R0
        DJNZ    R2,$3
        DJNZ    09H,$1
;
        MOV     R0,#08H
        MOV     R2,#03H
$31     MOV     A,@R0
        JNZ     $4
        ORL     A,#FFH
        MOV     @R0,A
        SJMP    $5
$4      ANL     A,#F0H
        JNZ     $6
        MOV     A,@R0
        ORL     A,#F0H
        MOV     @R0,A
        SJMP    $6
$5      DEC     R0
        DJNZ    R2,$31
        INC     R0
        MOV     @R0,#F0H
$6      RET
;
ADD_NUMBER                      ;NUMBER+1
        INC     U_CNT_L
        MOV     A,U_CNT_L
        JNZ     $1
        INC     U_CNT_M
$1      RET
;
CONVERT1
        MOV     03H,U_CNT_L
        MOV     04H,U_CNT_M
        MOV     05H,U_CNT_H
        CALL    HEX_TO_BCD      ;RESULT IN (08)(07)(06)
        MOV     R0,#DIGIT0
        MOV     A,08H
        ANL     A,#F0H          ;GET HIGHER 4 BITS
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT1
        MOV     A,08H
        ANL     A,#0FH          ;GET LOWER 4 BITS
        CALL    GET_PATTERN
        MOV     R0,#DIGIT2
        MOV     A,07H
        ANL     A,#F0H
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT3
        MOV     A,07H
        ANL     A,#0FH
        CALL    GET_PATTERN
        MOV     R0,#DIGIT4
        MOV     A,06H
        ANL     A,#F0H
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT5
        MOV     A,06H
        ANL     A,#0FH
        CALL    GET_PATTERN
        RET
;
CONVERT2
        MOV     03H,D_CNT_L
        MOV     04H,D_CNT_M
        MOV     05H,D_CNT_H
        CALL    HEX_TO_BCD      ;RESULT IN (08)(07)(06)
        MOV     R0,#DIGIT6
        MOV     A,08H
        ANL     A,#F0H          ;GET HIGHER 4 BITS
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT7
        MOV     A,08H
        ANL     A,#0FH          ;GET LOWER 4 BITS
        CALL    GET_PATTERN
        MOV     R0,#DIGIT8
        MOV     A,07H
        ANL     A,#F0H
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT9
        MOV     A,07H
        ANL     A,#0FH
        CALL    GET_PATTERN
        MOV     R0,#DIGIT10
        MOV     A,06H
        ANL     A,#F0H
        SWAP    A
        CALL    GET_PATTERN
        MOV     R0,#DIGIT11
        MOV     A,06H
        ANL     A,#0FH
        CALL    GET_PATTERN
        RET
;
SELF_TEST1
        MOV     TMP,#00H
$0      MOV     R0,#30H
$1      MOV     A,TMP
        CALL    GET_PATTERN
        INC     R0
        CJNE    R0,#(DIGIT11+1),$1
        CALL    TDELAY
        INC     TMP
        MOV     A,TMP
        CJNE    A,#10,$0
$2      RET
;
SELF_TEST2
        MOV     TMP,#00H
$0      MOV     R0,#30H
$1      MOV     A,TMP
        CALL    GET_PATTERN
        SETB    ACC.7
        MOV     @R0,A
        INC     R0
        CJNE    R0,#(DIGIT11+1),$1
        CALL    TDELAY
        INC     TMP
        MOV     A,TMP
        CJNE    A,#0AH,$0
        RET
;
SELF_TEST3
        MOV     R2,#08H
        MOV     TMP,#01H
$0      MOV     R0,#30H
$1      MOV     A,TMP
        MOV     @R0,A
        INC     R0
        CJNE    R0,#(DIGIT11+1),$1
        CALL    DELAY
        CALL    DELAY
        CALL    DELAY
        CALL    DELAY
        MOV     A,TMP
        RL      A
        MOV     TMP,A
        DJNZ    R2,$0
        RET
;
CLEAR   MOV     R0,#30H
$1      MOV     A,#00H
        MOV     @R0,A
        INC     R0
        CJNE    R0,#(DIGIT11+1),$1
        RET
;
ADD_U_CNT
        MOV     R0,#U_CNT_L
        JMP     ADD_CNT
ADD_D_CNT
        MOV     R0,#D_CNT_L
ADD_CNT MOV     A,@R0
        ADD     A,#UNIT
        MOV     @R0,A
        INC     R0
        MOV     A,@R0
        ADDC    A,#00H
        MOV     @R0,A
        INC     R0
        MOV     A,@R0
        ADDC    A,#00H
        MOV     @R0,A
        RET
;
SUBB_U_CNT
        MOV     R0,#U_CNT_L
        JMP     SUBB_CNT
SUBB_D_CNT
        MOV     R0,#D_CNT_L
SUBB_CNT
        CLR     C
        MOV     A,@R0
        SUBB    A,#UNIT
        MOV     @R0,A
        INC     R0
        MOV     A,@R0
        SUBB    A,#00H
        MOV     @R0,A
        INC     R0
        MOV     A,@R0
        SUBB    A,#00H
        MOV     @R0,A
        RET
;
SDELAY  MOV     R6,#05H
$1      MOV     R7,#00H
        DJNZ    R7,$
        DJNZ    R6,$1
        RET

DELAY   MOV     R6,#00H
$1      MOV     R7,#00H
        DJNZ    R7,$
        DJNZ    R6,$1
        RET
;
TDELAY  MOV     TMPX,#30H
$1      LCALL   DISP
        DJNZ    TMPX,$1
        RET
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -