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
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
-
bởi Hatruong1309Cho e hỏi là phần chân X thì nối cái j thì mạch mới chạy được ạ và kiểm tra đúng sai kiểu j ạ
Đề bài thiết kế mạch dãy đồng bộ nhận biết dãy tín hiệu vào ở dạng nhị phân được đưa liên tiếp ở đầu vào X và được đồng...-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment