📄 ds1302+ds18b20+ʦ
字号:
TSR6: DJNZ R0,TSR6
TSR7: SETB DQ
JNB DQ,$
RET
READ18B20:
MOV R2,#8
RE01: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#6
RE10: DJNZ R3,RE10
MOV C,DQ
MOV R3,#20
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
INC R1
DJNZ R4,READ18B20
RET
;写DS18OK的子程序
WRITE18B20:
MOV R2,#8
CLR C
WR18: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#20
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR18
SETB DQ
RET
DISPXS:
DB 00H,00H,00H,00H,00H,06H,02H,05H,01H,02H,05H,00H,01H,08H,07H,05H
DB 02H,05H,00H,00H,03H,01H,02H,05H,03H,07H,05H,00H,04H,03H,07H,05H
DB 05H,00H,00H,00H,05H,06H,02H,05H,06H,02H,05H,00H,06H,08H,07H,05H
DB 07H,05H,00H,00H,08H,01H,02H,05H,08H,07H,05H,00H,09H,03H,07H,05H
TABHEX: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
;=======================================================
DISPLAY: NOP
DISPLAY1:
SETB P2.7 ;关闭液晶背光
CLR P2.6 ;开启数码管显示
MOV A,HR ;第1位显示显示十位
SWAP A
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
SETB P2.1
SETB P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK2
MOV A,HR ;第2位显示小时个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
JB DPBIT,DPXY1
ANL A,#01111111B
DPXY1: MOV P0,A
SETB P2.0
CLR P2.1
SETB P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK2
MOV A,MIN ;第3位显示分钟十位
SWAP A
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
SETB P2.1
CLR P2.2
SETB P2.3
SETB P2.4
LCALL DELAY
LCALL SK2
MOV A,MIN ;第4位显示分钟个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
JB DPBIT,DPXY2
ANL A,#01111111B
DPXY2: MOV P0,A
SETB P2.0
SETB P2.1
SETB P2.2
CLR P2.3
SETB P2.4
LCALL DELAY
LCALL SK2
MOV A,SECOND ;第5位显示秒钟个位
ANL A,#00001111B
MOV DPTR,#SGTB
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
SETB P2.1
SETB P2.2
SETB P2.3
CLR P2.4
LCALL DELAY
LCALL SK2
MOV A,SECOND ;用P1.0~P1.5指示灯指示秒钟十位的0~5
SWAP A
ANL A,#00001111B
SEC0: CJNE A,#0,SEC1
MOV P1,#11111110B ;P1.0点亮,表示秒的10位数为0
SEC1: CJNE A,#1,SEC2
MOV P1,#11111101B ;P1.1点亮,表示秒的10位数为1
SEC2: CJNE A,#2,SEC3
MOV P1,#11111011B ;P1.2点亮,表示秒的10位数为2
SEC3: CJNE A,#3,SEC4
MOV P1,#11110111B ;P1.3点亮,表示秒的10位数为3
SEC4: CJNE A,#4,SEC5
MOV P1,#11101111B ;P1.4点亮,表示秒的10位数为4
SEC5: CJNE A,#5,SECE
MOV P1,#11011111B ;P1.5点亮,表示秒的10位数为5
SECE: NOP
RET
;************* 8位共阳数码管字型表 *****************
SGTB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H
;******** 延时子程序 ********
DELAY: MOV R1,#2
Y1: MOV R2,#200
DJNZ R2,$
DJNZ R1,Y1
RET
;------ 初始化1302 ------
SET1302: CLR RST
CLR CLK
SETB RST
MOV A,#8EH ;控制寄存器
LCALL W_BIT
MOV A,#00H ;写操作前WP=0
LCALL W_BIT
SETB CLK
CLR RST
MOV R0,#SECOND
MOV R7,#7 ;秒 分 时 日 月 星期 年
MOV R1,#80H ;秒写地址
SET1302A:
CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
MOV A,@R0
LCALL W_BIT
INC R0
INC R1
INC R1
SETB CLK
CLR RST
DJNZ R7,SET1302A
CLR RST
CLR CLK
SETB CLK
NOP
CLR RST
NOP
CLR CLK
SETB RST
MOV A,#90H
LCALL W_BIT
MOV A,#10100101B ;充电器设置
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#80H ;恢复写保护
LCALL W_BIT
SETB CLK
CLR RST
RET
;------读取一字节RAM ------
T_6061: CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
LCALL R_BIT
SETB CLK
CLR RST
RET
;------ 从DS1302读出7字节时间数据 ------
R_1302: MOV R0,#SECOND
MOV R7,#7
MOV R1,#81H ;秒地址
R_1302A: CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
LCALL R_BIT
MOV @R0,A
INC R0
INC R1
INC R1
SETB CLK
CLR RST
DJNZ R7,R_1302A
RET
;-----写任意一地址---R1 为地址,R0 为数据-----
SETONE: CLR CLK
CLR RST
CLR CLK
NOP
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#00H
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
NOP
CLR RST
CLR CLK
SETB RST
MOV A,R1
LCALL W_BIT
MOV A,R0
LCALL W_BIT
NOP
SETB CLK
CLR RST
NOP
NOP
CLR RST
CLR CLK
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#80H
LCALL W_BIT
SETB CLK
CLR RST
RET
;------ 启动1302计时 ------
STR1302: CLR RST
CLR CLK
SETB RST
MOV A,#8EH ;控制寄存器
LCALL W_BIT
MOV A,#00H ;写操作前WP=0
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
SETB CLK
NOP
CLR RST
NOP
CLR CLK
SETB RST
MOV A,#90H
LCALL W_BIT
MOV A,#10100101B ;充电器设置
LCALL W_BIT
SETB CLK
CLR RST
CLR CLK
SETB RST
MOV A,#8EH
LCALL W_BIT
MOV A,#80H ;恢复写保护
LCALL W_BIT
SETB CLK
CLR RST
RET
;------ 写8位数据到DA1302 ------
W_BIT: MOV R4,#8
W_BIT1: RRC A
MOV IO,C
SETB CLK
CLR CLK
DJNZ R4,W_BIT1
RET
;------ 从DS1302读出8位数据 ------
R_BIT: MOV R4,#8
R_BIT1: MOV C,IO
RRC A
SETB CLK
CLR CLK
DJNZ R4,R_BIT1
RET
;----------------------------------
BCD_HEX:
MOV A,6FH
ANL A,#0FH
MOV B,A
MOV A,6FH
MOV 6FH,B
SWAP A
ANL A,#0FH
MOV B,#0AH
MUL AB
ADD A,6FH
;MOV 6FH,A
RET
HEX_BCD:
MOV A,6FH
MOV B,#10
DIV AB
SWAP A
ADD A,B
;MOV 6FH,A
RET
;=================================
SKEY: NOP
SK1: JB K1,SK2
ACALL YS10MS
JB K1,SK2
ACALL SOUND
K1DD: JNB K1,K1DD
CPL BLABIT ;开关背光
SJMP SKRET
SK2: JB K2,SK3
ACALL YS10MS
JB K2,SK3
ACALL SOUND
K2DD: JNB K2,K2DD
SJMP SKRET
SK3: JB K3,SK4
ACALL YS10MS
JB K3,SK4
ACALL SOUND
K3DD: JNB K3,K3DD
SJMP SKRET
SK4: JB K4,SKRET
ACALL YS10MS
JB K4,SKRET
ACALL SOUND
K4DD: JNB K1,K4DD
SKRET: RET
YS10MS: MOV R7,#128
DL1: MOV R6,#0FFH
DL0: DJNZ R6,DL0
DJNZ R7,DL1
RET
;******* 音效子程序 *******
SOUND: MOV R7,#228
SDL1: CPL P3.7
MOV R6,#0FFH
SDL0: DJNZ R6,SDL0
DJNZ R7,SDL1
RET
YS800M: MOV R3,#40 ;延时
Y5_1: MOV R4,#10 ;[1]延时
Y5_2: MOV R5,#228 ;[1]
DJNZ R5,$ ;[2]
DJNZ R4,Y5_2 ;[2]
DJNZ R3,Y5_1 ;[2]
RET ;[1]
;=================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -