SHT11驱动程序.doc_第1页
SHT11驱动程序.doc_第2页
SHT11驱动程序.doc_第3页
SHT11驱动程序.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SHT11.h#ifndef _SHT11_h_#define _SHT11_h_#define uchar unsigned char#define uint unsigned int#define NOP() _nop_()#define TEMP 0#define HUMI 1sbit DQ=P27; /端口定义sbit SCK=P26;typedef structfloat temperature;float humidity;float crc_temp;float crc_humi;uchar num_temp5;uchar num_humi5;SHT_dat;/*=启动函数=*/void init_SHT()DQ=1;SCK=0;NOP();SCK=1;NOP();DQ=0;NOP();SCK=0;NOP();NOP();NOP();SCK=1;NOP();DQ=1;NOP();SCK=0;/*=字节传送函数=*/uchar write_byte(uchar value)uchar i,error=0;for(i=0x80;i0;i/=2) /高位先传送if(i & value)DQ=1; /循环相与,结果即为要发送的位else DQ=0;SCK=1;NOP();NOP();NOP();SCK=0;DQ=1; /释放总线SCK=1;if(DQ=1) error=1; /检查应答,确认通讯正常SCK=0;return error; /error1,通讯有误/*=读数据函数=*/uchar read_byte(uchar dat)uchar i,val=0;DQ=1;for(i=0x80;i0;i/=2)SCK=1;if(DQ) val=(val | i);SCK=0;DQ=dat;SCK=1;NOP();NOP();NOP();SCK=0;DQ=1;return val;/*=复位函数=*/void reset_SHT()uchar i;DQ=1;SCK=0;for(i=0;i9;i+) /DATA保持高电平,SCK时钟出发9次复位SCK=1;NOP();SCK=0;init_SHT();/*=发送指令到SHT11执行温度和湿度的测量转换=*/convert_SHT(SHT_dat *s,uchar mode)uchar i,ack=0;uchar valueM,valueL,checksum;float com;doreset_SHT();switch(mode)case TEMP: ack=write_byte(0x03);break;case HUMI: ack=write_byte(0x05);break;default: break;while(ack=1);for(i=0;itemperature=com;s-crc_temp=(float)checksum;if(mode=HUMI)s-humidity=com;s-crc_humi=(float)checksum;/*=温度和湿度补偿及输出温度值和相对湿度值=*/void caculation_SHT(SHT_dat *s)const float c1=-4.0;const float c2=+0.0405;const float c3=-0.0000028; /以上为12位湿度修正公示取值const float t1=+0.01;const float t2=+0.00008; /以上为14位温度修正公示取值float t=s-temperature;float rh=s-humidity;float rh_lin;float rh_ture;float t_c;t_c=t * 0.01 - 40; /温度的补偿rh_lin=c3*rh*rh + c2*rh + c1; /相对湿度非线性补偿rh_ture=( t_c - 25 ) * ( t1 + t2*rh ) + rh_lin; /相对湿度对于温度依赖性补偿if( rh_ture 100 ) rh_ture=100; /相对湿度最大值修正if( rh_ture 0.1 ) rh_ture=0.1; /相对湿度最小值修正if(t_ctemperature=t_c; /保存温度补偿后的结果s-humidity=rh_ture; /保存相对湿度补偿后的结果/*=计算绝对湿度值=float calc_dewpoint(float h,float t)float logEx,dew_point;logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);return dew_point;/*=浮点数数据处理=*/void float_convert(SHT_dat *s)float com;uint dat;com=s-temperature;com*=100;dat=(uint)com;s-num_temp0=dat/1000+0x30; /十位s-num_temp1=dat%1000/100+0x30; /个位s-num_temp2=0x2e;s-num_temp3=dat%100/10+0x30; /小数点第一位s-num_temp4=dat%10+0x30; /小数点第二位com=s-humidity;com*=100;dat=(uint)com;s-num_humi0=dat/1000+0x30; /十位s-n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论