Mình đang muốn sử dụng con DHT11 nhưng code bên box Cảm biến không dùng được. Ai đã dùng con này thì cho mình xin cái code or chỉ mình cách lập trình với.
Thông báo
Collapse
No announcement yet.
Hỏi xin Code DHT11 hien thi LCD
Collapse
X
-
Vấn đề này mình đã giải quyết được rồi + chủ đề post rồi không xoá được với cả chẳng biết sao lại không sửa được nữa nên mình sửa lại để giúp bạn nào cần thì dùng. Sau đay là code và file hex.
DHT11.zipPHP Code:Project : Do nhiet do va do am bang DHT11
Version : 1
Date : 11/07/2013
Author : Bui Trong Thien
Company : ThienTrang-TEC
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#include <alcd.h>
#define DHT_DATA_IN PINC.2
#define DHT_DATA_OUT PORTC.2
#define DHT_DDR_DATA DDRC.2
#define DDROUT 1
#define DDRIN 0
#define DHT_ER 0
#define DHT_OK 1
#define DHT_Temp 0
#define DHT_RH 1
#define ADC_VREF_TYPE 0xE0
//----------------------------------------------------------//
typedef signed char int8_t;
typedef signed int int16_t;
typedef signed long int int32_t;
/* Kieu So Nguyen Khong Dau */
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long int uint32_t;
/* Kieu So Thuc */
typedef float float32_t;
//------------------------------------------------------//
uint8_t DHT_GetTemHumi (uint8_t select);
uint8_t nhiet=0, am=0;
unsigned char vin;
//--------------------------------------------------------//
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
//_-----------------------------------------------------// Lay du lieu tu DHT11
uint8_t DHT_GetTemHumi (uint8_t select)
{
uint8_t buffer[5]={0,0,0,0,0};
uint8_t ii,i,checksum;
DHT_DDR_DATA=DDROUT; // set la cong ra
DHT_DATA_OUT=1;
delay_us(60);
DHT_DATA_OUT=0;
delay_ms(25); // it nhat 18ms
DHT_DATA_OUT=1;
DHT_DDR_DATA=DDRIN;
delay_us(60);
if(DHT_DATA_IN)return DHT_ER ;
else while(!(DHT_DATA_IN)); //Doi DaTa len 1
delay_us(60);
if(!DHT_DATA_IN)return DHT_ER;
else while((DHT_DATA_IN)); //Doi Data ve 0
//Bat dau doc du lieu
for(i=0;i<5;i++)
{
for(ii=0;ii<8;ii++)
{
while((!DHT_DATA_IN));//Doi Data len 1
delay_us(50);
if(DHT_DATA_IN)
{
buffer[i]|=(1<<(7-ii));
while((DHT_DATA_IN));//Doi Data xuong 0
}
}
}
//Tinh toan check sum
checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
//Kiem tra check sum
if((checksum)!=buffer[4])return DHT_ER;
//Lay du lieu
if (select==DHT_Temp)
{ //Return the value has been choosen
return(buffer[2]);
}
else if(select==DHT_RH)
{
return(buffer[0]);
}
return DHT_OK;
}
//--------------------------------------------------------------//
static void nhietdovadoam()
{
vin=(read_adc(0)*256)/255; // Nhiet do do bang LM35
nhiet= DHT_GetTemHumi (DHT_Temp); // Nhiet do do bang DHT11
am= DHT_GetTemHumi (DHT_RH); // Do am do bang DHT11
//Nhiet do do bang DHT11
lcd_gotoxy(0,1);
lcd_putsf("T =");
lcd_putchar(48+nhiet/10);
lcd_putchar(48+nhiet%10);
lcd_putchar(0b11011111); // ki tu do
lcd_putsf("C");
// Do am do bang DHT11
//Do am do bang DHT11
lcd_gotoxy(9,1);
lcd_putsf("H =");
lcd_putchar(48+am/10);
lcd_putchar(48+am%10);
lcd_putsf("%");
// Nhiet do do bang LM35
lcd_gotoxy(0,0);
lcd_putsf("Nhiet do: ");
lcd_putchar(48+vin/10);
lcd_putchar(48+vin%10);
lcd_putchar(0b11011111); // ki tu do
lcd_putsf("C");
}
// Read the 8 most significant bits
// of the AD conversion result
// Declare your global variables here
void main(void)
{
// Declare your local variables here
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=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;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 3
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
nhietdovadoam();
}
}
CUNG CẤP LINH KIỆN ĐIỆN TỬ. DỤNG CỤ LÀM MẠCH.
CUNG CẤP LED, MẠCH CÔNG SUẤT.
CUNG CẤP MODULE LED (TRÁI TIM, CUBE)
------------TẠI HẠ LONG------------------
LIÊN HỆ: 0936524718
Comment
-
Mình đa hoàn thành 2 dự án DHT11 giao tiếp với 89s52 và DHT11 với atmega8, mình ko biết upfile lên ntn cả nên mn ai cần gửi mail cho mình::
vankienemk@yahoo.com
đây là atmega8 với dht11 code https://drive.google.com/file/d/0B2u...ew?usp=sharing
Comment
-
Thanks bài viết của bạn Bùi Trọng Thiên, tuy nhiên, nếu trước phân checksum(kiểm tra lôi) nếu không có lệnh reset cho DHT11 thi các bạn chỉ có thể đọc được dữ liêu của duy nhất hoặc độ ẩm hoặc nhiệt độ. Cụ thể cần thêm vào:Nguyên văn bởi buitrongthie Xem bài viết.................................................. ...............
//_-----------------------------------------------------// Lay du lieu tu DHT11
uint8_t DHT_GetTemHumi (uint8_t select)
{
uint8_t buffer[5]={0,0,0,0,0};
uint8_t ii,i,checksum;
DHT_DDR_DATA=DDROUT; // set la cong ra
DHT_DATA_OUT=1;
delay_us(60);
DHT_DATA_OUT=0;
delay_ms(25); // it nhat 18ms
DHT_DATA_OUT=1;
DHT_DDR_DATA=DDRIN;
delay_us(60);
if(DHT_DATA_IN)return DHT_ER ;
else while(!(DHT_DATA_IN)); //Doi DaTa len 1
delay_us(60);
if(!DHT_DATA_IN)return DHT_ER;
else while((DHT_DATA_IN)); //Doi Data ve 0
//Bat dau doc du lieu
for(i=0;i<5;i++)
{
for(ii=0;ii<8;ii++)
{
while((!DHT_DATA_IN));//Doi Data len 1
delay_us(50);
if(DHT_DATA_IN)
{
buffer[i]|=(1<<(7-ii));
while((DHT_DATA_IN));//Doi Data xuong 0
}
}
}
//Tinh toan check sum
checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
//Kiem tra check sum
if((checksum)!=buffer[4])return DHT_ER;
//Lay du lieu
if (select==DHT_Temp)
{ //Return the value has been choosen
return(buffer[2]);
}
else if(select==DHT_RH)
{
return(buffer[0]);
}
return DHT_OK;
}
//--------------------------------------------------------------//
static void nhietdovadoam()
{
vin=(read_adc(0)*256)/255; // Nhiet do do bang LM35
nhiet= DHT_GetTemHumi (DHT_Temp); // Nhiet do do bang DHT11
am= DHT_GetTemHumi (DHT_RH); // Do am do bang DHT11
//Nhiet do do bang DHT11
lcd_gotoxy(0,1);
lcd_putsf("T =");
lcd_putchar(48+nhiet/10);
lcd_putchar(48+nhiet%10);
lcd_putchar(0b11011111); // ki tu do
lcd_putsf("C");
// Do am do bang DHT11
//Do am do bang DHT11
lcd_gotoxy(9,1);
lcd_putsf("H =");
lcd_putchar(48+am/10);
lcd_putchar(48+am%10);
lcd_putsf("%");
// Nhiet do do bang LM35
lcd_gotoxy(0,0);
lcd_putsf("Nhiet do: ");
lcd_putchar(48+vin/10);
lcd_putchar(48+vin%10);
lcd_putchar(0b11011111); // ki tu do
lcd_putsf("C");
}
}[/PHP]
[ATTACH]70004[/ATTACH]
Code:
DHT_DDR_DATA=DDROUT; // set la cong ra
DHT_DATA_OUT=1;
delay_ms(100);
Comment
Bài viết mới nhất
Collapse
-
bởi theidiotcatBộ máy đa năng toàn diện cho học tập và làm việc hàng ngày
Đối với học sinh, sinh viên và người làm việc văn phòng, việc sở hữu một bộ PC cân bằng giữa học tập, công việc và giải trí là nhu cầu vô cùng thực tế. Combo Ryzen...-
Channel: Đánh giá sản phẩm DTVN
hôm nay, 10:28 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
31-07-2026, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:49 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnNhớ không nhầm thì lúc còn đi học có gặp chú 1 lần cf bãi xe Nguyễn Kim, giờ quán cf đó nghỉ bán rồi
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:44 -
-
Trả lời cho Thắc mắc pin 21v ?bởi lvhnCon số đấy biểu thị gần đúng thôi, cái đồng hồ đó có đảm bảo chính xác hay không? pin có cục lên 4v4 vẫn bình thường. Cái gì cũng có sai số trong phạm vi không quá lớn thì không ảnh hưởng gì đâu, bàn ngay ngón ngắn ngón dài mà
-
Channel: Điện tử dành cho người mới bắt đầu
30-07-2026, 15:32 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnThay mấy con transisto nhỏ đầu vào, thường vi sai lỗi hay bị. Khám tổng quát chân các linh kiện xem có bị rỉ sét nhiều không?
-
Channel: Điện thanh
30-07-2026, 15:24 -
-
bởi dinhthuong92Mạch này hiệu suất ra led đạt khoảng 90.7% tại 12V in, 40W out.
-
Channel: Nguồn!
27-07-2026, 10:15 -
-
bởi dinhthuong92Có lẽ nguồn viết bài này chỉ mang tính định tính để nói rằng cần thay đổi tổng trở tải để có Pmax chứ trình bày chưa chi tiết và thấu đáo một cách định lượng. Công thức tổng quát phải có mặt L mới được, và nói là "tổng...
-
Channel: Nguồn!
27-07-2026, 10:09 -

Comment