返回首页

stc90c51单片机开发板和sht11温湿度传感器连接测量温湿度的具体程序

来源:www.ahlulin.com   时间:2023-08-30 16:59   点击:268  编辑:admin   手机版

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uint hum,temp,i; //定义湿度、温度(全局袜纤灶)

uchar hum_h,hum_l,temp_h,temp_l,check,cnt=0; //湿度高、低8位,温度高、低8位,校验位

uchar bai,shi,ge,bai1,shi1,ge1; //数码管 ,cnt=0

uchar code table[]={0xfb,0xfd,0xfe};//位选数组

uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //无小数点

uchar code table2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //有小数点

sbit dht=P2^4;

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

邮保u告扮s级)函数

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

void delay_us(uint i)

{

while(i--);

}

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

延时(ms级)函数

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

void delay(uint z)

{

uint x,y;

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

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

}

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

温湿度初始化(准备传送数据)函数

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

void dht_init()

{

dht=0;

delay_us(50); //拉低延时500微秒,发送开始信号

dht=1; //释放总线,延竖碧时30微秒

delay_us(4);

while(!dht); //拉低等待

while(dht); // 拉高等待,即将传送数据

}

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

读取字节函数

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

uchar read_byte()

{

uchar n,byte=0,dat;

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

{

while(!dht);

delay_us(4); //理论上28us<延时<70us,此处写2--6都可以

dat=0;

if(dht)

dat=1;

while(dht);

byte<<=1;

byte|=dat;

}

return byte;

}

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

读40位数据函数

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

void read_hum_temp()

{

dht_init();

hum_h=read_byte(); //读湿度

hum_l=read_byte();

temp_h=read_byte(); //读温度

temp_l=read_byte();

check=read_byte(); //读校验

while(!dht);// 等待低电平结束

dht=1; //最后拉高总线

}

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

数据转化函数

提取各位数字

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

void zhuanhuan()

{

uchar a;

a=hum_h+hum_l+temp_h+temp_l;

if(a==check)

{

hum=temp=0;

hum=((hum|hum_h)<<8)|hum_l;

temp=((temp|temp_h)<<8)|temp_l;

bai=temp/100;

shi=temp%100/10;

ge=temp%10;

bai1=hum/100;

shi1=hum%100/10;

ge1=hum%10;

}

else bai=shi=ge=bai1=shi1=ge1=0;

}

void saomiao1()//温度

{

P2=table[0];

P0=table1[ge];

delay(1);

P0=0X00;

P2=table[1];

P0=table2[shi];

delay(1);

P0=0X00;

P2=table[2];

P0=table1[bai];

delay(1);

P0=0X00;

}

void saomiao2()//湿度

{

P2=table[0];

P0=table1[ge1];

delay(1);

P2=table[1];

P0=table2[shi1];

delay(1);

P2=table[2];

P0=table1[bai1];

delay(1);

}

//===================================================

void main()

{

delay(200);

while(1)

{

read_hum_temp();

zhuanhuan();

for(i=0;i<1500;i++)

{

saomiao1() ;

}

delay(500);

}

}

顶一下
(0)
0%
踩一下
(0)
0%