📄 alarm_clock3.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
ORG 0023H
LJMP SRE
START: MOV SP,#30H
MOV TMOD,#00100001B
MOV SCON,#01010000B
MOV PCON,#0
MOV TH1,#0E6H
MOV TL1,#0E6H
MOV 7BH,#1
MOV 7AH,#7
MOV 7CH,#0
MOV 7DH,#0
MOV 7EH,#0FFH
MOV 7FH,#04H
MOV 63H,#1
CLR 21H.0
MOV TH0,#0ECH
MOV TL0,#78H
SETB ET0
SETB TR0
SETB TR1
SETB ES
SETB EA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
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
S0: MOV A,63H
CJNE A,#0,S1
MOV A,7DH
ANL A,#0FH
MOV LED7B_DATA,A
MOV A,7DH
SWAP A
ANL A,#0FH
MOV LED7A_DATA,A
MOV A,7CH
ANL A,#0FH
MOV LED7D_DATA,A
MOV A,7CH
SWAP A
ANL A,#0FH
MOV LED7C_DATA,A
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV 63H,#1
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,7CH,S0
MOV A,TIME_HOUR
CJNE A,7DH,S0
MOV 7BH,#0
SJMP $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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 ENDSC
SCAN8: SETB LED7_DOT
ENDSC: MOV A,7BH
CJNE A,#0,END0
DEC 7EH
MOV A,7EH
CJNE A,#0,NEXT
MOV 7EH,#0FFH
DEC 7FH
MOV A,7FH
CJNE A,#0,NEXT
MOV 7FH,#04H
DEC 7AH
MOV A,7AH
CJNE A,#0,NEXT
SCAN9: MOV 7AH,#20
NEXT: MOV A,7AH
MOV DPTR,#TONETAB
MOVC A,@A+DPTR
MOV 79H,A
MOV A,79H
MOV DPTR,#HTAB
MOVC A,@A+DPTR
MOV TH0,A
MOV A,79H
MOV DPTR,#LTAB
MOVC A,@A+DPTR
MOV TL0,A
CPL P3.7
SJMP END1
END0: MOV TH0,#0ECH
MOV TL0,#78H
END1: POP DPH
POP DPL
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SRE: CLR EA
MOV A,SBUF
CLR RI
MOV 63H,#0
JB 21H.0,SRE1
MOV 7DH,A
SJMP END_SRE
SRE1: MOV 7CH,A
END_SRE: CPL 21H.0
MOV 64H,04FH
DJNZ 64H,$
SETB EA
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
HTAB: DB 0FDH,0FEH,0FEH,0FEH,0FEH,0FEH,0FEH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FDH,0FEH
LTAB: DB 082H,022H,056H,085H,09AH,0C1H,0E4H,003H,011H,02BH
DB 042H,04DH,061H,072H,0C8H,006H
TONETAB: DB 1,2,3,4,3,2,1,2,3,5,6,5,4,1,2,3,6,5,2,3,6,5,4,1,2,3
DB 2,1,4,5,6,7,2,3,1,2,2,3,5,1,2,2,3,1,1,2
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -