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

📄 alarm_clock1.asm

📁 用51系列单片机实现电子闹钟的功能
💻 ASM
字号:
LED7A_CTRL    EQU    P1.0
LED7B_CTRL    EQU    P1.1
LED7C_CTRL    EQU    P1.2
LED7D_CTRL    EQU    P1.3

LED7_STATUS   EQU    P0

LED7A_DATA    EQU    70H
LED7B_DATA    EQU    71H
LED7C_DATA    EQU    72H
LED7D_DATA    EQU    73H

LED7_NUM      EQU    74H

KEY_STATUS    EQU    P2
DATA_TEST     EQU    75H
KEY_DATA      EQU    76H
CHECK_TIME    EQU    77H

LED7_DOT      EQU    P0.7
TIME_DOT      EQU    6FH
DOT_STATUS    EQU    20H.0

TIME_SECOND   EQU    60H				
TIME_MINUTE   EQU    61H					
TIME_HOUR     EQU    62H				

DS1302_CLK    EQU    P1.5                    
DS1302_IO     EQU    P1.6                  
DS1302_RST    EQU    P1.7 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              
              ORG     0000H
              SJMP    START
              
              ORG     000BH
              LJMP    LED7_SCAN
              
              
START:        MOV     TMOD,#01H
              MOV     7BH,#1
              MOV     7AH,#10
              MOV     TH0,#0ECH
              MOV     TL0,#78H
              SETB    ET0
              SETB    TR0
              SETB    EA
              
              MOV    LED7A_DATA,#0
              MOV    LED7B_DATA,#0
              MOV    LED7C_DATA,#0
              MOV    LED7D_DATA,#0
              
              LCALL   KEYCHECK
              
              
              MOV    A,LED7A_DATA
              ANL    A,#0FH
              SWAP   A
              MOV    55H,A
              MOV    A,LED7B_DATA
              ANL    A,#0FH
              ORL    A,55H
              MOV    TIME_HOUR,A

              MOV    A,LED7C_DATA
              ANL    A,#0FH
              SWAP   A
              MOV    55H,A
              MOV    A,LED7D_DATA
              ANL    A,#0FH
              ORL    A,55H
              MOV    TIME_MINUTE,A

              MOV	TIME_SECOND, #00H		;设置时间秒值
              CLR       EA
 	      CALL	DS1302_SET				;DS1302设置时间
              CLR	DOT_STATUS
              SETB   EA

S1:
	       LCALL	DS1302_GET				;DS1302获取时间

S2:
	       MOV	 A, TIME_MINUTE			;将时间分显示在LED上
	       ANL	 A, #0FH
	       MOV	 LED7D_DATA,A
	       MOV	 A, TIME_MINUTE
	       SWAP	 A
	       ANL	 A,#0FH
      	       MOV	 LED7C_DATA,	A
               MOV	 A, TIME_HOUR			;将时间时显示在LED上
	       ANL	 A, #0FH
	       MOV	 LED7B_DATA,A
	       MOV	 A, TIME_HOUR
	       SWAP	 A
               ANL	 A,#0FH
               MOV	 LED7A_DATA,	A
               
               CALL	DELAY      ;延时

               MOV     A, TIME_MINUTE
               CJNE    A,#0,S1
               MOV     A,TIME_HOUR
               CJNE    A,#12H,S1
               
               MOV     7BH,#0

              
              


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYCHECK:     MOV    R7,#0

KEYCHECK0:    MOV    DATA_TEST,#0EFH
              MOV    CHECK_TIME,#4
              MOV    KEY_DATA,#10


KEYCHECK1:    MOV    KEY_STATUS,DATA_TEST
              MOV    A,DATA_TEST
              RL     A
              MOV    DATA_TEST,A
              MOV    A,KEY_STATUS
              ANL    A,#0FH
              CJNE   A,#0FH,KEYCHECK2                    ;有键按下则跳到KEYCHECK2
              SJMP   KEYCHECK3

KEYCHECK2:    MOV    A,KEY_DATA
              DEC    A
              MOV    DPTR,#KEY_TAB
              MOVC   A,@A+DPTR
              CJNE   A,KEY_STATUS,KEYCHECK4
              MOV    A,KEY_DATA
              DEC    A


KC0:          CJNE   R7,#0,KC1
              MOV    LED7A_DATA,A
              SJMP   KC4

KC1:          CJNE   R7,#1,KC2
              MOV    LED7B_DATA,A
              SJMP   KC4

KC2:          CJNE   R7,#2,KC3
              MOV    LED7C_DATA,A
              SJMP   KC4

KC3:          MOV    LED7D_DATA,A
              LJMP   CHECK_END

KC4:          INC    R7
              LCALL  DELAY
              LCALL  DELAY
              LJMP   KEYCHECK0

KEYCHECK3:    DJNZ   CHECK_TIME,KEYCHECK1
              MOV    CHECK_TIME,#4
              MOV    DATA_TEST,#0EFH
              SJMP   KEYCHECK1

KEYCHECK4:    DJNZ   KEY_DATA,KEYCHECK2
              MOV    KEY_DATA,#10
              SJMP   KEYCHECK0

