




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于89C51單片機SHT11溫濕度傳感器電路圖于程序作者:張志杰SHT11.h文件:#ifndef__SHT11_H__
#define__SHT11_H__
/*************************
SHT11相關命令
**************************/
#defineucharunsignedchar
#defineuintunsignedint
#defineTEM_TEST0x03//溫度檢測命令
#defineHUM_TEST0x05//濕度檢測命令
#defineREG_READ0x07//讀寄存器
#defineREG_WRITE0x06//寫寄存器
#defineFUNCTION_SET0x01//設置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[]="";//清除沒不要的顯示
/***************************
函數名稱:Delay()
函數功能:SHT11內部延時
****************************/
voidDelay()
{
;
;
}
/***************************
函數名稱:Delay_Ms()
函數功能:SHT11檢測等待延時
函數說明:11ms/55ms/210ms分別對應8位/12位/14位測量結果
對應的形參為N則延時Nms
****************************/
voidDelay_Ms(uintms)//ms延時函數(AT89C51@11.0592MHz)
{
uinti;
ucharj;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
/**************************
函數功能:SHT11啟動時序
***************************/
voidSHT11_Start()
{
SHT11_SCK=1;
SHT11_DATA=1;
Delay();
SHT11_DATA=0;
}
/***************************************
函數名稱:ucharSHT11_Read_Register(ucharcommand)
函數說明:command為REG_READ0x07//讀寄存器
返回值為狀態寄存器的值
位6顯示當前檢測完一次數據后電源供電情況
當位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);
}
/***************************************
函數名稱:SHT11_Measure(ucharcommand,uinttime);
函數功能:設置SHT11檢測功能,并返回相應的檢測結果
函數說明:command形參用于設定溫度檢測還是濕度檢測,
time形參用于設定檢測過程中的等待時間,以確定檢測結果的位數
11ms/55ms/210ms分別對應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);
}
/****************************************
函數名稱:Convert_Tempeture12bit(uintdat);
函數功能:將檢測到的數據轉化為相應的溫度數據
函數說明:溫度轉換公式--T=d1+d2*SOt
公式中的參數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);
}
/*****************************************
函數名稱:SHT11_Convert_Humidity8bit(uintdat,floattemp)
函數功能:將檢測到的數據轉化為相應的濕度數據
函數說明:相對濕度轉換公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(檢測數據的線性化SOrh為單片機接收到的數據)
-----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline
公式中的參數: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//設置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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 今天山西高考語文作文
- 5-7MSI同步計數器2-74161實現模長小于16任意進制計數器
- 湖北省部分重點中學2023~2024學年高二數學下學期五月聯考試卷含答案
- 上海閔行區2025屆高三高考化學試題系列模擬卷(4)含解析
- 吉林省松原市扶余第一中學2025屆高三下學期第二次階段考試數學試題含解析
- 山西醫科大學晉祠學院《中西醫臨床診療技術》2023-2024學年第一學期期末試卷
- 吉林省長春市第151中學2025屆高三下學期線上周語文試題含解析
- 泉州醫學高等專科學校《軟件項目》2023-2024學年第二學期期末試卷
- 上海市華師大二附中2025屆高三下學期第二次診斷性測驗生物試題試卷含解析
- 南通大學《DSP原理與應用》2023-2024學年第二學期期末試卷
- 音樂(歌唱)《買菜》
- 美團運營大綱
- 【公開課】第6課+凝神造像-中國傳統雕塑+課件高中美術人教版(2019)美術鑒賞
- (2.22)-一、壓花原理壓花藝術
- 國際石油合作合同協議書模式分析
- 小型手推式除雪機及論文
- 2023年初級社工證考試-社會工作實務試題及答案
- 藥事管理醫療機構藥事管理
- 實體與虛空-凝固的音樂+課件高一上學期美術人美版(2019)美術鑒賞
- 【杜邦分析體系下揚子江藥業盈利質量案例分析(7700字)】
- 幼兒園防汛工作安全排查表
評論
0/150
提交評論