SHT11温湿度传感器与1602应用代码及仿真Word格式文档下载.docx
《SHT11温湿度传感器与1602应用代码及仿真Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SHT11温湿度传感器与1602应用代码及仿真Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
32^
莎
Zj
22:
ITT
RP1;
呻F氐曲
P1P1F1P1P1門FP1
P3.WR^O
P3.irra>
Fj.g/rjwpa.sThTT
P3.-4/TOF3.5H1
PMB殛
P97.W
EX1>
仿真图形
TEnP:
026.?
5:
C
HUni:
077.2^RH
<
TE.
i■
ine
RD.DTACOTO.1/W1
PCI.2/哒
P0.3/她3F0.即糾PO.a/flMPWB/純阳FQ,7/fiC7
U2
P2MB
P2.1朋P22/AK)PZ^AHP2.4/A12F2.5/A13RJS/AMIP2.7/A15
2?
P1D
P1.1
P12
P13
H耳
PW
P2
P3.0fR^E>
P3.1jTXI>
P32/iwT5P3.3iiNfi
P3<
TQ
P3.&
T1
P3日殛
P2.7/R&
rtxTi
运行后结果
#ifndef_TOU_H
#define__TOU_H__
#include<
reg52.h>
#ineludevintrins.h>
〃#include<
math.h>
//Keillibrary
#defineucharunsignedcharenum{TEMP,HUMI};
sbitDATA=P1A1;
sbitSCK=P1A0;
sbitRS=P2A0;
sbitRW=P2A1;
sbitE=P2A2;
sfrDBPort=0x80;
〃P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
/********DS1602
voidLCD_Initial();
函数声明
********/
voidGotoXY(unsignedcharx,unsignedchary);
voidPrint(unsignedchar*str);
voidLCD_Write(bitstyle,unsignedcharinput);
/********
SHT10
voids_connectionreset(void);
chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode);
voidcalc_sth10(float*p_humidity,float*p_temperature);
//floatcalc_dewpoint(floath,floatt);
#endif
***************************************************************************************************
****************************************************
//SHT10程序(SHT10.c):
实用文档
〃#include<
tou.h>
#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>
0;
>
=1)//
{
if(i&
value)DATA=1;
//
elseDATA=0;
SCK=1;
_nop_();
_nop_();
_nop_();
〃
SCK=0;
}
DATA=1;
error=DATA;
returnerror;
〃error=1
//读字节程序
chars_read_byte(unsignedcharack)
//
unsignedchari,val=0;
for(i=0x80;
高位为1,循环右移
和要发送的数相与,结果为发送的位
延时3us
释放数据线
检查应答信号,确认通讯正常
通讯错误
高位为1,循环右移
if(DATA)val=(val|i);
//读一位数据线的值
DATA=!
ack;
returnval;
//启动传输
voids_transstart(void)
//generatesatransmissionstart
//
//DATA:
||
//______
//SCK:
___||___||
SCK=0;
DATA=0;
_nop_();
如果是校验,读取完后结束通讯;
准备
//连接复位
voids_connectionreset(void)
//communicationreset:
DATA-line=1andatleast9SCKcyclesfollowedbytransstart
//_______________
__||__|L_||__|」||__|」||__||||—1|
unsignedchari;
//准备
for(i=0;
i<
9;
i++)//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位
SCK=O;
启动传输
启动连接复位
发送复位命令
s_transstart();
//软复位程序
chars_softreset(void)
//resetsthesensorbyasoftreset
unsignedcharerror=0;
s_connectionreset();
error+=s_write_byte(RESET);
//returnerror;
/*读状态寄存器
chars_read_statusreg(unsignedchar*p_value,unsignedchar*p_checksum)
//readsthestatusregisterwithchecksum(8-bit)
//transmissionstart
error=s_write_byte(STATUS_REG_R);
//sendcommandtosensor*p_value=s_read_byte(ACK);
//readstatusregister(8-bit)*p_checksum=s_read_byte(noACK);
//readchecksum(8-bit)
returnerror;
//error=1incaseofnoresponseformthesensor
//写状态寄存器
chars_write_statusreg(unsignedchar*p_value)
//writesthestatusregisterwithchecksum(8-bit)
error+=s_write_byte(STATUS_REG_W);
//sendcommandtosensorerror+=s_write_byte(*p_value);
//sendvalueofstatusregister
//error>
=1incaseofnoresponseformthesensor
}*/
//温湿度测量
chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)
//进行温度或者湿度转换,由参数mode决定转换内容;
//enum{TEMP,HUMI};
//已经在头文件中定义
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);
*(p_value+1)=s_read_byte(ACK);
等待测量结束
如果长时间数据线没有拉低,说明测量错误
读第一个字