找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2269|回復(fù): 12
收起左側(cè)

求助各位大佬 51單片機(jī)oled和ds18b20顯示實(shí)時(shí)溫度不論怎么復(fù)位,溫度一直不變

[復(fù)制鏈接]
ID:1055423 發(fā)表于 2023-1-29 19:50 | 顯示全部樓層 |閱讀模式
51單片機(jī)oled和ds18b20顯示實(shí)時(shí)溫度不論怎么復(fù)位,溫度一直不變,這是為什么?求各位大佬留下意見(jiàn),以下是主函數(shù)。跪謝

#include "REG51.h"
#include "oled.h"
#include "bmp.h"
#include "DS18B20.h"

int main(void)
{
        OLED_Init();                        //初始化OLED ,oled代碼來(lái)源于中景園
        while(1)
        {               
                float T;//用于后續(xù)存儲(chǔ)讀取的溫度
                OLED_Clear();
                OLED_ShowString(0,4,"Temperature:",16);//顯示temperature,顯示在4列0行,占倆行
               
                 DS18B20_CONVERT_T();//開(kāi)始,ds18b20代碼來(lái)源于江科大,此函數(shù)中包含,初始化->skip ROM->convert t
                T=DS18B20_READT();//提取溫度,存入T
                if(T<0){OLED_ShowString(0,6,"-",16);}//判斷正負(fù)顯示符號(hào),顯示在6列0行
               
                 OLED_ShowNum(1,6,T,3,16);//三位整數(shù)部分
                OLED_ShowString(4,6,".");//顯示小數(shù)點(diǎn)
                OLED_ShowNum(5,6,(unsigned long)(T*10000)%10000,4,16);//顯示小數(shù)部分
                //延時(shí)函數(shù)
                delay_ms(8000);
                delay_ms(8000);
        }         
        
}





回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-1-29 23:17 | 顯示全部樓層
時(shí)序!時(shí)序!時(shí)序!
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2023-1-30 08:16 | 顯示全部樓層
很好的編程手法,只需主程序就可以通曉全部。
個(gè)人感覺(jué)只要有點(diǎn)耐心,溫度會(huì)變面包也會(huì)有的。順祝新年快樂(lè)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-1-30 08:42 | 顯示全部樓層
int main(void)
{
        OLED_Init();                        //初始化OLED ,oled代碼來(lái)源于中景園
        while(1)
        {               
                float T;//用于后續(xù)存儲(chǔ)讀取的溫度
                OLED_Clear();
                OLED_ShowString(0,4,"Temperature:",16);//顯示temperature,顯示在4列0行,占倆行       
                DS18B20_CONVERT_T();//開(kāi)始,ds18b20代碼來(lái)源于江科大,此函數(shù)中包含,初始化->skip ROM->convert t
                T=DS18B20_READT();//提取溫度,存入T

                //加一條驗(yàn)證語(yǔ)句,以區(qū)分問(wèn)題在取樣部分還是顯示部分
                T=0x0190;//25度


                if(T<0){OLED_ShowString(0,6,"-",16);}//判斷正負(fù)顯示符號(hào),顯示在6列0行
                OLED_ShowNum(1,6,T,3,16);//三位整數(shù)部分
                OLED_ShowString(4,6,".");//顯示小數(shù)點(diǎn)
                OLED_ShowNum(5,6,(unsigned long)(T*10000)%10000,4,16);//顯示小數(shù)部分
                //延時(shí)函數(shù)
                delay_ms(8000);
                delay_ms(8000);
        }                 
}
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2023-1-30 09:24 | 顯示全部樓層
主要問(wèn)題是18B20的數(shù)據(jù)讀取上,18B20是單總線器件,對(duì)時(shí)序的要求很嚴(yán)格,不是隨意搬個(gè)代碼就可用的。
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-1-30 10:32 | 顯示全部樓層
把后面delay16秒去掉試試,如果你趴在屏幕前盯著屏幕,16秒是很漫長(zhǎng)的
回復(fù)