CHECK_END:    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LED7_SCAN:    PUSH   ACC
              PUSH   PSW
              PUSH   DPL
              PUSH   DPH
              MOV    DPTR,#LED7_TAB

              MOV    A,LED7_NUM

              CJNE   A,#0,SCAN1
              SETB   LED7D_CTRL
              MOV    A,LED7A_DATA
              MOVC   A,@A+DPTR
              CLR    LED7A_CTRL
              SJMP   SCAN4

SCAN1:        CJNE   A,#1,SCAN2
              SETB   LED7A_CTRL
              MOV    A,LED7B_DATA
              MOVC   A,@A+DPTR
              CLR    LED7B_CTRL
              SJMP   SCAN4

SCAN2:        CJNE   A,#2,SCAN3
              SETB   LED7B_CTRL
              MOV    A,LED7C_DATA
              MOVC   A,@A+DPTR
              CLR    LED7C_CTRL
              SJMP   SCAN4

SCAN3:        
              SETB   LED7C_CTRL
              MOV    A,LED7D_DATA
              MOVC   A,@A+DPTR
              CLR    LED7D_CTRL
              MOV    LED7_NUM,#0
              SJMP   SCAN5

SCAN4:        INC    LED7_NUM
SCAN5:        MOV    LED7_STATUS,A

SCAN6:        DJNZ   TIME_DOT,SCAN7
              MOV    TIME_DOT,#100
              CPL    DOT_STATUS

SCAN7:        JB     DOT_STATUS,SCAN8
              CLR    LED7_DOT
              SJMP   END0

SCAN8:        SETB   LED7_DOT
              MOV    A,7BH
              CJNE   A,#0,END0

SCAN9:
              
              DEC    7AH
              MOV    A,7AH
              JNZ    BELL
              MOV    7AH,#10
              SJMP   END0
              
BELL:         CPL    P3.7
END0:         MOV    TH0,#0ECH
              MOV    TL0,#78H
                 
              

              POP    DPH
              POP    DPL
              POP    PSW
              POP    ACC
              RETI
              
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DS1302_SET:
          CLR    DS1302_RST
          CLR    DS1302_CLK
          SETB   DS1302_RST
          MOV    B, #8EH
          LCALL  DS1302_WRITE
          MOV    B, #00H
          LCALL  DS1302_WRITE
          SETB   DS1302_CLK
          CLR    DS1302_RST

          MOV    R0, #TIME_SECOND
          MOV    R7, #7
          MOV    R1, #80H
DS1302_SET_1:
		  CLR    DS1302_RST
          CLR    DS1302_CLK
          SETB   DS1302_RST
          MOV    B, R1
          LCALL  DS1302_WRITE
          MOV    A, @R0
          MOV    B, A
          LCALL  DS1302_WRITE
          INC    R0
          INC    R1
          INC    R1
          SETB   DS1302_CLK
          CLR    DS1302_RST
          DJNZ   R7, DS1302_SET_1

          CLR    DS1302_RST
          CLR    DS1302_CLK
          SETB   DS1302_RST
          MOV    B, #8EH
          LCALL  DS1302_WRITE
          MOV    B, #80H
          LCALL  DS1302_WRITE
          SETB   DS1302_CLK
          CLR    DS1302_RST
          RET

;*****************************************************************************************
;*****************************************************************************************
DS1302_GET:
          MOV    R0, #TIME_SECOND
          MOV    R7, #7
          MOV    R1, #81H
DS1302_GET_1:
		  CLR    DS1302_RST
          CLR    DS1302_CLK
          SETB   DS1302_RST
          MOV    B, R1
          LCALL  DS1302_WRITE
          LCALL  DS1302_READ
          MOV    @R0, A
          INC    R0
          INC    R1
          INC    R1
          SETB   DS1302_CLK
          CLR    DS1302_RST
          DJNZ   R7, DS1302_GET_1
          RET

;***************************************************************************************
;*****************************************************************************************
DS1302_WRITE:
          MOV    R6, #8
DS1302_WRITE_1:
		  MOV    A, B
          RRC    A
          MOV    DS1302_IO, C
          SETB   DS1302_CLK
          CLR    DS1302_CLK
		  MOV    B, A
          DJNZ   R6, DS1302_WRITE_1
          RET

;*****************************************************************************************
DS1302_READ:
          MOV    R6, #8
DS1302_READ_1:
		  MOV    C, DS1302_IO
          RRC    A
          SETB   DS1302_CLK
          CLR    DS1302_CLK
          DJNZ   R6, DS1302_READ_1
          RET    
          
          
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY:        MOV     R3,#0FFH
DEL:          MOV     R4,#0FFH
              DJNZ    R4,$
              DJNZ    R3,DEL
              RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY_TAB:
	      DB      07EH, 0E7H, 0D7H, 0B7H, 077H, 0EBH, 0DBH, 0BBH, 07BH, 0EDH
	      DB      0DDH, 0BDH, 07DH, 0EEH, 0DEH, 0BEH



LED7_TAB:
	      DB      0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
	      DB      088H,083H,0C6H,0A1H,086H,08EH,0FFH

⌨️ 快捷键说明

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