基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx

上传人:b****2 文档编号:5751901 上传时间:2023-05-05 格式:DOCX 页数:16 大小:116.13KB
下载 相关 举报
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第1页
第1页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第2页
第2页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第3页
第3页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第4页
第4页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第5页
第5页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第6页
第6页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第7页
第7页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第8页
第8页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第9页
第9页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第10页
第10页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第11页
第11页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第12页
第12页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第13页
第13页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第14页
第14页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第15页
第15页 / 共16页
基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx

《基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

基于51单片机SHT11温湿度传感器检测程序优质参考Word文档格式.docx

}value;

 

位定义

sbitlcdrs=P2^0;

sbitlcdrw=P2^1;

sbitlcden=P2^2;

sbitSCK=P1^0;

sbitDATA=P1^1;

变量定义

uchartable2[]="

SHT11温湿度检测"

;

uchartable3[]="

温度为:

℃"

uchartable4[]="

湿度为:

"

uchartable5[]="

."

ucharwendu[6];

ucharshidu[6];

1ms延时函数

void 

delay(int 

z)

int 

x,y;

for(x=z;

x>

0;

x--)

for(y=125;

y>

y--);

}

50us延时函数

delay_50us(uintt)

{

uintj;

for(;

t>

t--)

for(j=19;

j>

j--);

50ms延时函数

delay_50ms(uintt)

for(j=6245;

12864液晶写指令

write_12864com(ucharcom)

lcdrs=0;

delay_50us

(1);

P0=com;

lcden=1;

delay_50us(10);

lcden=0;

delay_50us

(2);

12864液晶写数据

void 

write_dat(uchardat)

lcdrs=1;

lcdrw=0;

P0=dat;

}

12864液晶初始化

init12864lcd(void)

delay_50ms

(2);

write_12864com(0x30);

delay_50us(4);

write_12864com(0x0f);

write_12864com(0x01);

delay_50us(240);

write_12864com(0x06);

write_12864com(0x0c);

12864液晶显示函数

display1(void)

uchari;

write_12864com(0x80);

for(i=0;

i<

18;

i++)

write_dat(table2[i]);

display2(void)

write_12864com(0x90);

write_dat(table3[i]);

display3(void)

write_12864com(0x88);

8;

write_dat(table4[i]);

displaywendu(void)

write_12864com(0x94);

3;

write_dat(wendu[i]);

1;

write_dat(table5[i]);

for(i=4;

5;

displayshidu(void)

write_12864com(0x8C);

write_dat(shidu[i]);

SHT11写字节程序

char 

s_write_byte(unsigned 

value)

i,error=0;

for 

(i=0x80;

i>

>

=1) 

//高位为1,循环右移

if 

(i&

value)DATA=1;

//和要发送的数相与,结果为发送的位

else 

DATA=0;

SCK=1;

_nop_();

_nop_();

//延时3us

SCK=0;

DATA=1;

//释放数据线

error=DATA;

//检查应答信号,确认通讯正常

return 

error;

//error=1通讯错误

SHT11读字节程序

s_read_byte(unsigned 

ack)

i,val=0;

for(i=0x80;

if(DATA)val=(val|i);

//读一位数据线的值

DATA=!

ack;

//如果是校验,读取完后结束通讯;

val;

SHT11启动传输

s_transstart(void)

//准备

DATA=0;

SHT11连接复位

s_connectionreset(void)

9;

i++) 

//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位

s_transstart();

//启动传输

SHT11温湿度检测

s_measure(unsigned 

*p_value,unsigned 

*p_checksum,unsigned 

charmode)

unsignederror=0;

switch(mode) 

//选择发送命令

case 

TEMP:

error+=s_write_byte(MEASURE_TEMP);

break;

//测量温度

HUMI:

error+=s_write_byte(MEASURE_HUMI);

//测量湿度

default 

:

(i=0;

65535;

if(DATA==0) 

//等待测量结束

if(DATA)error+=1;

//如果长时间数据线没有拉低,说明测量错误

*(p_value)=s_read_byte(ACK);

//读第一个字节,高字节(MSB)

*(p_value+1)=s_read_byte(ACK);

//读第二个字节,低字节(LSB)

*p_checksum=s_read_byte(noACK);

//readCRC校验码

//error=1通讯错误

SHT11温湿度值标度变换及温度补偿

calc_sth10(float 

*p_humidity,float 

*p_temperature)

const 

float 

C1=-4.0;

//12位湿度精度修正公式

C2=+0.0405;

C3=-0.0000028;

T1=+0.01;

//14位温度精度5V条件修正公式

T2=+0.00008;

rh=*p_humidity;

//rh:

12位湿度

t=*p_temperature;

//t:

14位温度

rh_lin;

//rh_lin:

湿度linear值

rh_true;

//rh_true:

湿度ture值

t_C;

//t_C:

温度℃

t_C=t*0.01-40;

//补偿温度

rh_lin=C3*rh*rh+C2*rh+C1;

//相对湿度非线性补偿

rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;

//相对湿度对于温度依赖性补偿

if(rh_true>

100)rh_true=100;

//湿度最大修正

if(rh_true<

0.1)rh_true=0.1;

//湿度最小修正

*p_temperature=t_C;

//返回温度结果

*p_humidity=rh_true;

//返回湿度结果

主函数

main(void)

temp,humi;

valuehumi_val,temp_val;

//定义两个共同体,一个用于湿度,一个用于温度

//用于检验是否出现错误

checksum;

//CRC

init12864lcd();

display1();

display2();

display3();

s_connectionreset();

//启动连接复位

while

(1)

error=0;

//初始化error=0,即没有错误

error+=s_measure((unsigned 

char*)&

temp_val.i,&

checksum,TEMP);

//温度测量

humi_val.i,&

checksum,HUMI);

//湿度测量

if(error!

=0)s_connectionreset();

////如果发生错误,系统复位

else

humi_val.f=(float)humi_val.i;

//转换为浮点数

temp_val.f=(float)temp_val.i;

calc_sth10(&

humi_val.f,&

temp_val.f);

//修正相对湿度及温度

temp=temp_val.f*10;

humi=humi_val.f*10;

wendu[0]=temp/1000+'

0'

//温度百位

wendu[1]=temp%1000/100+'

//温度十位

wendu[2]=temp%100/10+'

//温度个位

wendu[3]=0x2E;

//小数点

wendu[4]=temp%10+'

//温度小数点后第一位

displaywendu();

shidu[0]=humi/1000+'

//湿度百位

shidu[1]=humi%1000/100+'

//湿度十位

shidu[2]=humi%100/10+'

//湿度个位

shidu[3]=0x2E;

shidu[4]=humi%10+'

//湿度小数点后第一位

displayshidu();

delay(800);

//等待足够长的时间,以现行下一次转换

相关手册资料及源码下载地址:

基于51单片机SHT11温湿度传感器检测程序相关资料

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2