📄 ds1302+ds18b20+ʦ
字号:
;****************************************************************
;* ★★★ DS1302 + DS18B20 + 1602万年历测试实验程序 ★★★ *
;* (电子驿站单片机实验板、开发板配套例程,程序转载请著明出处。) *
;* E-mail: support@ourmpu.com QQ留言:451338254 476485321 *
;* 编程:ourmpu http://www.ourmpu.com/ 更多例程请登陆网站 *
;****************************************************************
;* 1602液晶模块第一行显示当前年、月、日及星期 *
;* 1602液晶模块第二行显示实时温度,1位小数显示,分辨率0.1度 *
;* 测试程序中没有K1为液晶模块背光控制,按压可以控制背光的开关 *
;* 本程序供参考,没有加入时间调整功能及定时,闹铃功能 *
;* 用户可以修改该程序,实现多点定时、定闹功能,定时时间设置 *
;* 可以保存在24C04或93C46上,实现断电保存设置 *
;* 设置参数也可以保存在DS1302内部的31自己RAM当中,也可以保存 *
;****************************************************************
ORG 0000H
AJMP START
ORG 0033H
START:
BMJSBUF EQU 30H ;半秒计数
SECOND EQU 31H ;妙
MIN EQU 32H ;分
HR EQU 33H ;时
DATE EQU 34H ;日
MONTH EQU 35H ;月
DAY EQU 36H ;年
YEAR EQU 37H ;星期
TEMPFH EQU 31H ;温度符号位
TEMPBW EQU 32H ;温度"百"位
TEMPSW EQU 33H ;温度"十"位
TEMPGW EQU 34H ;温度"个"位
TEMPXS1 EQU 35H ;温度小数位第"1"位
TEMPXS2 EQU 36H ;温度小数位第"2"位
TEMPXS3 EQU 37H ;温度小数位第"3"位
TEMPXS4 EQU 38H ;温度小数位第"4"位
TEMPXSD EQU 39H
TEMPZS EQU 3AH
TEMPXS EQU 3BH
TEMPL EQU 3CH
TEMPH EQU 3DH
DLCD1 EQU 3EH
DLCD2 EQU 3FH
DLCD3 EQU 40H
DLCD4 EQU 41H
DLCD5 EQU 42H
DLCD6 EQU 43H
DLCD7 EQU 44H
DLCD8 EQU 45H
DLCD9 EQU 46H
DLCD10 EQU 47H
DLCD11 EQU 48H
DLCD12 EQU 49H
DLCD13 EQU 4AH
DLCD14 EQU 4BH
DLCD15 EQU 4CH
DLCD16 EQU 4DH
RST BIT P1.0
IO BIT P1.1
CLK BIT P1.2
K1 BIT P3.2
K2 BIT P3.3
K3 BIT P3.4
K4 BIT P3.5
DQ BIT P3.3
RS BIT P2.0
RW BIT P2.1
E BIT P2.2
LED8P BIT P2.6
BLA BIT P2.7
LCD EQU P0
DPBIT BIT 00H ;半秒标志
SSEC BIT 01H ;设置妙
SMIN BIT 02H ;设置分
SETHR BIT 03H ;设置时
SDATE BIT 04H ;设置日
SMON BIT 05H ;设置月
SDAY BIT 06H ;设置星期
SYEAR BIT 07H ;设置年
SETBIT BIT 08H ;总设置状态标志
DS18OK BIT 09H
TEMPERRB BIT 0AH
TEMPSBIT BIT 0BH
LCDSX BIT 0CH ;显示第二行标志
BLABIT BIT 0DH ;液晶背光开启标志
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV 20H,#00H
MOV BMJSBUF,#2
MOV SP,#60H
MOV SECOND,#02H
MOV MIN,#41H
MOV HR,#21H
MOV DATE,#26H
MOV MONTH,#03H
MOV DAY,#03H
MOV YEAR,#08H
; LCALL SET1302 ;初始化为07年3月8日 星期二 02:15:02
LCALL STR1302 ;启动计时
MAIN: LCALL R_1302 ;读出当前时间
CLR LCDSX
LCALL CFTIME
LCALL DISPLCD ;液晶显示子程序
LCALL CFTEMP
LCALL DISPLCD ;液晶显示子程序
LCALL SKEY ;扫描按键
MOV R7,BMJSBUF
DJNZ R7,DPBC
MOV BMJSBUF,#3
CPL DPBIT
AJMP MAIN
DPBC: MOV BMJSBUF,R7
AJMP MAIN
;=======================================================
CFTIME: MOV DLCD1,#20H ;拆分年、月、日、星期到显示缓冲区
MOV A,YEAR ;年
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD2,A
MOV A,YEAR
ORL A,#00110000B
MOV DLCD3,A
MOV DLCD4,#2FH
MOV A,MONTH ;月
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD5,A
MOV A,MONTH
ANL A,#0FH
ORL A,#00110000B
MOV DLCD6,A
MOV DLCD7,#2FH
MOV A,DATE ;日
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD8,A
MOV A,DATE
ANL A,#0FH
ORL A,#00110000B
MOV DLCD9,A
MOV DLCD10,#20H
MOV DLCD11,#57H
MOV DLCD12,#65H
MOV DLCD13,#65H
MOV DLCD14,#6BH
MOV DLCD15,#2EH
MOV A,DAY ;星期
ANL A,#0FH
ORL A,#00110000B
MOV DLCD16,A
RET
;=======================================================
CFTEMP: MOV DLCD1,#20H ;读取并拆分温度子程序
MOV A,HR ;时
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD2,A
MOV A,HR
ANL A,#0FH
ORL A,#00110000B
MOV DLCD3,A
JB DPBIT,SJSS1
MOV DLCD4,#3AH
AJMP SJSS2
SJSS1: MOV DLCD4,#20H
SJSS2: MOV A,MIN ;分
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD5,A
MOV A,MIN
ANL A,#0FH
ORL A,#00110000B
MOV DLCD6,A
JB DPBIT,SJSS3
MOV DLCD7,#3AH
AJMP SJSS4
SJSS3: MOV DLCD7,#20H
SJSS4: MOV A,SECOND ;妙
SWAP A
ANL A,#0FH
ORL A,#00110000B
MOV DLCD8,A
MOV A,SECOND
ANL A,#0FH
ORL A,#00110000B
MOV DLCD9,A
MOV DLCD10,#20H
LCALL GETTEMP ;读取当前温度
SETB LCDSX
JNB DS18OK,DS18E ;检测温度传感器是否存在
MOV A,TEMPSW ;存在,正常显示温度
ORL A,#00110000B
MOV DLCD11,A
MOV A,TEMPGW
ORL A,#00110000B
MOV DLCD12,A
MOV DLCD13,#2EH
MOV A,TEMPXS1
ORL A,#00110000B
MOV DLCD14,A
MOV DLCD15,#0DFH
MOV DLCD16,#43H
RET
DS18E: MOV DLCD11,#20H ;温度传感器不存在,不显示温度
MOV DLCD12,#20H
MOV DLCD13,#20H
MOV DLCD14,#20H
MOV DLCD15,#20H
MOV DLCD16,#20H
RET
;=======================================================
DISPLCD: ;------- 液晶模块显示程序---------
JB BLABIT,BLAOFF
CLR BLA ;开启液晶背光
AJMP DLCD
BLAOFF:
SETB BLA ;关闭液晶背光
; MOV P2,#01111111B
; MOV LCD,#01H ;写指令01H,清屏
; LCALL ENABLE
DLCD:
MOV LCD,#38H ;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口
LCALL ENABLE
MOV LCD,#0FH ;写指令0FH,显示ON,光标ON,闪烁ON
LCALL ENABLE
MOV LCD,#06H ;写指令06H,光标输入方式增量移位
LCALL ENABLE
JB LCDSX,WXIA
MOV LCD,#80H ;第一行显示第1个字符的位置
ACALL ENABLE
MOV R0,#DLCD1
CALL WRITE1
RET
WXIA: MOV LCD,#0C0h ;第二行位置
CALL ENABLE
MOV R0,#DLCD1
CALL WRITE1
RET
ENABLE: ;写命令时序(参照1602LCD使用说明书)
CLR RS
CLR RW
CLR E
MOV R7,#188
DJNZ R7,$
SETB E
RET
WRITE1: ;写字符串
MOV R1,#16
A1: MOV A,@R0
CALL WRITE2
INC R0
DJNZ R1,A1
RET
WRITE2: ;写单个字符
MOV LCD,A
SETB RS
CLR RW
CLR E
CALL DELAY1
SETB E
RET
DELAY1:
MOV R7,#1
D11: MOV R6,#18
D12: DJNZ R6,D12
DJNZ R7,D11
RET
GETTEMP:CLR EA
LCALL INIT18B20 ;先复位DS18OK
JB DS18OK,TSS2
SETB EA
RET
TSS2: MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE18B20
MOV A,#44H ; 发出温度转换命令
LCALL WRITE18B20
LCALL YS800M ;延时0.8S,延时>750MS
LCALL INIT18B20
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE18B20
MOV A,#0BEH ;发出读温度命令
LCALL WRITE18B20
MOV R4,#2 ;从DS18OK中读出2字节温度数据
MOV R1,#TEMPL
LCALL READ18B20 ;读温度
SETB EA
DOTEMP: MOV TEMPXSD,#2EH
TESTS1: MOV A,TEMPH
ANL A,#11111000B
CJNE A,#0F8H,TESTS0
MOV TEMPFH,#0FFH
SETB TEMPSBIT
CLR TEMPERRB
LJMP DOTEMP1
TESTS0: CJNE A,#00H,TEMPERR
MOV TEMPFH,#00H
CLR TEMPSBIT
CLR TEMPERRB
LJMP DOTEMP1
TEMPERR:
SETB TEMPERRB
LJMP TEMPRET
DOTEMP1:
JNB TEMPSBIT,DOTEMP2
MOV A,TEMPH
CPL A
MOV TEMPH,A
MOV A,TEMPL
CPL A
CLR C
ADD A,#1
MOV TEMPL,A
MOV A,TEMPH
ADDC A,#00H
ANL A,#00000111B
MOV TEMPH,A
DOTEMP2:
MOV A,TEMPH
SWAP A
MOV TEMPH,A
MOV A,TEMPL
ANL A,#00001111B
MOV TEMPXS,A
MOV A,TEMPL
ANL A,#11110000B
SWAP A
MOV R1,TEMPH
ORL A,R1
MOV TEMPZS,A
HBCD:
MOV A,TEMPZS
MOV B,#100
DIV AB
MOV TEMPBW,A
MOV A,#10
XCH A,B
DIV AB
MOV TEMPSW,A
MOV A,B
MOV TEMPGW,A
FLXS: MOV R2,#4
MOV A,TEMPXS
ANL A,#00001111B
MOV B,#4
MUL AB
MOV R1,A
MOV R0,#TEMPXS1
FLXS1: MOV DPTR,#DISPXS
MOV A,R1
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R1
DJNZ R2,FLXS1
TEMPRET:
SETB EA
RET
;-----------------------------------------------------
INIT18B20:
SETB DQ
NOP
CLR DQ
MOV R0,#107 ;主机发出延时537微秒的复位低脉冲[2]
MOV R1,#3
TSR1: DJNZ R0,TSR1
MOV R0,#107
DJNZ R1,TSR1
SETB DQ
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DQ,TSR3
DJNZ R0,TSR2
AJMP TSR4
TSR3: SETB DS18OK
AJMP TSR5
TSR4: CLR DS18OK
AJMP TSR7
TSR5: MOV R0,#107
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -