"); //-->
简易显示的,可以参考这个,2051一片。
DS18B20程序由21ICBBS上的某位同志提供的。在精华区有,作者名字忘记了
注意,毕业设计还是要自己做哦。
参考程序:
扫描显示,采用DS18B20
湿度采用TLC549转换的,模拟信号输入。
TEMPER_L EQU 36H
TEMPER_H EQU 35H
TEMPER_NUM EQU 40H
FLAG1 BIT 20H
DQ BIT p3.2
ORG 0
MAIN: LCALL GET_TEMPER
LCALL TEMPER_COV
lcall shidu
SJMP MAIN
;-----延迟2毫秒-----
DL2MS: PUSH 3AH
PUSH 3BH
MOV 3AH,#5
DL20MS1:MOV 3BH,#200
DL20MS2:DJNZ 3BH,DL20MS2
DJNZ 3AH,DL20MS1
POP 3BH
POP 3AH
RET
;//延时1S
DL1S: mov 3ah,#2
aa: mov 3bh,#50
CC: LCALL disp
lcall disp1
djnz 3bh,cc
djnz 3ah,aa
RET
; DS18B20初始化程序
;//*****************************************//
INIT_1820:
SETB DQ
NOP
CLR DQ
MOV R0,#06BH
TSR1:
DJNZ R0,TSR1 ; 延时
SETB DQ
MOV R0,#25H
TSR2:
JNB DQ,TSR3
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ; 延时
TSR7:
SETB DQ
RET
;//*****************************************//
; 读出转换后的温度值
;//*****************************************//
GET_TEMPER:
SETB DQ ; 定时入口
LCALL INIT_1820
JB FLAG1,TSS2
RET ; 若DS18B20不存在则返回
TSS2:
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
LCALL DL1S
LCALL INIT_1820
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200
RET
;//*****************************************//
; 写DS18B20的程序
;//*****************************************//
WRITE_1820:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;//*****************************************//
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
;//*****************************************//
READ_18200:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;//*****************************************//
; 将从DS18B20中读出的温度数据进行转换
;//*****************************************//
TEMPER_COV:
mov a,temper_l
swap a
anl a,#0fh
mov r0,a
mov a,temper_h
anl a,#0fh
swap a
ADD a,r0
mov r2,#0
mov r3,a
lcall ibtd2
mov a,r6
mov temper_num,a ;保存整数位温度到40
mov a,temper_l
anl a,#0fh
mov b,#0ah
mul ab
mov r2,#0
mov r3,#0
mov r4,b
mov r5,a
mov r6,#0
mov r7,#10H
lcall ndiv1
mov a,r5
mov r2,#0
mov r3,a
lcall ibtd2
mov a,r6
mov 41h,a
RET
;双字节十六进制转换成三字节BCD码整数
;十六进制R2,R3中->R4,R5,R6中
;R2?
IBTD2: CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
LOOP: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,LOOP
RET
;/显示程序
DISp:MOV A,41H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P3.7
CLR P3.0
SETB P3.1
MOV P1,A
LCALL DL2MS
MOV A,TEMPER_NUM
ANL A,#0FH
MOV DPTR,#TAB1
MOVC A,@A+DPTR
setb P3.7
clr P3.0
clr P3.1
MOV P1,A
LCALL DL2MS
MOV A,TEMPER_NUM
SWAP A
ANL A,#0FH
MOV DPTR,#TAB
MOVc A,@A+DPTR
CLR P3.1
CLR P3.0
CLR P3.7
MOV P1,A
LCALL DL2MS
RET
ndiv1:mov a,r3
clr a
subb a,r7
mov a,r2
subb a,r6
jnc ndve1
mov b,#16
ndvl1:clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
xch a,r2
rlc a
xch a,r2
mov f0,c
clr c
subb a,r7
mov r1,a
mov a,r2
subb a,r6
jb f0,ndvm1
jc ndvd1
ndvm1:mov r2,a
mov a,r1
mov r3,a
inc r5
ndvd1:djnz b,ndvl1
clr f0
ret
ndve1:setb f0
ret
TAB1:DB 80H,0E3H,44H,41H,23H,11H,10H,0C3H,00H,01H
TAB:DB 88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H
shidu:
setb p3.3
clr p3.4
mov r0,#0
clr p3.3
nop
loop1:setb p3.4
mov c,p3.5
rlc a
clr p3.4
inc r0
cjne r0,#8,loop1
mov r0,#0
setb p3.3
shidu1: setb p3.3
clr p3.4
mov r0,#0
clr p3.3
nop
loop2:setb p3.4
mov c,p3.5
rlc a
clr p3.4
inc r0
cjne r0,#8,loop2
mov r0,#0
setb p3.3
mov b,#2
mul ab
mov r2,b
mov r3,a
mov r6,#0
mov r7,#4
lcall muld
mov a,r4
mov r2,a
mov a,r5
mov r3,a
mov r6,#0
mov r7,#0fah
lcall nsub1
mov r2,#0
mov r3,#0
mov r6,#0
mov r7,#0bh
lcall ndiv1
mov a,r3
subb a,#6
jc xx
inc r5
xx:mov a,r4
mov r2,a
mov a,r5
mov r3,a
lcall ibtd2
mov 30h,r5
mov 31h,r6
ret
MULD: MOV A,R3 ;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
nsub1:mov a,r3
clr c
subb a,r7
mov r5,a
mov a,r2
subb a,r6
mov r4,a
ret
disp1:
MOV A,31H
ANL A,#0FH
CLR P3.7
CLR P3.1
SETB P3.0
MOV DPTR,#TAB
MOVc A,@A+DPTR
MOV P1,A
LCALL Dl2ms
MOV A,31H
ANL A,#0F0H
SWAP A
SETB P3.7
SETB P3.1
CLR P3.0
MOV DPTR,#TAB
MOVc A,@A+DPTR
MOV P1,A
LCALL dl2ms
RET
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。