我編寫ds18b20程式想顯示溫度在led燈上但

2021-09-12 15:12:03 字數 2517 閱讀 8281

1樓:

#include "reg52.h"

#include

#include //要用到取絕對值函式abs()

#define uchar unsigned char

#define uint unsigned int

sbit ds=p2^1; //sbit ds=p3^2;//ds18b20

sbit duan=p2^6;

sbit wei=p2^7;

uchar i;

unsigned char code table=; //0x00是用在顯示函式中0x40顯示“-”(負號)

void delay(uchar i)

//延時函式, 對於11.0592mhz時鐘, 例i=10,則大概延時10ms.

void dsinit()

void dswait()

//向ds18b20讀取一位資料

//讀一位, 讓ds18b20一小週期低電平, 然後兩小週期高電平,

//之後ds18b20則會輸出持續一段時間的一位資料

bit readbit()

//讀取一位元組資料, 通過呼叫readbit()來實現

unsigned char readbyte()

return dat;

}//向ds18b20寫入一位元組資料

void writebyte(unsigned char dat)

else //寫"0", 將dq拉低60us~120us}}

//向ds18b20傳送溫度轉換命令

void sendchangecmd()

//向ds18b20傳送讀取資料命令

void sendreadcmd()

//獲取當前溫度值

int gettmpvalue()

/*void init_timer0()

*/void display(int dd)

; //從【5-8】的數字為10,相應的段碼是0x00,即不顯示

uint dda;

dda=abs(dd);

sh = dda/ 10000;

sz = dda % 10000 / 1000;

sl = dda % 1000 / 100;

gh = dda % 100 / 10;

gl = dda % 10;

dis[0]=gl;

dis[1]=gh;

dis[2]=sl;

if((sz==0)&&(sh==0))

dis[3]=10;

else

dis[3]=sz;

if (dd<0)

dis[4]=11; //是負溫度,顯示“-”

else

temp=0xbf;

for(i=0;i<8;i++)

else

p0=table[dis[i]];

duan=0;

delay(1);

}/*p0=0xff;

wei=1;

p0=0xdf;

wei=0;

p0=0;

duan=1;

p0=table[gl];

delay(1);

duan=0;

p0=0xff;

wei=1;

p0=0xef;

wei=0;

p0=0;

duan=1;

p0=table[gh];

delay(1);

duan=0;

p0=0xff;

wei=1;

p0=0xf7;

wei=0;

p0=0;

duan=1;

p0=table[sl]|0x80;

delay(1);

duan=0;

p0=0xff;

wei=1;

p0=0xfb;

wei=0;

p0=0;

duan=1;

p0=table[sz];

delay(1);

duan=0;

p0=0xff;

wei=1;

p0=0xfd;

wei=0;

p0=0;

duan=1;

p0=table[sh];

delay(1);

duan=0;

p0=0xff;

wei=1;

p0=0xff;

wei=0; */

}void main() }

//根據自己的硬體改改埠,我已經成功了

2樓:匿名使用者

應該是時序不對,18b20對時序要求很嚴格

3樓:無所不問

呀 c我看不懂,我只會點彙編,如果你的溫度顯示是8.5.9顯然是你程式錯了,兩個小數點,如果程式除錯沒問題的話,大概有兩種情況,一是你的ds18b20接反了,二是壞了,你用萬用表檢查一下,壞了就換一個

ds18b20的精度問題,DS18B20的精度問題

你把測量值和實際值做成一套 或曲線圖,再做下濾波 不同的18b20溫度測出了有一兩度差別,這樣測出來的精度雖有0.0625也只是個樣子 ds18b20的測溫最小精度為0.0625 怎麼提高?暫存器2的第四位為小數部分的精度,變化一位代表變化了0.0625 這個是沒辦法改變的。但就目前我還沒看到過ds...

ds18b20溫度轉換問題

1 接收資料為雙位元組 先低位,後高位 先低位元組,後高位元組 2 高位元組的前5位若為 0 則將資料乘以0.0625 即 t d 0.0625 3 高位元組的前5位若為 1 則將資料先取反,再加一,再乘以0.0625 即 t d 1 0.0625 溫度是 55 125 對應的值是 55 ff92 ...

溫度計的設計,(使用DS18B20)

at89c51微控制器 那可以的要求的撒 微控制器數字式溫度計設計,用ds18b20和12864液晶屏 1 我做過的是ds18b20 pic微控制器 數碼管顯示。2 也做過微控制器 熱電偶 12864顯示溫度3 最近要做的是,微控制器 ds18b20 數碼管顯示 時間顯示。有按鍵,設定溫度上限和下限...