雨滴传感器模块有了,单片机stc,希望代码能够实现,

马上答辩了,很急,

我之前做毕业设计的时候做过,使用ATmega48做的,给你参考下

//H头文件如下:
#ifndef __DHT11_H
#define __DHT11_H

#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

extern uchar HH_tem,HL_tem,TH_tem,TL_tem,check;
extern uchar jump;

//***********************************************************************
// 定义变量区
//***********************************************************************
#define CLR_BUS (PORTD&=~(1<<PD2))        //总线置低
#define SET_BUS (PORTD|=(1<<PD2))         //总线置高

#define PD2_IN   (DDRD&=~(1<<PD2))        //定义PB0为输入
#define PD2_OUT  (DDRD|=(1<<PD2))         //定义PB0为输出

#define BUS_READ (PIND&0x04)

uchar Read_Byte(void);
void DHT11_Read(void);
void DHT11_init(void);

#endif


//C文件如下:
#include "iom48v.h"
#include "DHT11.h"

void delay_18ms(void)
{
unsigned char a,b,c;
    for(c=21;c>0;c--)
        for(b=50;b>0;b--)
            for(a=2;a>0;a--);
}

void delay_30us(void)
{
unsigned char a;
    for(a=0;a<5;a++);
}

void delay_40us(void)
{
  unsigned char a;
        for(a=10;a>0;a--);
}

void DHT11_init(void)
{
 PD2_OUT;
 SET_BUS;
}

uchar Read_Byte(void)
{
 uchar i,Rbit,Rdata;
 PD2_IN;
 SET_BUS;//上拉输入
 for(i=0;i<8;i++)
 {
  jump=2;
  while((BUS_READ==0)&&(jump!=0));
  delay_30us();
  Rbit=0;
  if(BUS_READ!=0)
  {
   Rbit=1;
  }
  jump=2;
  while((BUS_READ!=0)&&(jump!=0));
  Rdata=Rdata<<1;
  Rdata=Rdata|Rbit;
 }
 return Rdata;
}

void DHT11_Read(void)
{
 
 PD2_OUT;
 CLR_BUS;
 
 delay_18ms();
 SET_BUS;
 delay_40us();
 
 PD2_IN;
 SET_BUS;
 
 jump=2;
 while((BUS_READ==0)&&(jump!=0));
 jump=2;
  while((BUS_READ!=0)&&(jump!=0));
 
 HH_tem=Read_Byte();
 HL_tem=Read_Byte();
 TH_tem=Read_Byte();
 TL_tem=Read_Byte();
 check=Read_Byte();
 
 PD2_OUT;
 SET_BUS;
}


最后调用
DHT11_Read();
这个函数就可以读数了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-09
留下你的,企,鹅,号追问

813169878

来自:求助得到的回答
第1个回答  2015-12-09
貌似应该在51吧发。。。
第2个回答  2015-12-09