Msp430驱动dht11温湿度传感器

2019-07-22 17:18发布

Msp430驱动dht11温湿度传感器.pdf (389.23 KB, 下载次数: 485) 2013-9-22 21:28 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
firstblood
1楼-- · 2019-07-23 10:47
温湿度的采集的方案,我这正好用的上的,谢谢啦
丁永亮
2楼-- · 2019-07-23 14:12
不负责任,,这种也上传  。。。错的程序
gaoyang9992006
3楼-- · 2019-07-23 14:28
丁永亮 发表于 2014-1-2 11:10
不负责任,,这种也上传  。。。错的程序

#include <ioCC2530.h>
#include "OnBoard.h"
#define uint unsigned int
#define U8 unsigned char


#define DATA_PIN P0_6

/*******函数声明*********/
void Delay_us(void); //1 us延时
void Delay_10us(void); //10 us延时
void Delay_ms(uint Time);//n ms延时
void COM(void);        // 温湿写入
void DHT11(void) ;  //温湿传感启动


//温湿度定义
U8 U8FLAG,U8temp;
U8 ShiDu_H,ShiDu_L;//定义湿度存放变量
U8 WenDu,ShiDu;//定义温度存放变量
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;


/****************************
//延时函数
*****************************/
void Delay_us(void) //1 us延时

{
    MicroWait(1);   
}

void Delay_10us(void) //10 us延时
{
   MicroWait(10);
}

void Delay_ms(uint Time)//n ms延时
{
  unsigned char i;
  while(Time--)
  {
    for(i=0;i<100;i++)
     Delay_10us();
  }
}


/***********************
   温湿度传感
***********************/
void COM(void)        // 温湿写入
{     
    U8 i;         
    for(i=0;i<8;i++)   
    {
     U8FLAG=2;
     DATA_PIN=0;
     DATA_PIN=1;
     while((!DATA_PIN)&&U8FLAG++);
     Delay_10us();
     Delay_10us();
     Delay_10us();
     U8temp=0;
     if(DATA_PIN)U8temp=1;
     U8FLAG=2;
     while((DATA_PIN)&&U8FLAG++);   
     if(U8FLAG==1)break;   
     U8comdata<<=1;
     U8comdata|=U8temp;
     }   
}

//--------------------------------   
//-----湿度读取子程序 ------------   
//--------------------------------   
//----以下变量均为全局变量--------   
//----温度高8位== U8T_data_H------   
//----温度低8位== U8T_data_L------   
//----湿度高8位== U8RH_data_H-----   
//----湿度低8位== U8RH_data_L-----   
//----校验 8位 == U8checkdata-----   
//----调用相关子程序如下----------   
//---- Delay();, Delay_10us();COM();   
//--------------------------------

void DHT11(void)   //温湿传感启动
{
    DATA_PIN=0;
    Delay_ms(19);  //主机拉低18ms
    DATA_PIN=1;     //总线由上拉电阻拉高 主机延时40us
    P0DIR &= ~0x40; //重新配置IO口方向
    Delay_10us();
    Delay_10us();                                               
    Delay_10us();
    Delay_10us();  
    //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
     if(!DATA_PIN)
     {
      U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否结束
      while((!DATA_PIN)&&U8FLAG++);
      U8FLAG=2;//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
      while((DATA_PIN)&&U8FLAG++);
      COM();//数据接收状态
      U8RH_data_H_temp=U8comdata;
      COM();
      U8RH_data_L_temp=U8comdata;
      COM();
      U8T_data_H_temp=U8comdata;
      COM();
      U8T_data_L_temp=U8comdata;
      COM();
      U8checkdata_temp=U8comdata;
      DATA_PIN=1;
      //数据校验
      U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
       if(U8temp==U8checkdata_temp)
      {
          U8RH_data_H=U8RH_data_H_temp;
          U8RH_data_L=U8RH_data_L_temp;
          U8T_data_H=U8T_data_H_temp;
          U8T_data_L=U8T_data_L_temp;
          U8checkdata=U8checkdata_temp;
       }
       WenDu=U8T_data_H;
       ShiDu=U8RH_data_H;
    }
    else
    {  
      WenDu=0;
      ShiDu=0;
    }
    P0DIR |= 0x40;
}

/***********************这个也是TI的MCU,肯定能用,我都在项目中使用两年了*****用到430上修改一下#内容/
公子小白兔
4楼-- · 2019-07-23 17:43
 精彩回答 2  元偷偷看……

一周热门 更多>