ds18b20,我想改变它的精度,让数码管显示能出更高的精度,谁能帮我把程序改改?

org 0000h
tmpl equ 29h
tmph equ 28h
flag1 bit 38h
datain bit p3.7
main: lcall get_temper
lcall cvttmp
lcall disp1
ajmp main
init_1820: setb datain
nop
clr datain
mov r1,#3
tsr1: mov r0,#107
djnz r0,$
djnz r1,tsr1
setb datain
nop
nop
nop
mov r0,#25h
tsr2: jnb datain,tsr3
djnz r0,tsr2
clr flag1
sjmp tsr7
tsr3: setb flag1
clr p1.7
mov r0,#117
tsr6: djnz r0,$
tsr7: setb datain
ret
get_temper: setb datain
lcall init_1820
jb flag1,tss2
nop
ret
tss2: mov a,#0cch
lcall write_1820
mov a,#44h
lcall write_1820
acall disp1
lcall init_1820
mov a,#0cch
lcall write_1820
mov a,#0beh
lcall write_1820
lcall read_18200
ret
write_1820:mov r2,#8
clr c
wr1: clr datain
mov r3,#6
djnz r3,$
rrc a
mov datain,c
mov r3,#23
djnz r3,$
setb datain
nop
djnz r2,wr1
setb datain
ret
read_18200:mov r4,#2
mov r1,#29h
re00: mov r2,#8
re01: clr c
setb datain
nop
nop
clr datain
nop
nop
nop
setb datain
mov r3,#9
re10: djnz r3,re10
mov c,datain
mov r3,#23
re20: djnz r3,re20
rrc a
djnz r2,re01
mov @r1,a
dec r1
djnz r4,re00
ret
cvttmp: mov a,tmph
anl a,#80h
jz tmpc1
clr c
mov a,tmpl
cpl a
add a,#1
mov tmpl,a
mov a,tmph
cpl a
addc a,#0
mov tmph,a
mov 73h,#0bh
sjmp tmpc11
tmpc1: mov 73h,#0ah
tmpc11: mov a,tmpl
anl a,#0fh
mov dptr,#tmptab
movc a,@a+dptr
mov 70h,a
mov a,tmpl
anl a,#0f0h
swap a
mov tmpl,a
mov a,tmph
anl a,#0fh
swap a
orl a,tmpl
h2bcd: mov b,#100
div ab
jz b2bcd1
mov 73h,a
b2bcd1: mov a,#10
xch a,b
div ab
mov 72h,a
mov 71h,b
tmpc12: nop
disbcd: mov a,73h
anl a,#0fh
cjne a,#1,disbcd0
sjmp disbcd1
disbcd0: mov a,72h
anl a,#0fh
jnz disbcd1
mov a,73h
mov 72h,a
mov 73h,#0ah
disbcd1: ret
tmptab: db 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
disp1: mov r1,#70h
mov r5,#0feh
play: mov p1,#0ffh
mov a,r5
mov p2,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p1,a
mov a,r5
jb acc.1,loop1
clr p1.7
loop1: lcall dl1ms
inc r1
mov a,r5
jnb acc.3,endout
rl a
mov r5,a
sjmp play
endout: mov p1,#0ffh
mov p2,#0ffh
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h
db 92h,82h,0f8h,80h,90h,0ffh,0bfh
dl1ms: mov r6,#14h
dl1: mov r7,#100
djnz r7,$
djnz r6,dl1
ret
end

增加数码管数量、修改显示程序段;精度由DS18B20本身决定了,增加的那几显示位也是乱跳不可靠的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-15
ds18b20有本身的精度范围啊,在0.5吧,不能更精确了吧?换个好的温度传感器试试吧

