单片机数字温度计51控制的ds18b20,lcd显示的程序运行不起
发布网友
发布时间:2022-04-30 15:08
我来回答
共2个回答
热心网友
时间:2022-06-25 23:27
你好 不知道你的问题温度大于50,或者小于0的时候蜂鸣器不会会报警还是液晶显根本就不正常
如果是前者 那问题出在你中断 判定的编程部分的编写,不是测温模块的问题
如果是后者 你可能要注意一下 18b20这个芯片虽然输出的是数字信号但不是以“1”为单位的,是以“0.0625”为一个单位的。而且数字部分分为整数和小数两个部分 要分别换算。
给你一个已经成功的部分程序 你参考一下
;------------------------DS18B20初始化-----------------------
CHU_1820:
L0:SETB DQ
NOP
CLR DQ
MOV R2,#250
L1:
DJNZ R2,L1
SETB DQ
MOV R2,#25
L15:DJNZ R2,L15
CLR C
ORL C,DQ
JC L0
;CLR P2.0
MOV R6,#23
L16:ORL C,DQ
JC L3
DJNZ R6,L16
SJMP L0
L3:MOV R2,#120
DJNZ R2,$
RET
;------------------------设定暂存器----------------------------
DUWENDU:
;CLR EA
LCALL CHU_1820
JB DQ,TS1
RET
TS1:MOV A,#0CCH ;跳过ROM匹配
LCALL XIE_1820
MOV A,#4EH
LCALL XIE_1820
RET
;-----------------------读转换后的温度值------------------------
GET_TEMPER:
SETB DQ
LCALL CHU_1820
JB DQ,TSS2
RET ;若不存在则返回
TSS2: MOV A,#0CCH ;跳过ROM
LCALL XIE_1820
MOV A,#44H ;发出温度转换命令
LCALL XIE_1820
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL CHU_1820
MOV A,#0CCH ;跳过ROM
LCALL XIE_1820
MOV A,#0BEH ;发出读温度换命令
LCALL XIE_1820
LCALL RED_1820 ;读两个字节的温度
RET
//----------------------写命令到1820--------------------------
XIE_1820:
;CLR EA
MOV R2,#8
L9:SETB DQ
MOV R3,#7
RRC A
CLR DQ
DJNZ R3,$
MOV DQ,C
MOV R3,#20
DJNZ R3,$
DJNZ R2,L9
SETB DQ
RET
//----------------------读出两字节温度数据-----------------------
RED_1820:
MOV R2,#2
MOV R1,#TEMPER_L ;低位存入(TEMPER_L),高位存入(TEMPER_H)
L7:MOV R3,#8
L6:CLR C
CLR DQ
NOP
NOP
NOP
SETB DQ ;开始读数据,总线释放
MOV R4,#4
DJNZ R4,$ ;总线保持8us
MOV C,DQ
RRC A
MOV R5,#30
L5:DJNZ R5,L5 ;等待60us释放总线
DJNZ R3,L6
MOV @R1,A
DEC R1 ;指向高8位存储单元
DJNZ R2,L7
SETB DQ
RET
大家做设计都不容易 我也是找到高手帮我弄成功的
你也要加油啊
热心网友
时间:2022-06-25 23:28
自己慢慢调试啊,程序是调出来的啊