用的STC15W404AS 控制DS18B20在三位数码管显示温度,一直显示59C 求助
时间:10-02
整理:3721RD
点击:
我没插DS18B20 也显示59C,反正通电就是这个度数,然后插上传感器时,有的时候度数闪一下,这是什么情况?是我时序不对么?
程序如下:
void Init_Ds18b20(void) //DS18B20?send reset and initialization command
{
DQ = 1; //DQ?,?
_nop_();
DQ = 0; //?
Delayus(662); // 530us
// _nop_();
DQ = 1;
Delayus(91); //73us
Delayus(580);// 464us
DQ = 1;
}
void DS18B20_write(uchar dat)
{
uchar i;
for(i = 8; i > 0; i--)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
Delayus(91); //73us
DQ = 1;
dat >>= 1;
}
}
uchar DS18B20_data()
{
uchar i=0,dat=0;
for (i = 8; i > 0; i--)
{
DQ = 0; // ?
dat >>= 1;
// dat >>= 1;
DQ = 1; // ?
_nop_(); _nop_(); _nop_();
if(DQ)
{
dat |= 0x80;
}
Delayus(75);//60us
}
return dat;
}
uint read_temperature()
{
uchar a=0,b=0;
float tt = 0;
Init_Ds18b20();
DS18B20_write(0xcc); //?
DS18B20_write(0x44); //?
// Delayms(100);
Init_Ds18b20();
DS18B20_write(0xcc); //?
DS18B20_write(0xbe); //?
a = DS18B20_data(); //?8?
b = DS18B20_data(); //?8?
wendu=b;
wendu<<=8; //8
wendu=wendu|a;
tt=wendu*0.0625;
wendu= tt*10+0.5; //?10?
return wendu;
}
求助 各位大佬 这是什么问题
程序如下:
void Init_Ds18b20(void) //DS18B20?send reset and initialization command
{
DQ = 1; //DQ?,?
_nop_();
DQ = 0; //?
Delayus(662); // 530us
// _nop_();
DQ = 1;
Delayus(91); //73us
Delayus(580);// 464us
DQ = 1;
}
void DS18B20_write(uchar dat)
{
uchar i;
for(i = 8; i > 0; i--)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
Delayus(91); //73us
DQ = 1;
dat >>= 1;
}
}
uchar DS18B20_data()
{
uchar i=0,dat=0;
for (i = 8; i > 0; i--)
{
DQ = 0; // ?
dat >>= 1;
// dat >>= 1;
DQ = 1; // ?
_nop_(); _nop_(); _nop_();
if(DQ)
{
dat |= 0x80;
}
Delayus(75);//60us
}
return dat;
}
uint read_temperature()
{
uchar a=0,b=0;
float tt = 0;
Init_Ds18b20();
DS18B20_write(0xcc); //?
DS18B20_write(0x44); //?
// Delayms(100);
Init_Ds18b20();
DS18B20_write(0xcc); //?
DS18B20_write(0xbe); //?
a = DS18B20_data(); //?8?
b = DS18B20_data(); //?8?
wendu=b;
wendu<<=8; //8
wendu=wendu|a;
tt=wendu*0.0625;
wendu= tt*10+0.5; //?10?
return wendu;
}
求助 各位大佬 这是什么问题
先确定显示部分是否正确,是否能显示任意三位数,如果能正确显示,再看是否格式转化的问题,就是把18b20的数据转换成数码管显示是否正确,都正确的话,再查看18b20的程序,再论坛也可以找到很多例程
如果你的程序是从其他程序移植来的要注意时序问题,因为STC15W404AS是1T单片机,速度比普通51快得多。
我是看延时来的,自己用仿真得的延时应该没问题
我是看延时来的,自己用仿真得的延时应该没问题
显示没问题 就是一直显示59不对啊,我没插传感器 也显示59,插上也是,,用串口读取这个温度函数,全是FE,这是啥情况
不插传感器,单片机引脚悬空,也会由电平状态的,所以你程序读取引脚时是会由数值的,对应的引脚由没有接上拉电阻。
显示没问题的话,也要看看数值转换部分有没有问题,18b20的数据好像要转换后才能对应到相应的温度值,可以在程序里屏蔽18b20的程序,任意给一些符合18b20数据格式的数据,看是否能正确显示温度值,如果都正确了,那就查18b20的程序就行了