51温度湿度c语言代码解读Word文档下载推荐.docx

上传人:b****3 文档编号:14621241 上传时间:2022-10-23 格式:DOCX 页数:20 大小:18.67KB
下载 相关 举报
51温度湿度c语言代码解读Word文档下载推荐.docx_第1页
第1页 / 共20页
51温度湿度c语言代码解读Word文档下载推荐.docx_第2页
第2页 / 共20页
51温度湿度c语言代码解读Word文档下载推荐.docx_第3页
第3页 / 共20页
51温度湿度c语言代码解读Word文档下载推荐.docx_第4页
第4页 / 共20页
51温度湿度c语言代码解读Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

51温度湿度c语言代码解读Word文档下载推荐.docx

《51温度湿度c语言代码解读Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《51温度湿度c语言代码解读Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

51温度湿度c语言代码解读Word文档下载推荐.docx

00:

00"

;

ucharcodetable2[]="

00RH:

00.0"

sbitshui1=P1^0;

sbitshui2=P1^1;

sbitshi_s1=P1^2;

sbitshi_s2=P1^3;

sbitshi_s3=P1^4;

sbitled=P1^6;

sbitsound=P1^7;

sbitlcden=P2^2;

sbitlcdrw=P2^1;

sbitlcdrs=P2^0;

sbitrelay=P2^3;

sbits1=P2^7;

uchardatadisdata[4];

ucharnum,count,s1num;

charshi,fen,miao,shi1,fen1,miao1;

uintbian,i,j;

voiddelay(uintz)

{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

//SHT11程序(SHT11.c):

#definenoACK0//继续传输数据,用于判断是否结束通讯

#defineACK1//结束数据传输;

//地址命令读/写

#defineSTATUS_REG_W0x06//00000110

#defineSTATUS_REG_R0x07//00000111

#defineMEASURE_TEMP0x03//00000011

#defineMEASURE_HUMI0x05//00000101

#defineRESET0x1e//00011110

//写字节程序

chars_write_byte(unsignedcharvalue)

{

unsignedchari,error=0;

for(i=0x80;

i>

>

=1)//高位为1,循环右移

{

if(i&

value)DATA=1;

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

elseDATA=0;

SCK=1;

_nop_();

_nop_();

//延时3us

SCK=0;

}

DATA=1;

//释放数据线

SCK=1;

error=DATA;

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

_nop_();

SCK=0;

returnerror;

//error=1通讯错误

//读字节程序

chars_read_byte(unsignedcharack)

unsignedchari,val=0;

for(i=0x80;

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

//读一位数据线的值

DATA=!

ack;

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

returnval;

//启动传输

voids_transstart(void)

DATA=1;

DATA=0;

voids_connectionreset(void)

unsignedchari;

//准备

for(i=0;

i<

9;

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

s_transstart();

//启动传输

}

//温湿度测量

chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)

//进行温度或者湿度转换,由参数mode决定转换内容;

unsignederror=0;

unsignedinti;

switch(mode)//选择发送命令

caseTEMP:

error+=s_write_byte(MEASURE_TEMP);

break;

//测量温度

caseHUMI:

error+=s_write_byte(MEASURE_HUMI);

//测量湿度

default:

for(i=0;

65535;

i++)if(DATA==0)break;

//等待测量结束

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通讯错误

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

voidcalc_sth10(float*p_humidity,float*p_temperature)

constfloatC1=-4.0;

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

constfloatC2=+0.0405;

constfloatC3=-0.0000028;

constfloatT1=0.46;

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

constfloatT2=+0.00008;

floatrh=*p_humidity;

//rh:

12位湿度

floatt=*p_temperature;

//t:

14位温度

floatrh_lin;

//rh_lin:

湿度linear值

floatrh_true;

//rh_true:

湿度ture值

floatt_C;

//t_C:

温度℃

t_C=t*0.01-40;

//补偿温度

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

//相对湿度非线性补偿

rh_true=(t_C-33)*(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;

//返回湿度结果

//从相对温度和湿度计算露点

floatcalc_dewpoint(floath,floatt)

floatlogEx,dew_point;

logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);

dew_point=(0.66077-logEx)*237.3/(logEx-8.16077);

returndew_point;

}

typedefunion//定义共用同类型

{

floatf;

}value;

voidwrite_com(ucharcom)//lcd部分

lcdrs=0;

lcdrw=0;

delay(5);

lcden=1;

P0=com;

lcden=0;

voidwrite_data(uchardate)

lcdrs=1;

P0=date;

voidlcd_init()

delay(15);

write_com(0x38);

write_com(0x08);

write_com(0x01);

write_com(0x06);

write_com(0x0c);

write_com(0x80+1);

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

for(num=0;

num<

8;

num++)

{

write_data(table1[num]);

delay(20);

write_com(0x80+0x40+1);

16;

write_data(table2[num]);

}

voidwrite_sfm(ucharadd,uchardate)

ucharshi,ge;

shi=date/1

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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