标题:
单片机温度测试不准确显示为0
[打印本页]
作者:
rrrlll
时间:
2017-11-30 23:43
标题:
单片机温度测试不准确显示为0
温度显示为0,怎么回事,急
#include "reg52.h"
#include "ds1302.h"
#include "LCD1602.h"
#include "temp.h"
#include <stdio.h>
char i;
char Display_Buffer[9]={"11:59:00"};//ʱ¼äµÄ¸ñʽ
char riqi[]={"17-11-29"};
unsigned char temp,displaytemp[16];
unsigned char second,minute,hour,year,month,day;
void time_read();
void template_read();
void time_read()
{
second= Ds1302Read(0x81);
_nop_();
minute= Ds1302Read(0x83);
_nop_();
hour= Ds1302Read(0x85);
_nop_();
day=Ds1302Read(0x87);
_nop_();
month=Ds1302Read(0x89);
_nop_();
year=Ds1302Read(0x8d);
_nop_();
Display_Buffer[0]=hour/16+'0';
Display_Buffer[1]=hour%16+'0';
Display_Buffer[3]=minute/16+'0';
Display_Buffer[4]=minute%16+'0';
Display_Buffer[6]=second/16+'0';
Display_Buffer[7]=second%16+'0';
riqi[0]=year/16+'0';
riqi[1]=year%16+'0';
riqi[3]=month/16+'0';
riqi[4]=month%16+'0';
riqi[6]=day/16+'0';
riqi[7]=day%16+'0';
}
void datapros(int temp)
{
float tp;
if(temp< 0)
{
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
tp=temp;
temp=tp*0.0625*100+0.5;
}
}
void main()
{
LCD1602_Init();
Ds1302Init();
// Ds18b20Init();
while(1)
{
Ds1302ReadTime();
time_read();
// LCD1602_Write_String(0,9,Display_Buffer);//ÏÔʾʱ¼ä
// LCD1602_Write_String(0,0,riqi);//ÏÔʾÈÕÆÚ
datapros(Ds18b20ReadTemp());//Êý¾Ý´¦Àí
sprintf(displaytemp,"T:%5.5f",temp);//´òӡζÈÖµ
LCD1602_Write_String(0,1,displaytemp);//ÏÔʾζÈÖµ
}
}
温度的函数
#include"temp.h"
/*******************************************************************************
* º¯ Êý Ãû : Delay1ms
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Delay1ms(uint y)
{
uint x;
for( ; y>0; y--)
{
for(x=110; x>0; x--);
}
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20Init
* º¯Êý¹¦ÄÜ : ³õʼ»¯
* Êä Èë : ÎÞ
* Êä ³ö : ³õʼ»¯³É¹¦·µ»Ø1£¬Ê§°Ü·µ»Ø0
*******************************************************************************/
uchar Ds18b20Init()
{
uchar i;
DSPORT = 0; //½«×ÜÏßÀµÍ480us~960us
i = 70;
while(i--);//ÑÓʱ642us
DSPORT = 1; //È»ºóÀ¸ß×ÜÏߣ¬Èç¹ûDS18B20×ö³ö·´Ó¦»á½«ÔÚ15us~60usºó×ÜÏßÀµÍ
i = 0;
while(DSPORT) //µÈ´ýDS18B20ÀµÍ×ÜÏß
{
Delay1ms(1);
i++;
if(i>5)//µÈ´ý>5MS
{
return 0;//³õʼ»¯Ê§°Ü
}
}
return 1;//³õʼ»¯³É¹¦
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20WriteByte
* º¯Êý¹¦ÄÜ : Ïò18B20дÈëÒ»¸ö×Ö½Ú
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Ds18b20WriteByte(uchar dat)
{
uint i, j;
for(j=0; j<8; j++)
{
DSPORT = 0; //ÿдÈëһλÊý¾Ý֮ǰÏȰÑ×ÜÏßÀµÍ1us
i++;
DSPORT = dat & 0x01; //È»ºóдÈëÒ»¸öÊý¾Ý£¬´Ó×îµÍλ¿ªÊ¼
i=6;
while(i--); //ÑÓʱ68us£¬³ÖÐøÊ±¼ä×îÉÙ60us
DSPORT = 1; //È»ºóÊÍ·Å×ÜÏߣ¬ÖÁÉÙ1us¸ø×ÜÏ߻ָ´Ê±¼ä²ÅÄܽÓ×ÅдÈëµÚ¶þ¸öÊýÖµ
dat >>= 1;
}
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20ReadByte
* º¯Êý¹¦ÄÜ : ¶Áȡһ¸ö×Ö½Ú
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
uchar Ds18b20ReadByte()
{
uchar byte, bi;
uint i, j;
for(j=8; j>0; j--)
{
DSPORT = 0;//ÏȽ«×ÜÏßÀµÍ1us
i++;
DSPORT = 1;//È»ºóÊÍ·Å×ÜÏß
i++;
i++;//ÑÓʱ6usµÈ´ýÊý¾ÝÎȶ¨
bi = DSPORT; //¶ÁÈ¡Êý¾Ý£¬´Ó×îµÍλ¿ªÊ¼¶ÁÈ¡
/*½«byte×óÒÆÒ»Î»£¬È»ºóÓëÉÏÓÒÒÆ7λºóµÄbi£¬×¢ÒâÒÆ¶¯Ö®ºóÒÆµôÄÇλ²¹0¡£*/
byte = (byte >> 1) | (bi << 7);
i = 4; //¶ÁÈ¡ÍêÖ®ºóµÈ´ý48usÔÙ½Ó×ŶÁÈ¡ÏÂÒ»¸öÊý
while(i--);
}
return byte;
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20ChangTemp
* º¯Êý¹¦ÄÜ : ÈÃ18b20¿ªÊ¼×ª»»Î¶È
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Ds18b20ChangTemp()
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //Ìø¹ýROM²Ù×÷ÃüÁî
Ds18b20WriteByte(0x44); //ζÈת»»ÃüÁî
//Delay1ms(100); //µÈ´ýת»»³É¹¦£¬¶øÈç¹ûÄãÊÇһֱˢ×ŵϰ£¬¾Í²»ÓÃÕâ¸öÑÓʱÁË
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20ReadTempCom
* º¯Êý¹¦ÄÜ : ·¢ËͶÁȡζÈÃüÁî
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Ds18b20ReadTempCom()
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //Ìø¹ýROM²Ù×÷ÃüÁî
Ds18b20WriteByte(0xbe); //·¢ËͶÁȡζÈÃüÁî
}
/*******************************************************************************
* º¯ Êý Ãû : Ds18b20ReadTemp
* º¯Êý¹¦ÄÜ : ¶ÁȡζÈ
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
int Ds18b20ReadTemp()
{
int temp = 0;
uchar tmh, tml;
Ds18b20ChangTemp(); //ÏÈдÈëת»»ÃüÁî
Ds18b20ReadTempCom(); //È»ºóµÈ´ýת»»Íêºó·¢ËͶÁȡζÈÃüÁî
tml = Ds18b20ReadByte(); //¶ÁȡζÈÖµ¹²16룬ÏȶÁµÍ×Ö½Ú
tmh = Ds18b20ReadByte(); //ÔÙ¶Á¸ß×Ö½Ú
temp = tmh;
temp <<= 8;
temp |= tml;
return temp;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1