悼念舟曲 写的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) #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);
}
} 不错,温湿度检测。 CVAVR的确很好用。 mark mark 本人需要认真学习研究,手头已有两只DHT11了 谢了 这能用吗,MARK的人细心的看了程序没有啊。{:funk:}
前面的tem,后面用tem=0;这妮玛什么情况 我看过了。应该是数组元素tem[i
] 不错,支持 谢谢楼主...... 不错学习了 谢谢,参考学习
页:
[1]