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

📄 abc.asm

📁 用89c51实现数字时钟
💻 ASM
字号:
;**********主程序MAIN**********
ORG      0000H
AJMP     MAIN
ORG      000BH
AJMP     CLOCK
ORG      0030H
PORT     EQU      8000H
PORTA    EQU      8001H
PORTB    EQU      8002H
PORTC    EQU      8003H
DISP0    EQU      30H
DISP1    EQU      31H
DISP2    EQU      32H
DISP3    EQU      33H
DISP4    EQU      34H
DISP5    EQU      35H
HOUR     EQU      3CH
MIN      EQU      3DH
SEC      EQU      3EH
MSEC     EQU      3FH
AHOUR    EQU      40H
AMIN     EQU      41H
ASEC     EQU      42H
F1       BIT      PSW.1

MAIN:  MOV    SP,#50H
       MOV    DPTR,#PORT
		 MOV    A,#03H
		 MOVX   @DPTR,A
		 CLR    F1
		 CLR    F0
		 MOV    AHOUR,#0FFH
		 MOV    AMIN,#0FFH
		 MOV    ASEC,#0FFH
		 MOV    R7,#10H
		 MOV    R0,#DISP0
		 CLR    A
LOOP:    MOV    @R0,A
         INC    R0
		 DJNZ   R7,LOOP
		 MOV    TMOD,#01H
		 MOV    TL0,#0B0H
		 MOV    TH0,#3CH
		 SETB   TR0
		 SETB   EA
		 SETB   ET0
BEGIN: ACALL  ALARM
       ACALL  KEYSCAN
		 CJNE   A,#0AH,NEXT1
		 CLR    TR0
		 MOV    R1,#HOUR
		 AJMP   MOD1
NEXT1: CJNE   A,#0BH,BEGIN
		 JB     F1,NEXT2
		 MOV    R1,#AHOUR
MOD1:   SETB   F0
       ACALL  MODIFY
		 SETB   TR0
		 CLR    F0
		 AJMP   BEGIN
NEXT2: SETB   P1.0
       CLR    F1
		 AJMP   BEGIN
;**********时间设置/闹钟定时模块MODIFY**********
MODIFY:ACALL  KEYIN
       ACALL  COMB
		 RET
;**********键盘设置子程序KEYIN**********
KEYIN: PUSH   PSW
       PUSH   ACC
		 SETB   RS1
		 MOV    R0,#DISP0
		 MOV    R7,#06H
L1:    CLR    RS1
       ACALL  KEYSCAN
		 SETB   RS1
		 CJNE   A,#0AH,L2
L2:    JNC    L1
       MOV    @R0,A
		 INC    R0
		 DJNZ   R7,L1
		 POP    ACC
		 POP    PSW
		 CLR    RS1
		 RET
;**********键盘扫描子程序KEYSCAN**********
KEYSCAN: ACALL  TEST
         JNZ    REMOV
		 ACALL  DISPLAY
		 ACALL  ALARM
		 AJMP   KEYSCAN
REMOV:   ACALL  DISPLAY
         ACALL  ALARM
		 ACALL  TEST
		 JNZ    LIST
		 ACALL  DISPLAY
		 ACALL  ALARM
		 AJMP   KEYSCAN
LIST:    MOV    R2,#0FEH
		 MOV    R3,#00H
LINE0:   MOV    DPTR,#PORTA
         MOV    A,R2
		 MOVX   @DPTR,A
		 MOV    DPTR,#PORTC
		 MOVX   A,@DPTR
		 JB     ACC.0,LINE1
		 MOV    A,#00H
		 AJMP   TRYK
LINE1:   JB     ACC.1,LINE2
         MOV    A,#04H
		 AJMP   TRYK
LINE2:   JB     ACC.2,NEXT
         MOV    A,#08H
		 AJMP   TRYK
NEXT:    INC    R3
         MOV    A,R2
		 JNB    ACC.3,EXIT
		 RL     A
		 MOV    R2,A
		 AJMP   LINE0
EXIT:	 AJMP   KEYSCAN
TRYK:    ADD  	A,R3
         PUSH   ACC
LETK:    ACALL  TEST
         JNZ    LETK
		 POP    ACC
		 RET
