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檢測溫度,溫度20時,是正常的,溫度20時,返回值是0xff,0xff,請教高手為什麼
應該是你的程式上出來還存在小問題。 近期通過ds18b20再加lcd1602加序列輸出除錯成功,的lcddata埠p0 包括 包括 stc12c5a.h 定義xtal 11059200 杯晶振頻率 定義波特率9600 通訊波特率 定義uchar無符號字元型 定義的uint無符號整數 br p sbi...
關於51微控制器的ds18b20數碼管顯示的問題程式
資料位數不夠。uint readtemp void 改為整型試試看。也可以試試浮點數。基於51微控制器的ds18b20程式 數碼管顯示 求救關於c51微控制器ds18b20溫度顯示的問題 求好心人解答,為啥數碼管不能正常顯示溫度 51微控制器控制ds18b20 電路中沒有最起碼的 電路,復位電路。是...
關於ds18b20初始化問題,我的板子是TQ2440,為什麼初始化不了
親 我也用的tq2440,板子不板載ds18b20,應該是你外接的吧。但是,ds18b20本身不能輸出高電平,你要在ds的io上拉一個10k的電阻哦。不知道你上拉了沒。希望我的回答能幫助到你。define set18b20ioout rgpgcon rgpgcon 0xfffffffc 0x01 d...