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.
PHP 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
-
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 appongthoMã lỗi H-27 và lỗi H-43 tủ lạnh Panasonic là gì?
https://appongtho.com/khac-phuc-loi-...anh-panasonic/
Mã lỗi H-27 và H-43 trên tủ lạnh Panasonic thường xuất hiện khi hệ thống điều khiển phát hiện sự cố nghiêm trọng liên quan đến cảm biến...-
Channel: Điện tử gia dụng
hôm nay, 10:35 -
-
Trả lời cho Công thức tính công suất biến áp xung ?bởi NGULAUở tần số 50 Hz diện tich lõi sắt S (cm2) có B = 12.000 Gauss được tính bằng công thức S=1,2x căn bậc 2 của P (W)
Nếu có lõi sắt tốt có thể bỏ 1,2 đi
còn ở tần số cao hơn tôi không biết và xin anh em cho biết, đang rất cần-
Channel: Điện tử công suất
Hôm qua, 23:00 -
-
bởi dinhthuong80Một số kết quả test với mô-tơ quạt khác.
Kết luận cá nhân người mở chủ đề: Quạt dân dụng 47-65W không nên dùng cánh 7 lá lớn vì hiệu suất thấp, lưu lượng gió không cao như NSX công bố!
[Video test các loại cánh quạt chứng tỏ loại 7 cánh hiệu...-
Channel: Điện tử gia dụng
11-04-2025, 15:07 -
-
Trả lời cho Load buffer là gì?bởi pia2k1Thêm kiến thức mới cho thuật ngữ mới nè
-
Channel: Thuật ngữ chuyên ngành
10-04-2025, 17:07 -
-
bởi dinhthuong80Xin upload kết quả thí nghiệm, mọi người sẽ tự hiểu và biết phân tích đúng sai hợp lí hay không. Ai không biết kĩ thuật thì chẳng dám tin vào cảm giác của bản thân, chỉ tin những gì nsx nói, dù họ có nói phét thế nào!!!
Còn...-
Channel: Điện tử gia dụng
09-04-2025, 22:10 -
-
bởi nguyendinhvanEm rất là quý bac, nhưng hôm nay em thấy bác sai đấy.
Cái sai của bác là đem cái cơ sở lý luận kỹ thuật công nghệ của Tư bản Chủ nghĩa để trao đổi với người theo Chủ Nghĩa Kinh Nghiệm.
...
-
Channel: Điện tử gia dụng
08-04-2025, 20:54 -
-
bởi nguyendinhvanTốn wifi 4G quá !
Nào là lưu lượng , nào là tốc độ, nào là đường kính, nào là diện tích, nào là vòng quay, nào là hiệu suất, nào là dụng cụ, nào là thiết bị nào là máy đo, nào là phương pháp....
Cộng với một bản số liệu...-
Channel: Điện tử gia dụng
08-04-2025, 20:45 -
-
bởi tuyennhanCánh nhỏ là của tàu đem qua giờ mình copy theo mà tàu thì chuyên ăn bớt vật liệu để giảm giá thành từ cánh cho đến mô tơ mới thành ra vậy .
Cách thử của dinhthuong có đúng thì chỉ đúng với cái quạt Senko còn với quạt khác mô tơ...-
Channel: Điện tử gia dụng
08-04-2025, 20:28 -
-
bởi nhathung1101Lão Phàm có biết lịch sử cái quạt không?
Ngày xưa chỉ có 1 cánh vẫn chạy tốt.
Sau này thêm 2 thành 3 cánh, chạy tốt.
Đến khi ông Cờ Rít Tóp Mỡ muốn buôn quạt sang châu Phi, để được tai tiếng ngang với...-
Channel: Điện tử gia dụng
08-04-2025, 18:42 -
-
bởi nhathung1101Bình tĩnh bình tĩnh bình tĩnh
Hít thở hít thở hít thở....
Mai họ còn sản xuất loại siêu mỏng cánh, chỉ dán vào là xong.
Họ còn đảm bảo dùng 1 cánh tự tin cả ngày, dùng 10 cánh tự tin cả đời...
Lão cứ mất...-
Channel: Điện tử gia dụng
08-04-2025, 18:17 -
Comment