fwluck 发表于 2010-8-18 17:42:37

悼念舟曲 写的DHT11驱动 程序有详细注释CVAVR

当调出正常功能后,想听收音机所有的台内容都一样。
也取消听音乐的念头。
不能为他们做些什么。
送给有需要的人。
不知别人发过没有。
顺便说一下,CVAVR的定时非常好用,很准。
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_575899.JPG
(原文件名:dhtsch.JPG)

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_575900.jpg
(原文件名:IMG0375A.jpg)

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_575901.jpg
(原文件名:IMG0378A.jpg)

点击此处下载 ourdev_575902.rar(文件大小:36K) (原文件名:dht11lcdtest0813.rar)

fwluck 发表于 2010-8-18 17:44:13

#include <delay.h>

void readh(void);
unsigned char stardht11(void);

unsigned char humidity, temperature, check_sum ;   

#define dhtport PORTC.3
#define dhtddr DDRC.3               

unsigned char stardht11(void)
{
   unsigned char flag;
   dhtddr = 1;
   dhtport = 0;
   delay_ms(18);//触发开始
   dhtport = 1;   //释放总线
   delay_us(10);//wait 20-40uS 此时不宜长,也可以上拉电阻上拉。
   dhtport = 1;   
   dhtddr = 0;    //改为输入
   delay_us(5);   //这个延时手册没有,但要加,否则检低电平有时检不到
   if(!PINC.3)
   {
      while((!PINC.3) && flag ++) //等待低电平80uS
         ;
      
      while((PINC.3) && flag ++)//等待高电平80uS
         ;

      return(1);
   }
   else
   {
      return(0);
   }
}

void readh(void)
{
   unsigned char tem;   //读到的五个数
   unsigned char i, j, temp;
   if(stardht11())
   {
      for(i = 0; i < 5; i ++)
      {
         tem = 0;
         for(j = 0; j < 8; j ++)            
         {
            tem *= 2;    //不可用tem << 1 否则不移位
            temp = 2;       //
            delay_us(20);   //先延20uS 再检查30uS      
            while((!PINC.3) && temp ++)//避免死等
               if(temp == 2)
                  break;
            delay_us(32);   //高电平长于26-28uS为1否为0
            temp = 2;   
            if(PINC.3)
            {
               while(PINC.3 && temp ++) //当为1时等到低电平再进入下次循环。
                  if(temp == 2)
                     break;
               tem |= 0x01;
            }
            delay_us(5);
         }
      }
   }
   humidity = tem;
   temperature = tem;
   check_sum = tem;
}

/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
?Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 2010-8-13
Author: fwluck                           
Company : guochao                           
Comments:


Chip type         : ATmega16L
Program type      : Application
Clock frequency   : 7.372800 MHz
Memory model      : Small
External SRAM size: 0
Data Stack size   : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
#include <dht11.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>


flash char *chartabe = "0123456789ABCDEF";

#define coder PIND.7
#define codel PIND.6
#define codek PIND.5
            


void main(void)
{

   PORTA=0xff;
   DDRA=0xff;
   
   PORTB=0x00;
   DDRB=0x00;
   
   PORTC=0x00;
   DDRC=0x00;
   
   PORTD=0xe0;
   DDRD=0x00;
   
   TCCR0=0x00;
   TCNT0=0x00;
   OCR0=0x00;
   
   TCCR1A=0x00;
   TCCR1B=0x00;
   TCNT1H=0x00;
   TCNT1L=0x00;
   ICR1H=0x00;
   ICR1L=0x00;
   OCR1AH=0x00;
   OCR1AL=0x00;
   OCR1BH=0x00;
   OCR1BL=0x00;
   
   ASSR=0x00;
   TCCR2=0x00;
   TCNT2=0x00;
   OCR2=0x00;
   
   MCUCR=0x00;
   MCUCSR=0x00;
   
   TIMSK=0x00;
   
   ACSR=0x80;
   SFIOR=0x00;
   
   lcd_init(16);
   lcd_gotoxy(0,1);
   while (1)
   {
      readh();
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("HUM:");
      lcd_putchar(chartabe);
      lcd_putchar(chartabe);
      
      lcd_putsf("    ");
      lcd_putsf("TEM:");
      
      lcd_putchar(chartabe);
      lcd_putchar(chartabe);
      
      lcd_putsf("SUM:");
      
      lcd_putchar(chartabe);
      lcd_putchar(chartabe);
      delay_ms(1000);
   }
}

taishan 发表于 2010-8-18 17:50:24

不错,温湿度检测。 CVAVR的确很好用。

QiYuan 发表于 2010-9-12 19:39:34

mark

wwwdege 发表于 2010-11-18 15:22:05

mark

lin638 发表于 2010-11-21 11:46:27

本人需要认真学习研究,手头已有两只DHT11了

ZOIDS 发表于 2011-4-21 17:47:00

谢了

chao8828276 发表于 2012-4-28 17:35:28

这能用吗,MARK的人细心的看了程序没有啊。{:funk:}
前面的tem,后面用tem=0;这妮玛什么情况

ls199007 发表于 2012-6-3 16:14:03

我看过了。应该是数组元素tem[i
]

ddcchh 发表于 2012-11-21 12:21:23

不错,支持

jz701209李 发表于 2013-4-8 17:24:29

谢谢楼主......

chuanping87 发表于 2013-7-22 11:42:18

不错学习了

jun427 发表于 2018-6-23 00:54:49

谢谢,参考学习
页: [1]
查看完整版本: 悼念舟曲 写的DHT11驱动 程序有详细注释CVAVR