ÄúµÄλÖãºÍøÕ¾Ê×Ò³ > µçÆ÷άÐÞ×ÊÁÏÍø > ÕýÎÄ >
DHT11ÎÂʪ¶È´«¸ÐÆ÷µÄʹÓÃ
À´Ô´£º ÈÕÆÚ£º2013-12-11 14:26:16 ÈËÆø£º±êÇ©£º
Ïл°²»ËµÁË£¬ÏÂÃæ°ïÖú´ó¼Ò·ÖÎöÒ»ÏÂDHT11µÄʱÐòͼ(Êý¾ÝÊÖ²áÉÏÓÐ)£¬ÒòΪDHT11¶ÔʱÐòµÄÒªÇóºÜ¸ß£¬ËùÒԺܿÉÄÜдÍê³ÌÐò²»ºÃʹ¡£±¾È˽¨Ò飺ÑÓʱ×Óº¯Êý ºÃ×Ô¼ºÓÃʾ²¨Æ÷¼ì²âһϣ¬×Ô¼ºËã³öÀ´µÄÔÚ10usÏÂÎó²î»áºÜ´óµÄ¡£
½øÈëÕýÌ⣺ÏÂÃæÎÒ˵µÄ»°¿ÉÒÔ²ÎÕÕÏÂÃæµÄ³ÌÐò¿´¡£
Êý¾ÝÊÖ²áÇ°ÃæµÄһЩÄÚÈÝ×Ô¼ºÁ˽â¾Í¿ÉÒÔÁË£¬ÏÈ¿´Êý¾ÝÊÖ²áÉÏÖ÷»ú¸´Î»ÐźźÍDHT11ÏàÓ¦ÐźÅÄDz¿·Ö¡£
Ö÷»úÏÈ¿ØÖÆ×ÜÏߣ¬ÀµÍÖÁÉÙ18ms£¬È»ºóÔÙÀ¸ß20~40us£¬(ÕâʱÈç¹ûÓ²¼þûÓÐÎÊÌâµÄ»°DHT11»áÓÐÏìÓ¦µÄ)ËùÒÔÏÖÔÚÖ÷»úÊÍ·Å×ÜÏß(°ÑDDRXN ¼Ä´æÆ÷ÇåÁã)£¬µÈ´ýDHT11µÄÏìÓ¦£¬Èç¹û³É¹¦DHT11»á²úÉú40~50usµÄµÍµçƽ£¬ºÍ40~50usµÄ¸ßµçƽ¡£ÕâÀï¿ÉÒÔÓɳÌÐòÍê³É¼ì²â¡£
½ÓÏÂÀ´ÔÚÒ»´Î²É¼¯ÖУ¬°Ñ×ÜÏßÒ»Ö±½»¸øDHT11£¬Ëü»á¸øÖ÷»ú´«ËÍÒ»¸ö40λµÄ¶þ½øÖÆÊý£¬Ç°0~7λÊÇʪ¶ÈµÄÕûÊý²¿·Ö£¬8~15λÊÇʪ¶ÈµÄСÊý²¿·Ö;16~23λÊÇζȵÄÕûÊý²¿·Ö£¬24~31λÊÇζȵÄСÊý²¿·Ö; ºó°ËλÊÇУÑéλ¡£ÕâЩÊý¾ÝҪͨ¹ý³ÌÐò½øÐд¦Àí£¬×ª»»³ÉÎÂʪ¶ÈµÄʵ¼ÊÖµ£¬²¢ÓÉÏÔʾ²¿·ÖÏÔʾ³öÀ´¡£(±¾ÈËÓõÄÊÇÊýÂë¹Ü£¬½¨ÒéÓÃ1602ÏÔʾ»á¸ü·½±ãһЩ)¡£
ºóÃæµÄ´¦Àí²¿·ÖÎҾͲ»Ò»Ò»½²½âÁË£¬ÎÒÔÚ³ÌÐòÖÐÊÇÓÐ×¢Ê͵ģ¬×Ô¼º°Ñ³ÌÐò¼ÓÈëµ½¹¤³ÌÖп´Ð§¹û»áºÃºÜ¶àµÄ£¬Ò²¿ÉÒÔÓÃרÃŵÄÔĶÁÈí¼þÀ´¿´(source insignte)£¬²»È»×ÖÌå¶¼Ò»¸öÑÕÉ«·Ç³£ÂÒ¡£
================================================
//ÕâÀïÊÇdelay.h /*************ÎÒ¿ª·¢°åµÄ¾§ÕñÊÇ16MµÄ£¬¾ßÌåµÄÑÓʱ×Óº¯ÊýÒª×Ô¼º×Ðϸд*************/
#ifndef __DELAY_H
#define __DELAY_H
void delay_us(unsigned int xus);
void delay_ms(unsigned int xms);
#endif
================================================
//ÕâÀïÊÇdelay.c
#include"delay.h"
#include
//ÑÓʱ΢Ãî×Óº¯Êý
void delay_us(unsigned int xus)
{
unsigned int i,j;
for(i=0;i
{
NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
}
}
//ÑÓʱºÁÃë×Óº¯Êý
void delay_ms(unsigned int xms)
{
unsigned int i,j;
for(i=0;i
{
for(j=0;j<2288;j++);
}
}
================================================
//ÕâÀïÊÇdht11.h
#ifndef __DHT11_H
#define __DHT11_H
#ifndef __IOM128V_H
#include
#endif
#ifndef __MACROS_H
#include
#endif
#define DDR_1 DDRC|=BIT(PC0)
#define DDR_0 DDRC&=~BIT(PC0)
#define PORTC_1 PORTC|=BIT(PC0)
#define PORTC_0 PORTC&=~BIT(PC0)
#define DQ (PINC&0x01)
void caiji(void);
long int dht(void);
void init_dht11(void);
//void ceshi(void);
#endif
================================================
//ÕâÀïÊÇdht11.c
#include"dht11.h"
unsigned char dht_data[5],a,b;
unsigned int s1,s0,t1,t0,sd,wd,wsd;
void caiji(void)
{
unsigned char i,j;
//delay_ms(900);
for(i=0;i<5;i++)
{
dht_data[i]=0x00; //Êý×éÇåÁã
for(j=0;j<8;j++)
{
while(!DQ); //ÅжÏÊÇ·ñΪ¸ßµçƽ
//ÑÓʱ50usÈôΪ¸ßµçƽÔòΪһ£¬·ñÔòΪÁã
delay_us(50);
if(DQ)
{
dht_data[i]|=BIT(7-j); //±£´æÊý¾Ý
while(DQ);//µÍµçƽ¼ì²â
}
}
}
}
void init_dht11(void)
{
DDR_1; //ÉèÖÃÖ÷»úÊä³ö
PORTC_0; //×ÜÏßÀµÍÖÁÉÙ18ms
delay_ms(20);
PORTC_1; //×ÜÏßÓÉÖ÷»úÀ¸ß´óÔ¼30us
delay_us(30);
DDR_0; //Ö÷»úÉèÖÃΪÊäÈ룬¼ì²â´Ó»úÐźÅ
while(DQ);
}
long int dht(void)
{
init_dht11();
if(!DQ)
{
while(!DQ);
while(DQ); //¾ÒÔÉÏÁ½¾äºó¿ªÊ¼½ÓÊÕÐźÅ
caiji();
DDR_1;
PORTC_1;
//УÑé
a=
(
dht_data[0]+dht_data[1]+dht_data[2]+dht_data[3]
);
if(a==dht_data[4])
{
s1=dht_data[0];
s0=dht_data[1];
t1=dht_data[2];
t0=dht_data[3];
}
//sΪʪ¶È£¬tΪζÈ
sd=s1;
sd<<=8;
sd|=s0;
wd=t1;
wd<<=8;
wd|=t0;
wsd=sd<<16;
wsd|=wd;
}
return wsd;
}
================================================
//ÕâÀïÊÇxianshi.h
#ifndef __XIANSHI_H
#define __XIANSHI_H
#ifndef __IOM128V_H
#include
#endif
#define SCK_0 PORTB&=~(1<
#define SCK_1 PORTB|=(1<
#define LCK_0 PORTB&=~(1<
- 1
- 2
- ÏÂÒ»Ò³
¡¾¿´¿´ÕâÆªÎÄÕÂÔڰٶȵÄÊÕ¼Çé¿ö¡¿
Ïà¹ØÎÄÕÂ
- ÉÏһƪ£º LED²úÆ·Ó¦Óó£Ê¶ºÍÐÔÄܼì²â
- ÏÂһƪ£º ̽ÌÖ±äѹÆ÷µç´ÅÁ¦