6757|6

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

跪求大神给个G2553连接DHT11的完整程序 [复制链接]

我想用串口调试助手检测DHT11测到的数据,无奈水平太菜,所以跪求大神们帮助。

最新回复

请问这个程序dht是插在哪个引脚上的?我用的是energia开发环境。本人菜鸟,大神求指教,谢谢  详情 回复 发表于 2017-1-9 19:57
 
点赞 关注(1)

回复
举报

17

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
#include "msp430G2553.h"
#include"stdio.h"
#define DHT11_OUTPUT   P2DIR|=BIT0
#define DHT11_INPUT   P2DIR&=~BIT0
#define DHT11_H   P2OUT|=BIT0
#define DHT11_L   P2OUT&=~BIT0
#define DHT11_IN   (P2IN&BIT0)
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CPU          (1000000)
#define delay_us(x)   (__delay_cycles((double)x*CPU/1000000.0))
#define delay_ms(x)   (__delay_cycles((double)x*CPU/1000.0))

uchar start_DHT11(void);
uchar DHT11_ReadChar(void);
void dht11(void);
uchar DHT11T_Data_H, DHT11T_Data_L, DHT11RH_Data_H, DHT11RH_Data_L,CheckData_temp;
void put(uchar *x)
{
  while(*x)
  {
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?  
    UCA0TXBUF=*x;
    x++;
  }
}
void putc(char *x)
{
  while(*x)
  {
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?  
    UCA0TXBUF=*x;
    x++;
  }
}
void wellcome()
{
put("*************************************\n");
put("********   hello,eeworld!   ********\n");
put("********   this is mengzhilv!    ********\n");
put("********  Copyright @ 2011   ********\n");
put("*************************************\n\n");
delay_ms(10);
}
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  UCA0CTL1 |= UCSWRST;                           
   BCSCTL1 = CALBC1_1MHZ;                    
   DCOCTL = CALDCO_1MHZ;


   P1SEL = BIT1 + BIT2 ;                     
   P1SEL2 = BIT1 + BIT2 ;                     
   UCA0CTL1 |= UCSSEL_2;                     
   UCA0BR0 = 104;                             
   UCA0BR1 = 0;                              
   UCA0MCTL = UCBRS0;                        
   UCA0CTL1 &= ~UCSWRST;                  // **Initialize USCI state machine**
  delay_us(1000);
  wellcome();
  put("**********DHT11 TEST**********\n");
  delay_ms(1000);

while(1)
  {
  dht11();
  }
}
uchar start_DHT11(void)
{
uchar TData_H_temp,TData_L_temp,RHData_H_temp,RHData_L_temp,checktemp;
uchar  presence,flag;
uint count;
DHT11_OUTPUT;
DHT11_L;    //拉低18ms以上
delay_ms(20);
DHT11_H;
DHT11_INPUT;
delay_us(40);
presence=DHT11_IN;
if(!presence)
{
   count=2;
   while((!DHT11_IN)&&count++);//等待低电平
   count=2;
   while((DHT11_IN)&&count++);//等待高电平
      RHData_H_temp = DHT11_ReadChar();
      RHData_L_temp = DHT11_ReadChar();
      TData_H_temp = DHT11_ReadChar();
      TData_L_temp = DHT11_ReadChar();
      CheckData_temp = DHT11_ReadChar();
      DHT11_OUTPUT;
      DHT11_H;
      checktemp = (RHData_H_temp + RHData_L_temp + TData_H_temp + TData_L_temp);
      if (checktemp == CheckData_temp) {
         DHT11RH_Data_H = RHData_H_temp;
         DHT11RH_Data_L = RHData_L_temp;
         DHT11T_Data_H = TData_H_temp;
         DHT11T_Data_L = TData_L_temp;
         flag=1;
      }
   }
   P1OUT |=BIT0;
   return flag;
}
uchar DHT11_ReadChar(void)
{
  unsigned char dat;
   unsigned int count;     //计数防止死等
   unsigned char i;
   for(i=0;i<8;i++)
   {
      count=2;
      while((!DHT11_IN)&&count++);     //等待50us低电平结束
     delay_us(40); //40us
      dat <<= 1;        //50us低电平+28us高电平表示'0'
      if(DHT11_IN)    //50us低电平+70us高电平表示'1'
         dat |= 1;
      count=2;
      while((DHT11_IN)&&count++);
      if(count==1)      //超时则跳出for循环
         break;
   }
   return dat;   
}
void dht11()
{
char c[40];
uchar o;
o=start_DHT11();
P1OUT |=BIT1;
delay_ms(300);
P1OUT &=~BIT1;
delay_ms(300);
if (o)
      {
        put("DHT11 EXIST AND ACQUIRE SUCCESSFUL!\n");
        delay_ms(10);
  sprintf(c, "%d.%d %d.%d %d\r\n",DHT11RH_Data_H,DHT11RH_Data_L,DHT11T_Data_H,DHT11T_Data_L,CheckData_temp);
  putc(c);  
      }
}

点评

用的是Iar还是ccs  详情 回复 发表于 2014-8-4 22:17
测试了 可以用 谢谢大神了!!  详情 回复 发表于 2014-5-2 21:47
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
destinydd 发表于 2013-5-26 19:28
#include "msp430G2553.h"
#include"stdio.h"
#define DHT11_OUTPUT   P2DIR|=BIT0

测试了 可以用 谢谢大神了!!

点评

lz,我还是调不出来,可不可以留下个联系方式  详情 回复 发表于 2014-8-4 22:15
 
 
 

回复

47

帖子

1

TA的资源

一粒金砂(中级)

4
 
为什么我的不可以呢
 
个人签名自我主导
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

5
 
ljc2010 发表于 2014-5-2 21:47
测试了 可以用 谢谢大神了!!

lz,我还是调不出来,可不可以留下个联系方式
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

6
 
destinydd 发表于 2013-5-26 19:28
#include "msp430G2553.h"
#include"stdio.h"
#define DHT11_OUTPUT   P2DIR|=BIT0

用的是Iar还是ccs
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

7
 
请问这个程序dht是插在哪个引脚上的?我用的是energia开发环境。本人菜鸟,大神求指教,谢谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表