基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者_第1頁
基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者_第2頁
基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者_第3頁
基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者_第4頁
基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者:張志杰SHT11.h文件:#ifndef__SHT11_H__

#define__SHT11_H__

/*************************

SHT11相關(guān)命令

**************************/

#defineucharunsignedchar

#defineuintunsignedint

#defineTEM_TEST0x03//溫度檢測命令

#defineHUM_TEST0x05//濕度檢測命令

#defineREG_READ0x07//讀寄存器

#defineREG_WRITE0x06//寫寄存器

#defineFUNCTION_SET0x01//設(shè)置SHT11的工作精度為8位/濕度12位溫度

/**************************

SHT11端口定義

***************************/

sbitSHT11_DATA=P3^1;

sbitSHT11_SCK=P3^0;

sbitP33=P3^3;

sbitP32=P3^2;

sbitP36=P3^6;

sbitP37=P3^7;

ucharflag_tempeture=0;//顯示溫度位置的標志

ucharflag_humidity=0;//顯示濕度位置的標志

ucharcodestr1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//溫度圖標

ucharcodestr6_sht11[]="%RH";

ucharcodestr4_sht11[]="humi=";

ucharcodestr2_sht11[]="temp=";

ucharcodestr7_sht11[]="";//清除沒不要的顯示

/***************************

函數(shù)名稱:Delay()

函數(shù)功能:SHT11內(nèi)部延時

****************************/

voidDelay()

{

;

;

}

/***************************

函數(shù)名稱:Delay_Ms()

函數(shù)功能:SHT11檢測等待延時

函數(shù)說明:11ms/55ms/210ms分別對應(yīng)8位/12位/14位測量結(jié)果

對應(yīng)的形參為N則延時Nms

****************************/

voidDelay_Ms(uintms)//ms延時函數(shù)(AT89C51@11.0592MHz)

{

uinti;

ucharj;

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

{

for(j=0;j<200;j++);

for(j=0;j<102;j++);

}

}

/**************************

函數(shù)功能:SHT11啟動時序

***************************/

voidSHT11_Start()

{

SHT11_SCK=1;

SHT11_DATA=1;

Delay();

SHT11_DATA=0;

}

/***************************************

函數(shù)名稱:ucharSHT11_Read_Register(ucharcommand)

函數(shù)說明:command為REG_READ0x07//讀寄存器

返回值為狀態(tài)寄存器的值

位6顯示當前檢測完一次數(shù)據(jù)后電源供電情況

當位6為0時表明VDD>2.47V當位6為1時表明VDD<2.47V即電量不足

位0表明當前的測量分辨率

當位0為1時表明測量精度:8位/濕度12位溫度

當位0為0時表明測量精度:12位濕度14位溫度

默認為0

*******************************************/

ucharSHT11_Read_Register(ucharcommand)

{

uchardat;

SHT11_Start();

SHT11_Sendbyte(command);

SHT11_Answer();

dat=SHT11_Receivebyte();

SHT11_End();

return(dat);

}

/***************************************

函數(shù)名稱:SHT11_Measure(ucharcommand,uinttime);

函數(shù)功能:設(shè)置SHT11檢測功能,并返回相應(yīng)的檢測結(jié)果

函數(shù)說明:command形參用于設(shè)定溫度檢測還是濕度檢測,

time形參用于設(shè)定檢測過程中的等待時間,以確定檢測結(jié)果的位數(shù)

11ms/55ms/210ms分別對應(yīng)8位/12位/14位

****************************************/

uintSHT11_Measure(ucharcommand,uchartime)

{

uintdat=0;

uchardata_high,data_low;

SHT11_Start();

SHT11_Sendbyte(command);

SHT11_Answer();

Delay_Ms(time);

SHT11_Test_Finish();

data_high=SHT11_Receivebyte();

MCU_Answer();

data_low=SHT11_Receivebyte();

SHT11_End();

dat=(dat|data_high);

dat=(dat<<8)|data_low;

return(dat);

}