使用道具 舉報(bào)

ID:1055423 發(fā)表于 2023-1-31 13:47 | 顯示全部樓層
munuc_w 發(fā)表于 2023-1-30 09:24
主要問(wèn)題是18B20的數(shù)據(jù)讀取上,18B20是單總線器件,對(duì)時(shí)序的要求很嚴(yán)格,不是隨意搬個(gè)代碼就可用的。

好的,感謝這位大佬的建議,
回復(fù)

使用道具 舉報(bào)

ID:1055423 發(fā)表于 2023-1-31 13:48 | 顯示全部樓層
coody_sz 發(fā)表于 2023-1-29 23:17
時(shí)序!時(shí)序!時(shí)序!

我再去檢查一遍吧
回復(fù)

使用道具 舉報(bào)

ID:1055423 發(fā)表于 2023-1-31 13:48 | 顯示全部樓層
mtt661 發(fā)表于 2023-1-30 10:32
把后面delay16秒去掉試試,如果你趴在屏幕前盯著屏幕,16秒是很漫長(zhǎng)的

復(fù)位應(yīng)該會(huì)變吧
回復(fù)

使用道具 舉報(bào)

ID:1055423 發(fā)表于 2023-1-31 13:49 | 顯示全部樓層
man1234567 發(fā)表于 2023-1-30 08:16
很好的編程手法,只需主程序就可以通曉全部。
個(gè)人感覺(jué)只要有點(diǎn)耐心,溫度會(huì)變面包也會(huì)有的。順祝新年快樂(lè) ...

對(duì)于新手來(lái)說(shuō),查bug簡(jiǎn)直無(wú)從下手
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2023-1-31 18:53 | 顯示全部樓層

OLED_18B20.jpg

你的行數(shù)不對(duì)


  1. int main(void)
  2. {
  3.             float T;//用于后續(xù)存儲(chǔ)讀取的溫度
  4.         OLED_Init();                        //初始化OLED ,oled代碼來(lái)源于中景園
  5.         while(1)
  6.         {               

  7.                 OLED_Clear();
  8.                 OLED_ShowString(0,4,"Temperature:",16);//顯示temperature,顯示在4列0行,占倆行
  9.                
  10.                  DS18B20_CONVERT_T();//開(kāi)始,ds18b20代碼來(lái)源于江科大,此函數(shù)中包含,初始化->skip ROM->convert t
  11.                 T=DS18B20_READT();//提取溫度,存入T

  12.                 if(T<0){OLED_ShowString(0,6,"-",16);}//判斷正負(fù)顯示符號(hào),顯示在6列0行
  13.                  OLED_ShowNum(1,6,(unsigned int)T,3,16);//三位整數(shù)部分
  14.                 OLED_ShowString(25,6,".",16);//顯示小數(shù)點(diǎn)
  15.                 OLED_ShowNum(29,6,(unsigned long)(T*10000)%10000,4,16);//顯示小數(shù)部分
  16.                 //延時(shí)函數(shù)
  17.                 //delay_ms(8000);
  18.                 delay_ms(1000);
  19.         }         
  20.         
  21. }
復(fù)制代碼






回復(fù)

使用道具 舉報(bào)

ID:1055423 發(fā)表于 2023-1-31 23:55 | 顯示全部樓層
angmall 發(fā)表于 2023-1-31 18:53
你的行數(shù)不對(duì)

感謝你,說(shuō)實(shí)話,我沒(méi)看太懂中景園oled的代碼,
回復(fù)

使用道具 舉報(bào)

ID:596109 發(fā)表于 2023-2-1 08:31 | 顯示全部樓層
debug看看提取的溫度值T變不變吧,不變的話查一查DS18B20的相關(guān)程序,問(wèn)題很可能在時(shí)序上
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表