求高手帮忙改改我这个程序。
这个程序是DS18B20读取电热杯的温度,然后把温度传送到labview里面进行波形显示,求高手帮我改一下,使我labview能显示到小数位,我现在精度是1度,还有就是希望能延时时间长点,这个连续采集的太快。#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^1; //DS18B20的数据口位P1.1
sbit Heat = P1^2; //加热的数据口位P1.2
sbit Beep = P1^3; //蜂鸣器的数据口位P1.3
uchar TPH; //存放温度值的高字节
uchar TPL; //存放温度值的低字节
void DelayXus(uchar n);
void DS18B20_Reset();
void DS18B20_WriteByte(uchar dat);
uchar DS18B20_ReadByte();
void SendCh(uchar ch);
void delaym(uint z);
uchar Readtemp();
void init()
{
TMOD=0x20;
TH1=TL1=0xfd;
SCON=0x50;
EA=1;
TR1=1;
ES=1;
}
void DelayX0us(uchar n)
{
while (n--)
{
_nop_();
_nop_();
}
}
void DS18B20_Reset()
{
CY = 1;
while (CY)
{
DQ = 0; //送出低电平复位信号
DelayX0us(48); //延时
DQ = 1; //释放数据线
DelayX0us(6); //等待
CY = DQ; //检测存在脉冲
DelayX0us(42); //等待设备释放数据线
}
}
uchar DS18B20_ReadByte()
{
uchar i;
uchar dat = 0;
for (i=0; i<8; i++) //8位计数器
{
dat >>= 1;
DQ = 0; //开始时间片
_nop_(); //延时等待
_nop_();
DQ = 1; //准备接收
_nop_(); //接收延时
_nop_();
if (DQ) dat |= 0x80; //读取数据
DelayX0us(6); //等待时间片结束
}
return dat;
}
void DS18B20_WriteByte(uchar dat)
{
char i;
for (i=0; i<8; i++) //8位计数器
{
DQ = 0; //开始时间片
_nop_(); //延时等待
_nop_();
dat >>= 1; //送出数据
DQ = CY;
DelayX0us(6); //等待时间片结束
DQ = 1; //恢复数据线
}
}
uchar Readtemp()
{
uchar TPH,TPL;
DS18B20_Reset(); //设备复位
DS18B20_WriteByte(0xCC); //跳过ROM命令
DS18B20_WriteByte(0x44); //开始转换命令
while (!DQ); //等待转换完成
DS18B20_Reset(); //设备复位
DS18B20_WriteByte(0xCC); //跳过ROM命令
DS18B20_WriteByte(0xBE); //读暂存存储器命令
TPL = DS18B20_ReadByte(); //读温度低字节
TPH = DS18B20_ReadByte(); //读温度高字节
return TPH<<5|TPL>>3;
}
void main()
{
uchar i;
uchar ST=60;
init();
while(1)
{
delaym(300);
i=Readtemp()>>1;
// SendStr("\ntemp:");
// SendCh(i/10+48);
// SendCh(i%10+48);
SendCh(i);
if(i<(ST-4))
{
Beep=1; //不鸣叫
Heat=0; //加热
}
if((ST-4)<=i&&i<(ST-2))
{
Beep=1;//不鸣叫
Heat=1;//不加热
}
if((ST-2)<=i&&i<=(ST-1))
{
Beep=1;//不鸣叫
Heat=0;//加热
}
if((ST-1)<i&&i<=(ST+1))
{
Beep=1;//不鸣叫
Heat=1;//不加热
}
if(i>(ST+1))
{
Beep=0; //鸣叫
Heat=1; //不加热
}
}
}
void uart() interrupt 4
{
if(RI==1)
{
RI=0;
P2=SBUF;
}
}
void SendCh(uchar ch)
{
SBUF = ch;
while(!TI);
TI=0;
}
void delaym(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}