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

📄 电子钟源程序.asm

📁 自行开发的51单片机电子钟程序
💻 ASM
字号:
硬特殊:
阴驱动:74LS06
阳驱动:74LS244
串口传输:RCL232




软程序
KEY1_STA BIT     00H     ;20H be used for 8 bits indicate 00h:key status = 1 if key put down
KEY2_STA BIT     01H
KEY3_STA BIT     02H
LED1_STA BIT     03H
LED2_STA BIT     04H
TIMEOUT  BIT     05H     ;be set '1' once 2ms
MYCODE   BIT     06H     ;for protecting serial receipt
BOOL     BIT     07H     ;for alarming
ALARM1   BIT     08H     ;status for alarm1
ACC_6    BIT     0E6H
ACC_7    BIT     0E7H

HOURH   EQU     22H
HOURL   EQU     23H
MINUTEH EQU     24H
MINUTEL EQU     25H
SECONDH EQU     26H
SECONDL EQU     27H
COUNT0  EQU     28H     ;counter for watch : 0--50
COUNT1  EQU     29H     ;delay counter for key scaning : 0--10
COUNT2  EQU     2AH     ;bit code for negative scaning : 0--6
COUNT3  EQU     2BH     ;counter for serial receipt :0-3
COUNT4  EQU     2CH     ;counter for bell
COUNT5  EQU     2DH     ;for seting time
COUNT6  EQU     2EH     ;for seting bell time
BUF0    EQU     2FH     ;for serial receipt
BUF1    EQU     30H
BUF2    EQU     31H
BUF3    EQU     32H
BE_HOUR EQU     33H     ;for seting bell time
BE_MINUTE EQU     34H
BE_SECOND EQU     35H


        ORG     0000H
        JMP     START
        ORG     000BH
        JMP     TIME0
        ORG     0023H
        JMP     SERIAL_RECV
        ORG     0100H
START:  MOV     SP,#50H         ;initialization
        MOV     SCON,#50H
        MOV     PCON,#00H
        MOV     TMOD,#21H
        MOV     TL0,#02FH
        MOV     TH0,#0F8H
        MOV     TL1,#0E5H
        MOV     TH1,#0E5H
        SETB    TR0
        SETB    TR1
        SETB    ET0
        SETB    EA
        SETB    ES

        MOV     COUNT0,#00H
        MOV     COUNT1,#00H
        MOV     R2,#0
        MOV     R3,#0
        MOV     R4,#0
        MOV     COUNT2,#01H
        MOV     COUNT3,#00H
        MOV     COUNT4,#00H
        MOV     COUNT5,#00H
        MOV     COUNT6,#00H
        MOV     BE_HOUR,#00H
        MOV     BE_MINUTE,#00H
        MOV     BE_SECOND,#00H
        

        MOV     R0,#HOURH
        MOV     P1,#00h
        MOV     P2,#00h
        CLR     P3.5
        CLR     KEY1_STA
        CLR     LED1_STA
        CLR     LED2_STA
        CLR     MYCODE
        CLR     ALARM1
        CLR     BOOL
        MOV     DPTR,#0800H

WAIT0:  MOV     A,COUNT0
        CJNE    A,#32H,WAIT1     ;working for watch once 1s
        MOV     COUNT0,#00H
        MOV     A,COUNT5
        JNZ     SKIP4
        ACALL   WATCH_COUNT
        ACALL   COMPARE
        MOV     A,COUNT6
        JNZ     SKIP3
        ACALL   TIME_DEAL
        SJMP    SKIP4
SKIP3:  MOV     BUF1,R4
        MOV     BUF2,R3
        MOV     BUF3,R2
        MOV     R4,BE_HOUR
        MOV     R3,BE_MINUTE
        MOV     R2,BE_SECOND
        ACALL   TIME_DEAL
        MOV     R2,BUF3
        MOV     R3,BUF2
        MOV     R4,BUF1
SKIP4:  CPL     BOOL
WAIT1:  MOV     A,COUNT1
        CJNE    A,#0AH,WAIT2     ;key scaning once 20ms
        MOV     COUNT1,#00H
        ACALL   KEY_SCAN
        JNB     ALARM1,WAIT2
        ACALL   BELL
WAIT2:  JNB     TIMEOUT,WAIT0         ;displaying once 2ms
        CLR     TIMEOUT
        ACALL   DISPLAY
        JMP     WAIT0

WATCH_COUNT:
        INC     R2
        CJNE    R2,#60,STOP0
        MOV     R2,#0
        INC     R3
        CJNE    R3,#60,STOP0
        MOV     R3,#0
        INC     R4
        CJNE    R4,#24,STOP0
        MOV     R4,#0
STOP0:  RET

TIME_DEAL:
        MOV     A,R4
        MOV     B,#0AH
        DIV     AB
        MOV     HOURH,A
        MOV     HOURL,B
        MOV     A,R3
        MOV     B,#0AH
        DIV     AB
        MOV     MINUTEH,A
        MOV     MINUTEL,B
        MOV     A,R2
        MOV     B,#0AH
        DIV     AB
        MOV     SECONDH,A
        MOV     SECONDL,B
        RET

KEY_SCAN:
        SETB    P3.2
        MOV     C,P3.2
        JC      UP1_KEY
        JB      KEY1_STA,STOP1
        SETB    KEY1_STA

        MOV     COUNT6,#00H
        INC     COUNT5           ;set counter to modify time 
        MOV     A,COUNT5
        CJNE    A,#04H,STOP1
        MOV     COUNT5,#00H
        
        SJMP    STOP1
UP1_KEY: JNB     KEY1_STA,STOP1
        CLR     KEY1_STA
