久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 為什么DS18B20顯示的溫度與LCD1602顯示的溫度不同?? [打印本頁]

作者: 不想12453    時(shí)間: 2018-4-19 11:49
標(biāo)題: 為什么DS18B20顯示的溫度與LCD1602顯示的溫度不同??
本帖最后由 不想做畢設(shè) 于 2018-4-19 12:02 編輯

LCD溫度顯示為8度 DS18B20溫度顯示為64度 為什么會(huì)不一樣呢?會(huì)不會(huì)是延時(shí)出了問題?求大神們幫忙解答一下謝謝!!!程序附上
#include <reg51.h>#include <intrins.h>
#define uchar unsigned char
#define uint unsigned intsbit RS=P2^2;                                                                        
sbit RW=P2^1;
sbit EN=P2^0;
sbit DQ=P3^2;        
uchar code str1[]={0x28,0x2a,0x83,0xba,0x03,0x00,0x00,0x8c};        //ROM 1
uchar code str2[]={0x28,0x05,0x76,0xba,0x03,0x00,0x00,0x6a};        //ROM2
uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};        // 攝氏溫度符號(hào)
uchar data disdata[5];
uint tvalue;//溫度值
uchar tflag;//溫度正負(fù)標(biāo)志
/*************************lcd1602程序**************************/
void delay1ms(uint ms)//延時(shí)1毫秒(不夠精確的)
{  uint i,j;     for(i=0;i<ms;i++)   
    for(j=0;j<100;j++);}
void wr_com(uchar com)//寫指令//
{ delay1ms(1);   
     RS=0;   
     RW=0;   
     EN=0;   
     P0=com;   
     delay1ms(1);   
     EN=1;   
     delay1ms(1);   
     EN=0;}
void wr_dat(uchar dat)//寫數(shù)據(jù)//
  { delay1ms(1);   
     RS=1;   
     RW=0;   
     EN=0;   
     P0=dat;   
     delay1ms(1);   
     EN=1;   
     delay1ms(1);   
     EN=0;}
void wr_new()                  //寫新字符
{    uchar i;        
       wr_com(0x40);        
       for(i=0;i<8;i++)        
         {    wr_dat(table);        }}
void lcd_init()//初始化設(shè)置//
{   delay1ms(15);        
     wr_com(0x38);delay1ms(5);        
    wr_com(0x08);delay1ms(5);        
    wr_com(0x01);delay1ms(5);         
   wr_com(0x06);delay1ms(5);      
  wr_com(0x0c);delay1ms(5);      
   wr_new();     
   wr_com(0x80);   
   wr_dat('A');     
   wr_com(0x81);   
   wr_dat(':');        
  wr_com(0x89);   
wr_dat(0x00);   
    wr_com(0x8a);  
    wr_dat('C');     
   wr_com(0xc9);  
  wr_dat(0x00);                                //攝氏溫度字符      
  wr_com(0xca);  
    wr_dat('C');     
  wr_com(0xc0);  
    wr_dat('B');  
      wr_com(0xc1);  
    wr_dat(':');}/******************************ds1820程序***************************************/
void delay_18B20(uint i)//延時(shí)1微秒
{   while(i--);}
void ds1820rst()/*ds1820復(fù)位*/
{   uchar x=0;        
     DQ = 1;          //DQ復(fù)位     
   delay_18B20(4); //延時(shí)     
   DQ = 0;          //DQ拉低      
  delay_18B20(100); //精確延時(shí)大于480us     
   DQ = 1;          //拉高      
  delay_18B20(40); }
uchar ds1820rd()/*讀數(shù)據(jù)*/
{ uchar i=0;
uchar dat = 0;  
for (i=0;i<8;i++)        
{   DQ = 0; //給脈沖信號(hào)  
  dat>>=1;   
DQ = 1; //給脈沖信號(hào)  
  if(DQ)    dat|=0x80;  
  delay_18B20(10);        }
  return(dat);}
void ds1820wr(uchar dat)/*寫數(shù)據(jù)*/
{    uchar i=0;  
     for (i=0; i<8; i++)           
        { DQ = 0;      
          DQ = dat&0x01;     
         delay_18B20(10);   
           DQ = 1;   
           dat>>=1;    }}