/****************************************

函數(shù)名稱:Convert_Tempeture12bit(uintdat);

函數(shù)功能:將檢測到的數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的溫度數(shù)據(jù)

函數(shù)說明:溫度轉(zhuǎn)換公式--T=d1+d2*SOt

公式中的參數(shù)d1=-40,d2=0.04

適用于12位測量精度

*/

floatSHT11_Convert_Tempeture12bit(uintdat)

{

floattempeture1;

tempeture1=-40+0.04*dat;

if(tempeture1>23)

tempeture1=tempeture1+1;

if(tempeture1>55)

tempeture1=tempeture1+1;

if(P37==1)

{

if(tempeture1>=16&&tempeture1<30)

{

P33=1;

P32=0;

}

else

{

P33=0;

P32=1;

}

}

return(tempeture1);

}

/*****************************************

函數(shù)名稱:SHT11_Convert_Humidity8bit(uintdat,floattemp)

函數(shù)功能:將檢測到的數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的濕度數(shù)據(jù)

函數(shù)說明:相對濕度轉(zhuǎn)換公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(檢測數(shù)據(jù)的線性化SOrh為單片機接收到的數(shù)據(jù))

-----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline

公式中的參數(shù):C1=-4,C2=0,648,C3=-0.00072

t1=0.01,t2=0.00128

適用于8位測量精度

*/

uintSHT11_Convert_Humidity8bit(uintdat,floattemp)

{

floatRHline,RHtrue;

uintr;

RHline=-4+0.648*dat-0.00072*dat*dat;

RHtrue=(temp-25)*(0.01+0.00128*dat)+RHline;

r=(RHtrue-3)*10+0.5;

if(P37==0)

{

if(r>=400&&r<600)

{

P33=1;

}

else

{

P33=0;

}

if(r>=600)

{

P32=1;

}

else

{

P32=0;

}

}

return(r);

}

#endifDisplay.c文件:#include<reg52.h>

#include"SHT11.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineTEM_TEST0x03//溫度檢測命令

#defineHUM_TEST0x05//濕度檢測命令

#defineREG_READ0x07//讀寄存器

#defineREG_WRITE0x06//寫寄存器

#defineFUNCTION_SET0x01//設(shè)置SHT11的工作精度為8位/濕度12位溫度

ucharDispData[4]={0,1,2,3};

codeucharDispSegmentP0[10]={0x3f,0x06,0x1b,0x0f,0x26,0x2d,0x3d,0x07,0x3f,0x2f};

codeucharDispSegmentP2[10]={0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x00,0x22,0x22};

//0123456789%

codeucharDispCtrl[4]={0xef,0xdF,0xbf,0x7F};

sbitP16=P1^6;

sbitP26=P2^6;

sbitP34=P3^4;

voidTemp_delay(unsignedintj)

{

uchari;

for(i=100;i>0;i--)

{

for(j;j>0;j--);

}

}

voidShow(uchar*Buffer)

{

uchari;

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

{

P1=DispCtrl[i];

P0=DispSegmentP0[*Buffer];

P2=DispSegmentP2[*Buffer];

if(P16==0)

P26=1;

Temp_delay(2);

Buffer++;

}

}

voidDispConvert(uchar*DispAddr,uintTemp2Con)

{

DispAddr[0]=Temp2Con/1000;

DispAddr[1]=(Temp2Con-DispAddr[0]*1000)/100;

DispAddr[2]=(Temp2Con-DispAddr[0]*1000-DispAddr[1]*100)/10;

DispAddr[3]=Temp2Con-DispAddr[0]*1000-DispAddr[1]*100-DispAddr[2]*10;

}

voidmain()

{

uinttemp;

uintdat;

uintHum;

//floatf;

while(1)

{

Show(DispData);

SHT11_Write_Register(REG_WRITE,FUNCTION_SET);

temp=SHT11_Measure(TEM_TEST,0x37);

temp=SHT11_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論