DHT11_mega8程序详解.docVIP

  • 7
  • 0
  • 约3.71千字
  • 约 4页
  • 2018-05-05 发布于河南
  • 举报
DHT11_mega8程序详解

/****************************DHT11.h文件*********************************/ #ifndef _DHT11_H_ #define _DHT11_H_ void Delay_10us_DHT(); void DelaymS(unsigned int ); unsigned char COM(); extern unsigned int DHT11_Read();//读取温湿度函数,直接调用即可,高8位湿度,低8位温度 #endif /*************************DHT11.c文件*****************************/ /***************8M晶振 mega8 基于AVRstudio 6.0*****************/ #include avr/io.h #includeDHT11.h #includeavr/signal.h //中断服务头文件 /************DHT IO***********/ #define DHTin DDRC=0xEF #define DHTout DDRC|=0x10 #define DHT (PINC0x10) #define DHTH PORTC|=0x10 #define DHTL PORTC=0xEF /**************************************** 作用:延时10us 注意:仅在8Mhz AVR studio环境下时的延时 ****************************************/ void Delay_10us_DHT() { unsigned int i=19; asm(nop); while(i0){i--;} /* unsigned int i; for ( ; i10; i1--) { asm(nop); //for (i=0; i2100; i++); }*/ } /************************************** 函数作用:精确延时nms 注意:仅在8M下,AVR studio环境下 **************************************/ void DelaymS (unsigned int dly) { unsigned int i; for ( ; dly0; dly--) { asm(nop); for (i=0; i2100; i++); } } /*************************************** 作用:读取8位数据 说明:有两种方法实现 ****************************************/ unsigned char COM() { unsigned char i,U8comdata,U8temp; unsigned char U8FLAG; unsigned int i1=0; for(i=0;i8;i++) { U8FLAG=2; while((!DHT)U8FLAG++); if(U8FLAG==1){break;} /**************方法一**************/ i1=1; while(i1) { i1++; if(!DHT)break; } U8temp=0; //26-28us高电平为0 70us高电平为1 if(i150)U8temp=1; /****************方法二****************/ /* Delay_10us_DHT(); Delay_10us_DHT(); Delay_10us_DHT(); U8temp=0; if(DHT)U8temp=1; U8FLAG=2; while((DHT)U8FLAG++); if(U8FLAG==1){break;}//超时则跳出循环 */ U8comdata=1; U8comdata|=U8temp; }//rof return U8com

文档评论(0)

1亿VIP精品文档

相关文档