ds18b20,我想改变它的精度,让数码管显示能出小数点后一位,谁能帮我把...
DS18B20温度采集系统程序 8 位共阳极显示,P0 送显示代码,P2作位选信号,低电平选通 分时选通,直接计算 能显示摄氏度符号 通过DD18B20读取温度,数码管显示温度值,并由串口 传送到上位机再执行相应操作。\/ include <reg51.h> define XTAL 11059200 \/\/ CUP 晶振频率 define baudrate 9600 \/\/...

怎么修改ds18b20的转换精度?最好有具体的C语言程序。
实际应用中精度不用设置,让其为最大12位,只需在程序中按需要的精度要求舍弃后面的位数即可。采用右移的办法舍弃,有个数码管显示的程序你可参考一下:uint16 temp;uint8 n=0; \/\/N=0符号为正 \/* if(tem>6348) \/\/温度值正负判断 { tem=65536-tem; \/\/负温度求补码 n=1; \/\/标志位置n=1...

有关温度报警器的程序,有关DS18B20的程序已写好,求助有关蜂鸣器报警和温...
如果需要更高的控制精度,则我们的模糊控制将不适应,需修改程序。 11 3.3 方案的改进 在不改变加热器容量的情况下,为减小调节时间,可以实行在加热快达到设定温度时开启风扇来减小热惯性对温度的影响的措施。在控制精度上可采用先进的数字 PID控制算法,对加热时间进行控制,提高控制精度。 可以改进控制系统使能同 PC 联...

单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是没...
你这是动态显示,ds18b20转换时间很长,基本上数码管就没有闪烁的时间就过去了,人眼很难捕捉到,你用静态显示就看见了 如果想动态显示那么 display();改成for(i=1;i<100,i++){ display();} 可以调整i的上限观察吧

单片机ds18b20测温程序,为啥数码管显示的温度是16进制,我照着别人的...
共阴极和共阳极的数码管字符编码不同的,好好检查检查你的段码数组。

用8051单片机编的DS18B20显示温度程序,是按照书上写的,数码管却显示40...
我看了一些你的程序,没看到什么问题。显示不正常可能是因为:1、硬件问题,ds18b20出现故障,可能性不大!2、软件问题。18b20对时序要求非常严格,我要求学生练习时序的时候,就拿18b20作为实例 18b20对时序要求非常严格,我想问几个问题。你选用的晶振是多少?你严格按照说明书说的时序了吗?我没有测试你...

单片机DS18B20测温的问题,程序好像没问题,但是用protues仿真就是没...
看一下晶振对了没有,这个很关键 对了,你怎么这样写程序啊,这样显示的时间会不均衡的,即每位数码管显示的时间不一样,会带来一个暗一个亮,特别是当你想加点其它功能,比如说按键,采AD等等时,你会发现显示的不正常

数码管显示DS18B20温度
稍稍改了一下程序,显示效果不错,数值随着温度调整,可以发生变化。……temp = TMPH;temp <<= 8;temp = temp | TMPL;tt = temp * 0.0625;a = tt * 10000;a = a + 1235; \/\/加上了四位小数 \/\/温度百位 P2 = 255; \/\/先消隐 P0 = table1[a \/ 1000000];P2 = 255 - 0x...

数码管 ds18b20温度显示
1。在转换时没有留够足够的转换时间。根据DS18B20芯片手册,9位精度转换时间为93.75ms。12位精度转换时间为750ms。而DS18B20默认为12位精度。所以我加了750ms延时 2。在写函数的时候 void ds18b20_write_byte(uchar date) \/\/写一个字节 { uchar i;for(i=0;i<8;i++) \/\/一个字节八位 {...

我现在写了DS18B20的c程序还有用定时器输出的PWM波程序,用数码管显示...
无论程序执行到何处都会被暂停,优先去执行中断服务程序。 DS18B20这种对时序有严格要求的单总线通讯,在发送和接收数据时被定时器中断扰乱了时序,所以无法通讯。要解决此问题建议你采用带硬件PWM的MCU,或者将18B20通讯代码放在中断服务程序内部,如果采用后一种方式,PWM计时时间请算上18B20通讯的时间。

相似回答