TEST:    MOV    DPTR,#PORTA
         MOV    A,#00H
		 MOVX   @DPTR,A
		 MOV    DPTR,#PORTC
		 MOVX   A,@DPTR
		 CPL    A
		 ANL    A,#07H
		 RET
;**********显示子程序DISPLAY**********
DISPLAY: JB     F0,DISP
         ACALL  SEPA
DISP:    PUSH   PSW
         PUSH   ACC
		 SETB   RS0
		 MOV    DPTR,#PORTA
		 MOV    A,#0FFH
		 MOVX   @DPTR,A
		 MOV    R0,#DISP0
		 MOV    R7,#00H
		 MOV    R6,#06H
		 MOV    R5,#0FEH
DIS1:    MOV    DPTR,#TAB
         MOV    A,@R0
		 MOVC   A,@A+DPTR
		 MOV    DPTR,#PORTB
		 MOVX   @DPTR,A
		 MOV    DPTR,#PORTA
		 MOV    A,R5
		 MOVX   @DPTR,A
HERE:    DJNZ   R7,HERE
         INC    R0
		 MOV    A,R5
		 RL     A
		 MOV    R5,A
		 DJNZ   R6,DIS1
		 CLR    RS0
		 POP    ACC
		 POP    PSW
		 RET
TAB:     DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H
         DB     7FH,6FH,77H,7CH,39H,5EH,79H,71H
;**********合字子程序COMB**********
COMB:    MOV    R0,#DISP1
         ACALL  COMB1
		 CJNE   A,#24H,CHK
CHK:     JNC    EXIT1
         MOV    @R1,A
		 INC    R1
		 MOV    R0,#DISP3
		 ACALL  COMB1
		 CJNE   A,#60H,CHK1
CHK1:    JNC    EXIT1
         MOV    @R1,A
		 INC    R1
		 MOV    R0,#DISP5
		 ACALL  COMB1
		 CJNE   A,#60H,CHK2
CHK2:    JNC    EXIT1
         MOV    @R1,A
		 RET
EXIT1:   AJMP   MAIN
COMB1:   MOV    A,@R0
         ANL    A,#0FH
		 MOV    43H,A
		 DEC    R0
		 MOV    A,@R0
		 ANL    A,#0FH
		 SWAP   A
		 ORL    A,43H
		 RET
;**********拆字子程序SEPA**********
SEPA:    PUSH   PSW
         PUSH   ACC
		 SETB   RS0
		 MOV    R0,#DISP5
		 MOV    A,SEC
		 ACALL  SEPA1
		 MOV    A,MIN
		 ACALL  SEPA1
		 POP    ACC
		 POP    PSW
		 RET
SEPA1:   MOV    44H,A
         ANL    A,#0FH
		 MOV    @R0,A
		 DEC    R0
		 MOV    A,44H
		 ANL    A,#0F0H
		 SWAP   A
		 MOV    @R0,A
		 RET
;************定时比较模块****************
ALARM: MOV A,ASEC
       CJNE A,SEC,BACK
		 MOV A,AMIN
		 CJNE A,AMIN,BACK
		 MOV A,AHOUR
		 CJNE A,HOUR,BACK
		 CLR P1.0
		 SETB F1
BACK:  RET
;**********定时器0中断服务子程序CLOCK**********
CLOCK:   MOV    TL0,#0B7H
         MOV    TH0,#3CH
		 PUSH   PSW
		 PUSH   ACC
		 INC    MSEC
		 MOV    A,MSEC
		 CJNE   A,#0AH,DONE
		 MOV    MSEC,#00H
		 MOV    A,SEC
		 ADD    A,#01H
		 DA     A
		 MOV    SEC,A
		 CJNE   A,#60H,DONE
		 MOV    SEC,#00H
		 MOV    A,MIN
		 ADD    A,#01H
		 DA     A
		 MOV    MIN,A
		 CJNE   A,#60H,DONE
		 MOV    MIN,#00H
		 MOV    A,HOUR
		 ADD    A,#01H
		 DA     A
		 MOV    HOUR,A
		 CJNE   A,#24H,DONE
		 MOV    HOUR,#00H
DONE:    POP    ACC
         POP    PSW
		 RETI

		 		     

		 		 		  		 		 		 		 		   		 		 		 		  		 		  		    

END

⌨️ 快捷键说明

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