173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

51单片机温湿度检测

htxw 2023-03-14 资讯中心 12 ℃

基于单片机的温湿度检测系统设计

pic单片机应用系统开发典型实例〉〉有差不多的例子,不过 是数码显示,不是液晶显示。液晶程序上网上找就行啊,上有很多程序,或许有现成的。

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

#includereg52.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;x0;x--)

for(y=100;y0;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;n8;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;i1500;i++)

{

saomiao1() ;

}

delay(500);

}

}

51单片机的温湿度检测中加入一个PM值检测模块,两个模块是并行的吗?

单片机的程序不是并行的.

每个检测都是分先后次序进行的.

51单片机c语言编程的温湿度检测控制程序

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

*

文件名

温度采集DS18B20.c

*

描述

:

该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来。

*

创建人

东流,2009年4月10日

*

版本号

2.0

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

#includereg52.h

#define

uchar

unsigned

char

#define

uint

unsigned

int

#define

jump_ROM

0xCC

#define

start

0x44

#define

read_EEROM

0xBE

sbit

DQ

=

P2^3;

//DS18B20数据口

unsigned

char

TMPH,TMPL;

uchar

code

table[10]

=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

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

*

名称

:

delay()

*

功能

:

延时,延时时间大概为140US。

*

输入

:

*

输出

:

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

void

delay_1()

{

int

i,j;

for(i=0;

i=10;

i++)

for(j=0;

j=2;

j++)

;

}

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

*

名称

:

delay()

*

功能

:

延时函数

*

输入

:

*

输出

:

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

void

delay(uint

N)

{

int

i;

for(i=0;

iN;

i++)

;

}

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

*

名称

:

Delay_1ms()

*

功能

:

延时子程序,延时时间为

1ms

*

x

*

输入

:

x

(延时一毫秒的个数)

*

输出

:

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

void

Delay_1ms(uint

i)//1ms延时

{

uchar

x,j;

for(j=0;ji;j++)

for(x=0;x=148;x++);

}

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

*

名称

:

Reset()

*

功能

:

复位DS18B20

*

输入

:

*

输出

:

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

uchar

Reset(void)

{

uchar

deceive_ready;

DQ

=

0;

delay(29);

DQ

=

1;

delay(3);

deceive_ready

=

DQ;

delay(25);

return(deceive_ready);

}

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

*

名称

:

read_bit()

*

功能

:

从DS18B20读一个位值

*

输入

:

*

输出

:

从DS18B20读出的一个位值

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

uchar

read_bit(void)

{

uchar

i;

DQ

=

0;

DQ

=

1;

for(i=0;

i3;

i++);

return(DQ);

}

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

*

名称

:

write_bit()

*

功能

:

向DS18B20写一位

*

输入

:

bitval(要对DS18B20写入的位值)

*

输出

:

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

void

write_bit(uchar

bitval)

{

DQ=0;if(bitval==1)

DQ=1;

delay(5);

DQ=1;

}

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

*

名称

:

read_byte()

*

功能

:

从DS18B20读一个字节

*

输入

:

*

输出

:

从DS18B20读到的值

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

uchar

read_byte(void)

{

uchar

i,m,receive_data;

m

=

1;

receive_data

=

0;

for(i=0;

i8;

i++)

{

if(read_bit())

{

receive_data

=

receive_data

+

(m

i);

}

delay(6);

}

return(receive_data);

}

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

*

名称

:

write_byte()

*

功能

:

向DS18B20写一个字节

*

输入

:

val(要对DS18B20写入的命令值)

*

输出

:

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

void

write_byte(uchar

val)

{

uchar

i,temp;

for(i=0;

i8;

i++)

{

temp

=

val

i;

temp

=

temp

0x01;

write_bit(temp);

delay(5);

}

}

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

*

名称

:

Main()

*

功能

:

主函数

*

输入

:

*

输出

:

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

void

main()

{

float

tt;

uint

temp;

P2

=

0x00;

while(1)

{

Reset();

write_byte(jump_ROM);

write_byte(start);

Reset();

write_byte(jump_ROM);

write_byte(read_EEROM);

TMPL

=

read_byte();

TMPH

=

read_byte();

temp

=

TMPL

/

16

+

TMPH

*

16;

P0

=

table[temp/10%10];

P2

=

6;

Delay_1ms(5);

P0

=

table[temp%10];

P2

=

7;

Delay_1ms(5);

}

}

51单片机温湿度检测的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:51单片机温湿度检测

<