標(biāo)題: 我的51單片機電子鐘程序設(shè)計(匯編語言) [打印本頁]

作者: backhere    時間: 2019-5-31 15:39
標(biāo)題: 我的51單片機電子鐘程序設(shè)計(匯編語言)
這是我最近課上做的基于單片機開發(fā)板的匯編程序設(shè)計,內(nèi)容是電子鐘的控制。利用定時器每100ms中斷一次,中斷10次自以為基準(zhǔn),設(shè)計一個24小時制數(shù)字電子鐘,并在開發(fā)機上數(shù)碼管以時分秒的形式顯示。

        ORG 0000H
        LJMP MAIN
        ORG 000BH
        LJMP INT0
        ORG 0100H
MAIN:   MOV SP,#70H
        MOV 22H,#00H
        MOV 23H,#00H
        MOV 24H,#00H
        MOV TMOD,#01H
        MOV TH0,#3CH
        MOV TL0,#0B0H
        MOV R5,#14H
        SETB EA
        SETB TR0
        SETB ET0
        CLR C
        MOV A,22H
        SUBB A,#59H
        JNC L11
        CLR C
        MOV A,23H
        SUBB A,#59H
        JNC L11
        CLR C
        MOV A,22H
        SUBB A,#23H
        CLR 20H.0
        CLR 20H.1
        CLR 20H.2
        JNC L11
        LJMP L12


L11:    MOV 24H,#00H
        MOV 23H,#00H
        MOV 22H,#12H


L12:    JB 20H.0,DO1
        JB 20H.1,DO2
        JB 20H.2,DO3
        LCALL MOVE
        LCALL DISP
        LCALL KEY
        SJMP L12
DO1:    CLR TR0
        MOV 30H,24H
        LCALL MOVE
        LCALL DISP
        LCALL KEY
        MOV A,30H
        CJNE A,#60H,TO1
        MOV 30H,#00H
TO1:    MOV 24H,30H
        SETB TR0
        LJMP L12

DO2:    CLR TR0
        MOV 30H,23H
        LCALL MOVE
        LCALL DISP
        LCALL KEY
        MOV A,30H
        CJNE A,#60H,TO2
        MOV 30H,#00H
TO2:    MOV 23H,30H
        SETB TR0
          LJMP L12

DO3:     CLR TR0
         MOV 30H,22H
        LCALL MOVE
        LCALL DISP
        LCALL KEY
        MOV A,30H
        CJNE A,#24H ,TO3
        MOV 30H,#00H
TO3:     MOV 22H,30H
        SETB TR0
        LJMP L12

KEY:    CLR A
        MOV DPTR,#8002H
        MOVX @DPTR,A
        MOV DPTR,#8001H
        MOVX A,@DPTR
        ANL A,#0FH
        CPL A
        JZ EXIT1

        CLR A              ;只能用段碼來關(guān)
        MOV DPTR,#8004H
        MOVX @DPTR,A

        MOV R3,#00H
        MOV R4,#0FEH
        MOV R7,#06H

LOOP1:  MOV A,R4
        MOV DPTR,#8002H
        MOVX @DPTR,A
        MOV DPTR,#8001H
        MOVX A,@DPTR
        MOV R1,A
        CPL A
        ANL A,#0FH
        JNZ L0
        INC R3
        MOV A,R4
        RL A
        MOV R4,A
        DJNZ R7,LOOP1
        LJMP EXIT1
L0:     MOV A,R1             ;開始行掃描并計數(shù)在R6
        JB ACC.0,L1
        MOV R6,#00H
        LJMP L4
L1:     JB ACC.1,L2
        MOV R6,#01H
        LJMP L4
L2:     JB ACC.2,L3
        MOV R6,#02H
        LJMP L4
L3:     JB ACC.3,EXIT1
        MOV R6,#03H
L4:     MOV B,#04H
        MOV A,R3
        MUL AB
        ADD A,R6
        MOV DPTR,#DATA0
        MOVC A,@A+DPTR
        CJNE A,#13H,COM2
        CPL 20H.0
COM2:   CJNE A,#12H,COM3
        CPL 20H.1
COM3:   CJNE A,#11H,COM4
        CPL 20H.2
COM4:   CJNE A,#16H,COM5
        MOV A,30H
        ADD A,#99H
        DA A
        MOV 30H,A
        SJMP LOCK
COM5:   CJNE A,#15H,LOCK
        MOV A,30H
        ADD A,#01H
        DA A
        MOV 30H,A
LOCK:   CLR A
        MOV DPTR,#8002H
        MOVX @DPTR,A
        MOV DPTR,#8001H
        MOVX A,@DPTR
        MOV R1,A
        CPL A
        ANL A,#0FH
        JNZ LOCK
EXIT1:  RET




INT0:   PUSH A
        PUSH PSW
        CLR EA
        MOV TH0,#3CH
        MOV TL0,#0B0H
        DJNZ R5,EXIT
        MOV R5,#14H
        MOV A,24H
        ADD A,#01H
        DA A
        MOV 24H,A
        CJNE A,#60H,EXIT
        MOV 24H,#00H
        MOV A,23H
        ADD A,#01H
        DA A
        MOV 23H,A
        CJNE A,#60H,EXIT
        MOV 23H,#00H
        MOV A,22H
        ADD A,#01H
        DA A
        MOV 22H,A
        CJNE A,#24H,EXIT
        MOV 22H,#00H
EXIT:   POP PSW
        POP A
        SETB EA
        SETB TR0
        RETI

MOVE:   MOV A,24H
        ANL A,#0FH
        MOV 55H,A
        MOV A,24H
        SWAP A
        ANL A,#0FH
        MOV 54H,A
        MOV A,23H
        ANL A,#0FH
        MOV 53H,A
        MOV A,23H
        SWAP A
        ANL A,#0FH
        MOV 52H,A
        MOV A,22H
        ANL A,#0FH
        MOV 51H,A
        MOV A,22H
        SWAP A
        ANL A,#0FH
        MOV 50H,A
        RET


DISP:   MOV R0,#50H
        MOV R1,#06H
        MOV R2,#20H
LOOP2:  CLR A
        MOV DPTR,#8002H
        MOVX @DPTR,A
        MOV A,@R0
        MOV DPTR,#DATA1
        MOVC A,@A+DPTR
        MOV DPTR,#8004H
        MOVX @DPTR,A
        MOV DPTR,#8002H
        MOV A,R2
        MOVX @DPTR,A
        LCALL DELAY1
        INC R0
        RR A
        MOV R2,A
        DJNZ R1,LOOP2
        RET
DELAY1: MOV R3,#5
DELAY2: MOV R4,#100
        DJNZ R4,$
        DJNZ R3,DELAY2
        RET
DATA0:  DB 16H,15H,14H,0FFH,13H,12H,11H,10H,0DH,0CH,0BH,0AH,0EH,03H,06H,09H,0FH,02H,05H,08H,00H,01H,04H,07H
DATA1:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
        DB 6FH,77H,7CH,39H,5EH,79H,71H,00H,0F6H,0F3H
        END


作者: admin    時間: 2019-6-1 03:05
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者: 521yyy    時間: 2020-1-1 15:52
能發(fā)一下protues仿真圖嗎

作者: 521yyy    時間: 2020-1-1 16:11
有protues仿真圖嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1