100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 用c语言编写基于sht10传感器的仓库温湿度监测系统的程序 单片机远程仓库湿度监测系统

用c语言编写基于sht10传感器的仓库温湿度监测系统的程序 单片机远程仓库湿度监测系统

时间:2022-01-17 04:48:32

相关推荐

用c语言编写基于sht10传感器的仓库温湿度监测系统的程序 单片机远程仓库湿度监测系统

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

//SHT11温度+湿度传感器,测量结果用LCD1602显示

//操作的关键部分是1.对照SHT11的时序图操作

// 2.数值的转换

// 3.对SHT11的误差进行线性补偿

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

#include

#include

#include

sbit SCK=P2^4;

sbit DATA=P2^5;

sbit LCD_RS=P2^0;

sbit LCD_EN=P2^2;

unsigned char RH_H,RH_L; //接收的湿度的高位数据和低位数据

unsigned int i,j;

unsigned char dispbuf[4];

void delay(unsigned int z)

{

unsigned int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_GETRH(unsigned char GETRH)

{

LCD_RS=0;

P0=GETRH;

delay(1);

LCD_EN=1;

delay(1);

LCD_EN=0;

}

void write_DATA(unsigned char *date)

{

unsigned char n;

for(n=0;n<0x40;n++)

{

if(date[n]=='*')break;//检测,如果字符输入"*",就终止

LCD_RS=1;

P0=date[n];

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

}

}

void init()

{

LCD_EN=0;

write_GETRH(0x38);

write_GETRH(0x0c);

write_GETRH(0x06);

write_GETRH(0x01);

}

//在SCK上发送n个脉冲信号

void nSCKPulse(unsigned int n)

{

for(i=n;i>0;i--)

{

SCK=0;

SCK=1;

}

}

//启动SHT11

void STARTSHT11()

{

SCK=1;

DATA=0;

SCK=0;

SCK=1;

DATA=1;

SCK=0;

}

//获得湿度数据

void GETRH(unsigned char GETRH)//测量湿度

{

unsigned char bei=0x80;

DATA=1;

SCK=0; //下面可以开始

for(i=8;i>0;i--)

{

if(GETRH&bei)

{

DATA=1;

SCK=1;

SCK=0;

}

else

{

DATA=0;

SCK=1;

SCK=0;

}

bei=bei/2;

}

}

//对SHT11进行读操作

void READSHT11()

{

unsigned char temp;

RH_H=0;

RH_L=0;

for(i=0;i<4;i++) //4个脉冲没数据

{

SCK=1;

SCK=0;

}

for(i=4;i>0;i--) //接收RH高4位数据

{

SCK=1;

temp=0x01;

if(DATA==1)

{

temp=(temp<

RH_H=RH_H+temp;

}

SCK=0;

}

DATA=0;//拉低

SCK=1;

SCK=0;

DATA=1;//释放

for(i=8;i>0;i--) //接收RH低4位数据

{

SCK=1;

temp=0x01;

if(DATA==1)

{

temp=(temp<

RH_L=RH_L+temp;

}

SCK=0;

}

P1=RH_H;

P3=RH_L;

DATA=0;//拉低

SCK=1;

SCK=0;

DATA=1;//释放(不做CRC校验,就此结束)

}

//阶乘函数

long FACTORIAL(int n)

{

long nn=1;

for(;n>0;n--)

{

nn=10*nn;

}

return(nn);

}

//SHT11的补偿算法

void COMPENSATIONSHT()

{

unsigned long ii;

char m;

ii=((((RH_H*256+RH_L)-221)*318878)/100000);

if(ii>5000)

{

ii=ii+((10000-ii)*620/5000);

}

else

{

ii=ii+ii*620/5000;

}

//printf("%f\n",ii);

for(m=4;m>=0;m--)

{

if(m==1)

{

write_DATA(".*");

}

LCD_RS=1;

P0=(int)(ii/FACTORIAL(m))+0x30;

if(m==4&P0==0x30)

{

P0=0x20;

}

if(m==4&P0==0x31)

{

write_DATA("100.00*");

break;

}

if(m==3&P0==0x30)

{

P0=0x20;

}

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

ii=ii-((int)(ii/FACTORIAL(m)))*FACTORIAL(m);

}

write_DATA("%*");

}

void InitUart(void)

{

SCON = 0x50; //工作方式1

TMOD = 0x21;

PCON = 0x00;

TH1 = 0xfd; //使用T1作为波特率发生器

TL1 = 0xfd;

TI = 1;

TR1 = 1; //启动T1//启动T1

}

void main()

{

init();

InitUart();

write_GETRH(0x80+0x03); //放第一行字符的位置

write_DATA("Humidity*");

write_GETRH(0x80+0x42); //放第二行字符的位置

write_DATA("%RH*");

while(1)

{

nSCKPulse(10);//复位

STARTSHT11();//启动

GETRH(0x05);//测湿度命令

SCK=1;

while(DATA); //ack为低成功,继续

SCK=0; //一直都为低

DATA=1;

while(DATA); //等待300毫秒

READSHT11();

write_GETRH(0x80+0x47); //放第二行字符的位置

COMPENSATIONSHT();//数值转换+显示

putchar(0x02);

}

}

用c语言编写基于sht10传感器的仓库温湿度监测系统的程序 单片机远程仓库湿度监测系统仿真max487+sht11源程序+电路原理图...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。