/***********溫度顯示函數(shù)******************************/
void ds1820rst() /*ds1820復(fù)位*/
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay_uint(4); //延時(shí)
DQ = 0; //DQ拉低
delay_uint(80); //精確延時(shí)大于480us 540us
DQ = 1; //拉高總線 15-60us
delay_uint(20);
x=DQ; //讀總線狀態(tài) 為0復(fù)位成功,1復(fù)位不成功
delay_1ms(30);
DQ=1; //釋放總線
}
unsigned char ds1820rd() /*讀數(shù)據(jù)*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //給脈沖信號(hào)
dat>>=1;
DQ = 1; //給脈沖信號(hào)
if(DQ)
dat|=0x80; //dat和0x80做“或”運(yùn)算(最高位1,其他位保持不變)
delay_uint(10);
}
return(dat);
}
void ds1820wr(unsigned char wdata) /*寫數(shù)據(jù)*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_uint(10);
DQ = 1;
wdata>>=1;
}
}
read_temp()/*讀取溫度值并轉(zhuǎn)換*/
{
unsigned char a,b;
ds1820rst();
ds1820wr(0xcc);//*跳過讀序列號(hào)*/
ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/
ds1820rst();
ds1820wr(0xcc);//*跳過讀序列號(hào)*/
ds1820wr(0xbe);//*讀取溫度*/
a=ds1820rd();
b=ds1820rd();
t=b;
t<<=8;
t=t|a;
TM=t*0.625;
t=TM*1+0.5;
return(t);
}
void ds1820disp()//溫度值顯示
{
disdata[0]=t%1000/100+0x30;//十位數(shù)
disdata[1]=t%100/10+0x30;//個(gè)位數(shù)
disdata[3]=t%10+0x30;//小數(shù)位
write_sfm2(1,12,disdata[0]);//顯示十位
write_sfm2(1,13,disdata[1]);//顯示個(gè)位
write_sfm2(1,14,0x2e);//顯示小數(shù)點(diǎn)
write_sfm2(1,15,disdata[3]);//顯示小數(shù)位
}
從網(wǎng)上找的溫度模塊,加入到自己的代碼中,但是在lcd顯示屏上顯示4545,完全不會(huì)受ds18b20控制,不知道哪里出了問題
%T)S%}U4FI5SEKW1[CEMCVB.png (34.32 KB, 下載次數(shù): 64)
下載附件
2020-6-25 14:57 上傳
|