ck.asm

来自「一个本人编写的时钟程序」· 汇编 代码 · 共 242 行

ASM
242
字号
                LED4    BIT     P1.7
                LED3    BIT     P1.6
                EXTRA   BIT     P1.5
                LED2    BIT     P1.4
                LED1    BIT     P1.3
                CLOCK   BIT     P3.1
                SIAB    BIT     P3.0

                KEYD    BIT     p3.5
                KEYC    BIT     p3.7

                BUFFER  EQU     30H;  30--LED4  31--LED3  32 LED2 33---LED1
                SCOUNT  EQU     40H
                 COUNT  EQU     41H
                MCOUNT  EQU     42H
                HCOUNT  EQU     43H

                FLAGD   EQU     45H
                FLAGC   EQU     46H

                ORG     0
                AJMP    START
                ORG     03H
                RETI
                ORG     0BH
                AJMP    SETTIME
                ORG     013H
                RETI
                ORG     01BH
                RETI
                ORG     023H
                RETI

                ORG     030H
       START:
                MOV     R0,     #70H
                MOV     A,      #0
      ClearRAM: MOV     @R0,    A
                DJNZ    R0,     ClearRAM
                MOV     SP,     #6FH
                MOV     P1,     #0FFH
                MOV     SCOUNT, #16
                MOV     COUNT,  #59
                
                MOV     MCOUNT, #0
                MOV     HCOUNT, #0
                MOV     FLAGC,  #-1
                MOV     FLAGD,  #0

                MOV     TMOD,   #01H
                MOV     TH0,    #0
                MOV     TL0,    #0
                SETB    EA
                SETB    ET0
                SETB    TR0
     SHOWLED:

                ;LCALL   Display
                MOV     A,     BUFFER
                CLR     LED4
                LCALL   SETLED234
                LCALL   Delay

                SETB    LED4
                MOV     A,      BUFFER+1
                CLR     LED3
                LCALL   SETLED234
                LCALL   Delay
 
                SETB    LED3

                AJMP    SHOWLED
;------------------------------------------------------------------
SETTIME:
                PUSH    PSW
                PUSH    ACC
                SETB    RS1
                MOV     TH0,    #0
                MOV     TL0,    #0
                DJNZ    SCOUNT, EXIT
                MOV     SCOUNT, #14
                DJNZ    COUNT,  EXIT
                MOV     COUNT,  #60
                MOV     A,      MCOUNT
                CJNE    A,      #59,    Mgo
                MOV     MCOUNT, #0
                MOV     A,      HCOUNT
                CJNE    A,      #23,    Hgo
                MOV     HCOUNT, #0
                AJMP    EXIT

      Hgo:
                INC    HCOUNT
                AJMP   EXIT

      Mgo:      INC    MCOUNT

      EXIT:     LCALL  DELAY
                LCALL   CHOICE
                LCALL   DECIDE
                LCALL   DOKEY

                POP    ACC
                POP    PSW
                NOP
                NOP
                RETI
;----------------------------------------------------------------------------
SETLED:
                MOV     R0,     #08H
         Again: RLC     A
                MOV     SIAB,   C
                SETB    CLOCK
                CLR     CLOCK
                DJNZ    R0,  Again
                NOP
                NOP
                RET
;------------------------------------------------------------------------------
Display:
                MOV     A,              MCOUNT
                MOV     B,              #10
                DIV     AB
                MOV     BUFFER,         B
                MOV     BUFFER+1,       A
                MOV     A,              HCOUNT
                MOV     B,              #10
                DIV     AB
                MOV     BUFFER+2,       B
                MOV     BUFFER+3,       A
                NOP
                NOP
                RET
;----------------------------------------------------------------------------------
 SETLED234:
                MOV     DPTR,           #TABLE_LED234
                MOVC    A,              @A+DPTR
                LCALL   SETLED
                NOP
                NOP
                RET

SETLED1:
                MOV     DPTR,           #TABLE_LED1
                MOVC    A,              @A+DPTR
                LCALL   SETLED
                NOP
                NOP
                RET
;-------------------------------------------------------------------------------------
CHOICE:
                SETB     C
                ANL      C,     KEYC
                JNC      Doup
                JMP      Next
      Doup:     LCALL    DELY10US
                SETB     C
                ANL      C,     KEYC
                JNC      DO_CHOICE
                JMP      Next
    DO_CHOICE:
                INC      FLAGC
                MOV      A,     FLAGC
                MOV      B,     #2
                DIV      AB
                MOV      FLAGC, B
     Next:
                NOP
                NOP
                RET
;-----------------------------------------------------------------------------------
DECIDE:
                SETB    C
                ANL     C,      KEYD
                JNC     Doudong
                JMP     Return
       Doudong:
                LCALL   DELY10US
                SETB    C
                ANL     C,      KEYD
                JNC     DO_WHAT
                JMP     Return
     DO_WHAT:   MOV     FLAGD,  #1

       Return:
                NOP
                NOP
                RET
;-----------------------------------------------------------------------------------
 DOKEY:
                MOV     A,  FLAGC
                CJNE    A,  #0, XIA
                MOV     A,  FLAGD
                CJNE    A,  #1, WAIT
                MOV     A,  MCOUNT
                CJNE    A,  #59,  MCHU
                MOV     MCOUNT, #0
                JMP     WAIT
         MCHU:  INC     MCOUNT
                JMP     WAIT
          XIA:  MOV     A,  FLAGC
                CJNE    A,  #1, WAIT
                MOV     A,  FLAGD
                CJNE    A,  #1, WAIT
                MOV     A,  HCOUNT
                CJNE    A,  #23,  HCHU
                MOV     HCOUNT,   #0
                JMP     WAIT
          HCHU: INC     HCOUNT
          WAIT:
                MOV     FLAGD,    #0
                NOP
                NOP
                RET
;-------------------------------------------------------------------------------------
DELAY:
                MOV     R0, #0DFH
          D1:   MOV     R1, #2
          D2:   DJNZ    R1, D2
                DJNZ    R0, D1
                RET
;------------------------------------------------------------------------------------
DELY10US:
            MOV       R6,#0FFH
   Huan:    MOV       R5,#4
   XUN:     DJNZ      R5,XUN
            DJNZ      R6, Huan
            RET
;------------------------------------------------------------------------------------
 TABLE_LED1:
;LED1段码       0           1        2           3        4          5        6           7       8          9
          DB  01010000b,11111001b,00110100b,10110000b,10011001b,10010010b,00010010b,11111000b,00010000b,10010000b,0ffh
 TABLE_LED234:
;LED234段码
          DB  11000000b,11111001b,10100100b,10110000b,10011001b,10010010b,10000010b,11111000b,10000000b,10010000b,0ffh
 TABLE_extra:
          DB  11111110B,11111101B,11111011B, 11110111B,11101111B,11011111B,10111111B,0h,0ffh,0ffh,0ffh

                END


⌨️ 快捷键说明

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