非标协议外设-DHT11温湿度传感器

目录

1.产品介绍

 2.实现效果

3.代码分文件实现

3.1主函数代码

 3.2延迟函数代码

 3.3 DH11温湿度模块代码

3.4串口初始化代码


1.产品介绍

 

只有一个数据传输线,用 DATA  时序传输。

数据传送逻辑
只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出
数据格式
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验
通讯过程时序图

 检测模块是否存在

数字0信号表示方法如图所示

 数字1信号表示方法.如图所示

 2.实现效果

在串口种可以显示温湿度数据

 

3.代码分文件实现

分文件的个人理解,
Source Group1文件下的C文件都被编译了,你的所有函数都可以被Source找到,但是不同的C文件不能跨文件找C,所以你需要添加头文件就可以调用了。

3.1主函数代码

#include "reg52.h"	
#include "intrins.h"

char data1[5];
char humidity[10];
char tempreture[10];

void init_usb(void);
void sendmesege(char *p);
void Delay2000ms();
void disp_data(void);
void DH11_to_data1(char data1[]);

void main(void)
{	
	init_usb();	   //´®¿Úuart³õʼ»¯

	while(1){
			
		DH11_to_data1(data1);		 //	  DH11_to_data1
		Delay2000ms();
		//½ÓÏÂÀ´ÏÔʾÊý¾Ý´®¿Ú
		disp_data();	 //ʪ¶ÈÊý¾Ý¸øhumidity  ζÈÊý¾Ý¸øtmpreture
    sendmesege(humidity);
		sendmesege("\r\n");
		sendmesege(tempreture);
		sendmesege("\r\n");
	}
}

void disp_data(void)
{
	humidity[0]='H';
	humidity[1]=':';
	humidity[2]=data1[0]/10+0x30;
	humidity[3]=data1[0]%10+0x30;
	humidity[4]='.';
	humidity[5]=data1[1]/10+0x30;
	humidity[6]=data1[1]%10+0x30;
	
	tempreture[0]='T';
	tempreture[1]=':';
	tempreture[2]=data1[2]/10+0x30;
	tempreture[3]=data1[2]%10+0x30;
	tempreture[4]='.';
	tempreture[5]=data1[3]/10+0x30;
	tempreture[6]=data1[3]%10+0x30;

}

 3.2延迟函数代码

#include "intrins.h"

void Delay35us()		//@11.0592MHz
{
	unsigned char i;

	_nop_();
	i = 13;
	while (--i);
}

void Delay25ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 45;
	j = 208;
	do
	{
		while (--j);
	} while (--i);
}
void Delay30us()		//@11.0592MHz
{
	unsigned char i;

	i = 11;
	while (--i);
}
void Delay2000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 15;
	j = 2;
	k = 235;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

 3.3 DH11温湿度模块代码

#include "reg52.h"

sbit tp_data=P3^3;
void Delay25ms();
void Delay30us();
void Delay35us();
void Delay2000ms();

void init_DHT(void)
{
	tp_data = 1;
	tp_data=0;
	Delay25ms();	  //µÍµÄ½×¶Î
	tp_data=1;
	Delay30us();
	Delay30us();   //¿ªÊ¼ÏìÓ¦½×¶Î  µã¿¨

	while(!tp_data);	//¿¨DHTΪµÍ	  ×ßÍê
	while(tp_data);		//¿¨DHTÀ­¸ß	  ×ßÍê	 ºóÃæÊÇÊý¾Ý½ÓÊÜ
	   			
}

void DH11_to_data1(char data1[])
{
	int i,j;	//i±íʾ8bitµÄÊý¾Ý   j±íʾÿ¸öbitµÄÖµ
	char tmp,flag;

	init_DHT();	   //³õʼ»¯ºó½ÓÊÜ8λÊý¾Ý+8λ  +8λ+8λ	  +8λ
		for(i=0;i<5;i++){			
			for(j=0;j<8;j++){
				while(!tp_data);  //À­µÍ×ßÍê
				Delay35us();
				if(tp_data==1){
					flag=1;
					while(tp_data);		//×ßÍê¸ßµçƽ
				}else{
					flag=0;
				}
				tmp=tmp<<1;		//tmp±íʾ½ÓÊܵÄÒ»¸ö8λÊý¾Ý
				tmp |=flag;	
			}
			data1[i]=tmp;
		}

}


3.4串口初始化代码

#include "reg52.h"
sfr AUXR=0x8e;

void sendmesege(char *p)
{
		char *data1=p;

        while(*data1 != '\0'){
			SBUF= *(data1++);	 //·¢ËÍÍê³Éºó²úÉúÖÐ¶Ï   ½øÈëinterrupt 4
			while(!TI);
			TI=0;			
		}
    
}


void UART_Pountine(void) interrupt 4
{
	if(TI){
	}
	if(RI){
	}
}

void init_usb(void)
{
	SCON=0x50;//²ÉÓù¤×÷·½Ê½1½øÐÐͨѶ
	PCON &= 0x7F;  //ÒªÇå0¾Í &ÉÏ0
	ET1=0;//´®¿ÚÓõĶ¨Ê±Æ÷1£¬¹Ø±ÕÖжϡ£ÅäÖÃÏàͬµÄ²¨ÌØÂÊ
	//TCON ¶¨Ê±Æ÷¿ØÖƼĴæÆ÷
	TR1=1;  //´ò¿ª¶¨Ê±Æ÷1
	//TMOD? ¶¨Ê±Æ÷ģʽ¼Ä´æÆ÷
	TMOD &=0x0F; //&0¾ÍÇå0
	TMOD |=0x20; // |1¾Í±ä1
	TH1=0xFD; //¸ßλ? ? ? ×Ô¶¯ÖØװʱTH1½«×Ô¶¯×°ÈëTL1
	TL1=0xFD; //µÍλ
	//TI ÖжÏÇëÇó±ê־λ   RIÖжÏÇëÇó±ê־λ
	EA=1;ES=1;   //×ÜÖжÏÔÊÐíλ  ´®¿ÚÖжÏÔÊÐíλ 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值