好文档 - 专业文书写作范文服务资料分享网站

基于单片机SHT11温湿度传感器电路图于程序文件

天下 分享 时间: 加入收藏 我要投稿 点赞

Delay();

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

}

/*********************************** 函数名称:SHT11_End()

当接收两个8byte数据后部接收CRC校验码 ************************************/ void SHT11_End() {

SHT11_DATA=1; SHT11_SCK=1; Delay();

SHT11_SCK=0; Delay(); }

/*************************************

函数名称:void SHT11_Write_Register(uchar command ,uchar dat) 函数说明:向SHT11的状态寄存器设置功能

command为REG_WRITE 0x06写寄存器

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

void SHT11_Write_Register(uchar command ,uchar dat) {

SHT11_Start();

SHT11_Sendbyte(command); SHT11_Answer();

SHT11_Sendbyte(dat); SHT11_Answer(); }

/***************************************

函数名称:uchar SHT11_Read_Register(uchar command)

函数说明:command为REG_READ 0x07//读寄存器 返回值为状态寄存器的值

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

当位6为0时表明VDD>2.47V 当位6为1时表明VDD<2.47V即电量不足 位0表明当前的测量分辨率

当位0为1时表明测量精度:8位/湿度 12位温度 当位0为0时表明测量精度:12位湿度 14位温度 默认为0

*******************************************/

uchar SHT11_Read_Register(uchar command) {

uchar dat; SHT11_Start();

SHT11_Sendbyte(command); SHT11_Answer();

dat=SHT11_Receivebyte(); SHT11_End(); return(dat); }

/***************************************

函数名称:SHT11_Measure(uchar command,uint time); 函数功能:设置SHT11检测功能,并返回相应的检测结果 函数说明:command形参用于设定温度检测还是湿度检测, time形参用于设定检测过程中的等待时间,以确定检测结果的位数 11ms/55ms/210ms 分别对应8位/12位/14位 ****************************************/

uint SHT11_Measure(uchar command,uchar time) {

uint dat=0;

uchar data_high,data_low; SHT11_Start();

SHT11_Sendbyte(command); SHT11_Answer(); Delay_Ms(time);

SHT11_Test_Finish();

data_high=SHT11_Receivebyte(); MCU_Answer();

data_low=SHT11_Receivebyte(); SHT11_End();

dat=(dat|data_high); dat=(dat<<8)|data_low; return(dat); }

/****************************************

函数名称:Convert_Tempeture12bit(uint dat); 函数功能:将检测到的数据转化为相应的温度数据 函数说明:温度转换公式--T=d1+d2*SOt 公式中的参数d1=-40,d2=0.04 适用于12位测量精度

*/

float SHT11_Convert_Tempeture12bit(uint dat) {

float tempeture1;

tempeture1=-40+0.04*dat; if(tempeture1>23)

tempeture1=tempeture1+1; if(tempeture1>55)

tempeture1=tempeture1+1; if(P37==1) {

if(tempeture1>=16&&tempeture1<30) {

P33=1; P32=0; } else {

P33=0; P32=1; } }

return(tempeture1); }

/*****************************************

函数名称:SHT11_Convert_Humidity8bit(uint dat,float temp) 函数功能:将检测到的数据转化为相应的湿度数据

函数说明:相对湿度转换公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(检测数据的线性化 SOrh为单片机接收到的数据)

-----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline 公式中的参数:C1=-4,C2=0,648,C3=-0.00072 t1=0.01,t2=0.00128 适用于8位测量精度

*/

uint SHT11_Convert_Humidity8bit(uint dat,float temp) {

float RHline,RHtrue; uint r;

RHline=-4+0.648*dat-0.00072*dat*dat;

RHtrue=(temp-25)*(0.01+0.00128*dat)+RHline; r=(RHtrue-3)*10+0.5; if(P37==0) {

if(r>=400&&r<600) {

P33=1; } else {

P33=0; }

if(r>=600) {

P32=1;

} else {

P32=0; } }

return(r); }

#endif

Display.c文件:

#include #include \

#define uchar unsigned char #define uint unsigned int

#define TEM_TEST 0x03//温度检测命令 #define HUM_TEST 0x05//湿度检测命令 #define REG_READ 0x07//读寄存器 #define REG_WRITE 0x06//写寄存器

#define FUNCTION_SET 0x01//设置SHT11的工作精度为8位/湿度 12位温度

uchar DispData[4] = {0, 1, 2, 3};

code uchar DispSegmentP0[10]={0x3f,0x06,0x1b,0x0f,0x26,0x2d,0x3d,0x07,0x3f,0x2f}; code uchar DispSegmentP2[10]={0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x00,0x22,0x22}; // 0 1 2 3 4 5 6 7 8 9 % code uchar DispCtrl[4] = {0xef, 0xdF, 0xbf ,0x7F}; sbit P16=P1^6; sbit P26=P2^6; sbit P34=P3^4;

void Temp_delay(unsigned int j) {

uchar i;

for(i=100;i>0;i--) {

for(j;j>0;j--); } }

void Show(uchar *Buffer) {

基于单片机SHT11温湿度传感器电路图于程序文件

Delay();SHT11_DATA=1;//释放数据总线这条指令非常重要不加的话导致单片机不能读取低8位}/***********************************函数名称:SHT11_End()当接收两个8byte数据后部接收CRC校验码************************
推荐度:
点击下载文档文档为doc格式
3c3202ln2p2nsft0iuth97tl37kuug00rdn
领取福利

微信扫码领取福利

微信扫码分享