STOP1:
        SETB    P3.3
        MOV     C,P3.3
        JC      UP2_KEY
        JB      KEY2_STA,STOP2
        SETB    KEY2_STA

        
        MOV     A,COUNT5         ;to increase system time 
        JZ      SKIP1
        CJNE    A,#01H,NEXT20
        INC     R4
        CJNE    R4,#24,SKIP0
        MOV     R4,#00H
        SJMP    SKIP0
NEXT20: CJNE    A,#02H,NEXT21
        INC     R3
        CJNE    R3,#60,SKIP0
        MOV     R3,#00H
        SJMP    SKIP0
NEXT21: CJNE    A,#03H,SKIP1
        INC     R2  
        CJNE    R2,#60,SKIP0
        MOV     R2,#00H
SKIP0:  ACALL   TIME_DEAL          
        ACALL   DISPLAY
        
SKIP1:  MOV     A,COUNT6
        JZ      STOP2
        CJNE    A,#01H,NEXT30
        INC     BE_HOUR
        MOV     A,BE_HOUR
        CJNE    A,#24,SKIP2
        MOV     BE_HOUR,#00H
        SJMP    SKIP2
NEXT30: CJNE    A,#02H,NEXT31
        INC     BE_MINUTE
        MOV     A,BE_MINUTE
        CJNE    A,#60,SKIP2
        MOV     BE_MINUTE,#00H
        SJMP    SKIP2
NEXT31: CJNE    A,#03,STOP2
        INC     BE_SECOND
        MOV     A,BE_SECOND
        CJNE    A,#60,SKIP2
        MOV     BE_SECOND,#00H                                       
SKIP2:  MOV     BUF1,R4
        MOV     BUF2,R3
        MOV     BUF3,R2
        MOV     R4,BE_HOUR
        MOV     R3,BE_MINUTE
        MOV     R2,BE_SECOND
        ACALL   TIME_DEAL
        MOV     R2,BUF3
        MOV     R3,BUF2
        MOV     R4,BUF1
          
        SJMP    STOP2
UP2_KEY: JNB     KEY2_STA,STOP2
        CLR     KEY2_STA
STOP2:
        SETB    P3.4
        MOV     C,P3.4
        JC      UP3_KEY
        JB      KEY3_STA,STOP3
        SETB    KEY3_STA

        MOV     COUNT5,#00H
        INC     COUNT6           ;get counter to  set bell time 
        MOV     A,COUNT6
        CJNE    A,#04H,STOP3
        MOV     COUNT6,#00H
        
        SJMP    STOP3
UP3_KEY: JNB     KEY3_STA,STOP3
        CLR     KEY3_STA
STOP3:
        RET

DISPLAY:
        MOV     A,COUNT2           ;negative scaning
        MOV     C,LED1_STA
        MOV     ACC_6,C
        MOV     C,LED2_STA
        MOV     ACC_7,C
        MOV     P1,A
        MOV     A,COUNT2
        RL      A
        MOV     COUNT2,A
        CJNE    A,#40H,NEXT1
        MOV     COUNT2,#01H

NEXT1:  MOV     A,@R0                   ;positive scaning
        MOVC     A,@A+DPTR
        MOV     P2,A
        CJNE    R0,#SECONDL,NEXT2
        MOV     R0,#HOURH
        SJMP    STOP4
NEXT2:  INC     R0
STOP4:
        RET

TIME0:  PUSH    A
        CLR     TR0
        MOV     TL0,#02FH
        MOV     TH0,#0F8H
        SETB    TR0
        SETB    TIMEOUT
        INC     COUNT1
        MOV     A,COUNT1
        CJNE    A,#0AH,NEXT0

        INC     COUNT0
NEXT0:  POP     A
        RETI
SERIAL_RECV:
        PUSH    A
        CLR     RI
        MOV     A,SBUF
        MOV     BUF0,A
        JNB     MYCODE,NEXT5
        MOV     A,COUNT3
        INC     COUNT3
        JNZ     NEXT3
        MOV     R4,BUF0
        SJMP    STOP5
NEXT3:  CJNE    A,#01H,NEXT4
        MOV     A,BUF0
        MOV     R3,A
        SJMP    STOP5
NEXT4:  CJNE    A,#02H,STOP5
        MOV     R2,BUF0
        MOV     COUNT3,#00H
        CLR     MYCODE
        SJMP    STOP5
NEXT5:  CJNE    A,#99,STOP5
        SETB    MYCODE
STOP5:  POP     A
        RETI

BELL:   PUSH    A
        JB      BOOL,STOP6
        MOV     A,COUNT0
        CJNE    A,#1,NEXT6
        SETB    P3.5
NEXT6:  CJNE    A,#12,NEXT7
        CLR     P3.5
NEXT7:  CJNE    A,#19,NEXT8
        SETB    P3.5
NEXT8:  CJNE    A,#31,NEXT9
        CLR     P3.5
NEXT9:  CJNE    A,#38,NEXT10
        SETB    P3.5
NEXT10: CJNE    A,#49,STOP6
        CLR     P3.5
        INC     COUNT4
        MOV     A,COUNT4
        CJNE    A,#10,STOP6
        MOV     COUNT4,#00H
        CLR     ALARM1
STOP6:  POP     A
        RET

COMPARE:
        MOV     A,R4
        CJNE    A,BE_HOUR,STOP10
        MOV     A,R3
        CJNE    A,BE_MINUTE,STOP10
        MOV     A,R2
        CJNE    A,BE_SECOND,STOP10
        SETB    ALARM1        
STOP10:
        RET
        ORG   0800H
TAB:    DB    3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
        END
;4.6,3.8;3.75,3.75;3.6,3.3




⌨️ 快捷键说明

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