基于单片机SHT11温湿度传感器电路图于程序文档格式.docx

上传人:b****6 文档编号:20036232 上传时间:2023-01-16 格式:DOCX 页数:14 大小:93.52KB
下载 相关 举报
基于单片机SHT11温湿度传感器电路图于程序文档格式.docx_第1页
第1页 / 共14页
基于单片机SHT11温湿度传感器电路图于程序文档格式.docx_第2页
第2页 / 共14页
基于单片机SHT11温湿度传感器电路图于程序文档格式.docx_第3页
第3页 / 共14页
基于单片机SHT11温湿度传感器电路图于程序文档格式.docx_第4页
第4页 / 共14页
基于单片机SHT11温湿度传感器电路图于程序文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于单片机SHT11温湿度传感器电路图于程序文档格式.docx

《基于单片机SHT11温湿度传感器电路图于程序文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机SHT11温湿度传感器电路图于程序文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

基于单片机SHT11温湿度传感器电路图于程序文档格式.docx

//显示温度位置的标志

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@

uinti;

ucharj;

for(i=0;

i<

ms;

i++)

{

for(j=0;

j<

200;

j++);

102;

}

SHT11启动时序

voidSHT11_Start()

SHT11_SCK=1;

SHT11_DATA=1;

Delay();

SHT11_DATA=0;

SHT11_SCK=0;

/

函数名称:

SHT11_Sendbyte(uchardat)

向SHT11发送8bite数据

voidSHT11_Sendbyte(uchardat)

uchari;

8;

if(dat&

0x80)

else

dat=dat<

<

1;

函数名称SHT11_Answer():

检测SHT11的响应信号(在第九个时钟周期)

*****/

voidSHT11_Answer()

while(SHT11_DATA==1);

SHT11_Test_Finish()

检测SHT11温湿度检测是否完毕

*/

voidSHT11_Test_Finish()

SHT11_Receivebyte()

从SHT11接收8bite数据

ucharSHT11_Receivebyte()

uchardat;

{

if(SHT11_DATA)

dat=dat|0x01;

dat=dat&

0xfe;

//释放数据总线

return(dat);

/*****

MCU_Answer()

单片机向SHT11发送应答信号

voidMCU_Answer()

//释放数据总线这条指令非常重要不加的话导致单片机不能读取低8位

SHT11_End()

当接收两个8byte数据后部接收CRC校验码

voidSHT11_End()

voidSHT11_Write_Register(ucharcommand,uchardat)

函数说明:

向SHT11的状态寄存器设置功能

command为REG_WRITE0x06写寄存器

dat为设置SHT11的功能可以设置检测的数据位数

SHT11_Start();

SHT11_Sendbyte(command);

SHT11_Answer();

SHT11_Sendbyte(dat);

 

ucharSHT11_Read_Register(ucharcommand)

command为REG_READ0x07//读寄存器

返回值为状态寄存器的值

位6显示当前检测完一次数据后电源供电情况

当位6为0时表明VDD>

当位6为1时表明VDD<

即电量不足

位0表明当前的测量分辨率

当位0为1时表明测量精度:

8位/湿度12位温度

当位0为0时表明测量精度:

12位湿度14位温度

默认为0

dat=SHT11_Receivebyte();

SHT11_End();

SHT11_Measure(ucharcommand,uinttime);

设置SHT11检测功能,并返回相应的检测结果

command形参用于设定温度检测还是湿度检测,

time形参用于设定检测过程中的等待时间,以确定检测结果的位数

11ms/55ms/210ms分别对应8位/12位/14位

uintSHT11_Measure(ucharcommand,uchartime)

uintdat=0;

uchardata_high,data_low;

Delay_Ms(time);

SHT11_Test_Finish();

data_high=SHT11_Receivebyte();

MCU_Answer();

data_low=SHT11_Receivebyte();

dat=(dat|data_high);

dat=(dat<

8)|data_low;

/****

Convert_Tempeture12bit(uintdat);

将检测到的数据转化为相应的温度数据

温度转换公式--T=d1+d2*SOt

公式中的参数d1=-40,d2=

适用于12位测量精度

floatSHT11_Convert_Tempeture12bit(uintdat)

floattempeture1;

tempeture1=-40+*dat;

if(tempeture1>

23)

tempeture1=tempeture1+1;

55)

if(P37==1)

=16&

&

tempeture1<

30)

P33=1;

P32=0;

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=

t1=,t2=

适用于8位测量精度

uintSHT11_Convert_Humidity8bit(uintdat,floattemp)

floatRHline,RHtrue;

uintr;

RHline=-4+**dat*dat;

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

r=(RHtrue-3)*10+;

if(P37==0)

if(r>

=400&

r<

600)

=600)

return(r);

#endif

#include<

>

#include"

"

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)

for(i=100;

i>

0;

i--)

for(j;

j>

j--);

voidShow(uchar*Buffer)

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_Convert_Tempeture12bit(temp);

dat=SHT11_Measure(HUM_TEST,0x0b);

Hum=SHT11_Convert_Humidity8bit(dat,temp);

if(P34==0)

P36=1;

P37=0;

DispConvert(DispData,Hum);

P36=0;

P37=1;

DispConvert(DispData,temp*10);

}

还有些地方不是很完美

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1