void b20_Matchrom(uchar a)         //匹配ROM
{   char j;
       ds1820wr(0x55);           //發(fā)送匹配ROM命令
        if(a==1)        
{        for(j=0;j<8;j++)      
          ds1820wr(str1[j]);                //發(fā)送18B20的序列號(hào),先發(fā)送低字節(jié)         }  
      if(a==2)      
{        for(j=0;j<8;j++)   
            ds1820wr(str2[j]);                //發(fā)送18B20的序列號(hào),先發(fā)送低字節(jié)   
      }}
read_temp(uchar z)/*讀取溫度值并轉(zhuǎn)換*/
{   uchar a,b;   
     float tt;   
     ds1820rst();   
    ds1820wr(0xcc);                                 //讀序列號(hào)  
   ds1820rst();   
      if(z==1)        
{    b20_Matchrom(1);                 //匹配ROM 1        }  
      if(z==2)      
{      b20_Matchrom(2);                 //匹配ROM         2        }   
    ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/
    delay1ms(5);  
    ds1820rst();  
    ds1820wr(0xcc);                                //讀序列號(hào)   
    ds1820rst();         
  if(z==1)        
{      b20_Matchrom(1);                            //匹配ROM 1        }
    if(z==2)        
{    b20_Matchrom(2);                                //匹配ROM         2        }  
   ds1820wr(0xbe);//*讀取溫度*/         
  a=ds1820rd();        
  b=ds1820rd();        
  tvalue=b;      
   tvalue<<=8;        
  tvalue=tvalue|a;   
  f(tvalue<0x0fff)   
  tflag=0;   
  else                  
{        tvalue=~tvalue+1;                tflag=1;                 }        
tt=tvalue*0.0625;        
tvalue=tt*10;        
return(tvalue);}
/*****************顯示函數(shù)******************************/
void ds1820disp(uchar z)//溫度值顯示
{    uchar flagdat;
    disdata[0]=tvalue/1000+0x30;//百位數(shù)
     disdata[1]=tvalue%1000/100+0x30;//十位數(shù)
     disdata[2]=tvalue%100/10+0x30;//個(gè)位數(shù)
     if(tflag==0)     
    flagdat=0x20;//正溫度不顯示符號(hào)     
    else      
   flagdat=0x2d;//負(fù)溫度顯示負(fù)號(hào):-
    if(disdata[0]==0x30)   
{disdata[0]=0x20;//如果百位為0,不顯示
  if(disdata[1]==0x30)   
{disdata[1]=0x20;//如果百位為0,十位為0也不顯示    }   }
if(z==1)   
{    wr_com(0x82);
    wr_dat(flagdat);//顯示符號(hào)位
   wr_com(0x83);
   wr_dat(disdata[0]);//顯示百位
    wr_com(0x84);
    wr_dat(disdata[1]);//顯示十位
    wr_com(0x85);
   wr_dat(disdata[2]);//顯示個(gè)位
    wr_com(0x86);
}
  if(z==2)   
{    wr_com(0xc2);
    wr_dat(flagdat);//顯示符號(hào)位
    wr_com(0xc3);
    wr_dat(disdata[0]);//顯示百位
    wr_com(0xc4);
    wr_dat(disdata[1]);//顯示十位
     wr_com(0xc5);
    wr_dat(disdata[2]);//顯示個(gè)位
     wr_com(0xc6);
   }}
/********************主程序***********************************/
void main()
{    lcd_init();//初始化顯示   
      while(1)   
{          read_temp(1);//讀取溫度   
            ds1820disp(1);//顯示   
            read_temp(2);//讀取溫度   
             ds1820disp(2);//顯示//   
             delay1ms(10000);  }}


作者: fenghuakaishi    時(shí)間: 2018-4-22 17:03
顯示的時(shí)候是否加上了‘0’,這個(gè)很關(guān)鍵
作者: zl2168    時(shí)間: 2018-4-22 19:53
本帖最后由 zl2168 于 2018-4-22 19:54 編輯

正確有效的案例不會(huì)不一樣,你不一樣的原因多數(shù)是讀數(shù)轉(zhuǎn)換程序出了問題。給你介紹個(gè)正確有效的案例。
實(shí)例97  一線式DS18B20測溫

Proteus仿真一下,確認(rèn)有效。
實(shí)例97 DS18B20測溫.rar (51.78 KB, 下載次數(shù): 35)
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人亚洲精品 | 国产精品久久久久无码av | 日日操操| av网站免费在线观看 | 亚洲欧美视频 | 中国美女一级黄色片 | 午夜国产| 91在线视频在线观看 | 成人精品免费视频 | 综合久久综合久久 | 国产精品爱久久久久久久 | 欧美黄色片 | 一级毛片,一级毛片 | 中文字字幕一区二区三区四区五区 | 亚洲欧美视频一区 | 在线视频 亚洲 | 久草在线青青草 | 在线观看黄色大片 | 自拍偷拍精品 | 91超碰在线 | 精品国产一区二区国模嫣然 | 欧洲成人 | 三级成人在线 | 久久精品高清视频 | 亚洲黄色成人网 | 欧美日韩黄 | 国产成人精品免高潮在线观看 | 一区二区精品在线 | 欧美综合国产精品久久丁香 | 国产精品久久久久久久免费观看 | 欧美一级欧美三级在线观看 | 日韩在线精品视频 | 中国免费黄色片 | 日韩免费av一区二区 | 成人小视频在线观看 | 毛片一级电影 | 欧美电影在线观看网站 | 中文字幕免费视频 | 亚洲国产高清高潮精品美女 | 久久久精品黄色 | 欧美激情视频网站 |