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

 我来答
lhg对你加锁
2014-03-17
知道答主
回答量:6
采纳率:0%
帮助的人:7.3万
展开全部
#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;

/******************************
邮保╱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);
}
}
追问
是不是直接写入单片机就行啊?
追答
恩  可以的
11
2024-10-22 广告
要进行个具体的测量工作,首先要考虑采用何种原理的传感器,这需要分析多方面的因素之后才能确定。因为,即使是测量同一物理量,也有多种原理的传感器可供选用,哪一种原理的传感器更为合适,则需要根据被测量的特点和传感器的使用条件考虑以下一些具体问题:... 点击进入详情页
本回答由11提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式