Chia sẻ với các bạn file Đồ án lập trình chip Atmega 8 sử dụng cảm biến nhiệt độ độ ẩm phổ thông DHT11 - Cảnh báo qua Module SIM do bạn CTV Dao Nguyen viết.
File gồm:
- Mô phỏng Protues 8.6
- Code C Codevison AVR
- Nguyên lý layout Orcad/ Altium các bạn cần vẽ nhanh liên hệ thông tin bên dưới nhé.
File Code C:
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
#define LCD_RS PORTC.2
#define LCD_RW PORTC.1
#define LCD_EN PORTC.0
#define LCD_D4 PORTB.4
#define LCD_D5 PORTB.3
#define LCD_D6 PORTB.2
#define LCD_D7 PORTB.1
#define DHT11_in PINB.0
#define DHT11_out PORTB.0
#define DHT11_define DDRB.0
#define up PIND.5
#define down PIND.6
#define mode PIND.7
eeprom unsigned char max_nhietdo;
eeprom unsigned char max_doam;
//---------------------------------Chuong trinh giao tiep LCD--------------------------------//
// Ham cho phep hien thi len LCD
void LCD_Enable(void)
{
LCD_EN = 1;
delay_us(3);
LCD_EN = 0;
delay_us(50);
}
// Ham gui 4 bit
void LCD_Send4Bit(unsigned char Data)
{
LCD_D4 = Data & 0x01;
LCD_D5 = (Data>>1)&1;
LCD_D6 = (Data>>2)&1;
LCD_D7 = (Data>>3)&1;
}
// Ham gui 1 Byte du lieu
void LCD_Send1Byte(unsigned char byte)
{
LCD_Send4Bit(byte >>4);/* Gui 4 bit cao */
LCD_Enable();
LCD_Send4Bit(byte); /* Gui 4 bit thap*/
LCD_Enable();
}
// Ham di chuyen con tro: row=0-1; col=0-15 (2 hang + 16 cot)
void LCD_chonvitri(unsigned char row, unsigned char col)
{
unsigned char address;
if (row == 0) address = (0x80 + col); // row=0 - hang 1
else address = (0xC0 + col); // row=1 - hang 2
delay_us(1000);
LCD_Send1Byte(address);
delay_us(50);
}
// Ham hien thi ra man hinh chuoi ki tu
void LCD_guichuoi(char *s)
{
while (*s)
{
LCD_RS=1;
LCD_Send1Byte(*s);
LCD_RS=0;
s++;
}
}
void LCD_guikitu(int s)
{
LCD_RS=1;
LCD_Send1Byte(s);
LCD_RS=0;
}
// Ham xoa man hinh
void LCD_xoamanhinh()
{
LCD_chonvitri(0,0);
LCD_guichuoi(" ");
LCD_chonvitri(1,0);
LCD_guichuoi(" ");
LCD_chonvitri(0,0);
}
// Ham khoi tao LCD
void LCD_khoitao()
{
LCD_Send4Bit(0x00);
delay_ms(20);
LCD_RS = 0;
LCD_Send4Bit(0x03); //
LCD_Enable();
delay_ms(5);
LCD_Enable();
delay_ms(100);
LCD_Enable();
LCD_Send4Bit(0x02); // dua con tro ve dau man hinh
LCD_Enable();
LCD_Send1Byte(0x28);
LCD_Send1Byte(0x0C); // 0x0E Bat hien thi, bat con tro 0x0C neu muon tat con tro
LCD_Send1Byte(0x06);
LCD_xoamanhinh();
delay_ms(20);
}
//---------------------------Chuong trinh giao tiep UART--------------------------------//
void UART_guikitu(unsigned char _data)
{
while(!(UCSRA & (1<<UDRE))); //kiem tra UDRE
UDR=_data;
}
void UART_guichuoi(unsigned char *u)
{
unsigned char n,i;
n=strlen(u); //Dem so ky tu
for(i=0;i<n;i++) UART_guikitu(u[i]);//Gui het chuoi
}
//--------------------------------------------------------------------------------------//
unsigned char doc_nhietdo_doam(unsigned char *tem,unsigned char *humi)
{
unsigned char data[5]={0},i,j,check;
DHT11_define=1; //out
DHT11_out=1;
delay_us(60);
DHT11_out=0;
delay_ms(25);
DHT11_out=0;
DHT11_define=0; //in
delay_us(60);
if(DHT11_in)return 0; else while(!DHT11_in);
delay_us(60);
if(!DHT11_in)return 0; else while(DHT11_in);
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
while(!DHT11_in);
delay_us(50);
if(DHT11_in)
{
data[i]|=(1<<(7-j));
while(DHT11_in);
}
}
}
check=data[0]+data[1]+data[2]+data[3];
if(check !=data[4])return 0;
*tem=data[2];
*humi=data[0];
return 1;
}
void main(void)
{
unsigned char nhietdo,doam;
unsigned char kt1=1,kt2=1,SMS[99],a;
UCSRB=0x98;//Ngat RX, cho phep RX va TX
UCSRC=0x86;//8bit uart, 1bit stop, no parity
UBRRL=71;//baud 9600bps
PORTB=0xff;
DDRB=0xff;
PORTC=0xff;
DDRC=0xff;
PORTD=0xff;
DDRD=0x00;
LCD_RW=0;
LCD_khoitao();
LCD_guichuoi("-DANG KHOI DONG-");
delay_ms(3000);
LCD_xoamanhinh();
if(max_doam>99)max_doam=0;
if(max_nhietdo>99)max_nhietdo=0;
LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
LCD_chonvitri(1,0);LCD_guichuoi("D.am:");
while (1)
{
if(doc_nhietdo_doam(&nhietdo,&doam));
LCD_chonvitri(0,5);
LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
LCD_chonvitri(1,5);
LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' ');
LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);
//-------Check phim----------------------------------------------------------//
if(mode==0)
{
delay_ms(20);while(mode==0);
LCD_chonvitri(1,0);
LCD_guichuoi(" ");
while(1)
{
LCD_chonvitri(0,14);
LCD_guikitu(max_nhietdo/10+48);
LCD_guikitu(max_nhietdo%10+48);
if(up==0){max_nhietdo++;if(max_nhietdo>99)max_nhietdo=0;delay_ms(300);}
if(down==0){if(max_nhietdo>0)max_nhietdo--;else max_nhietdo=99;delay_ms(300);}
if(mode==0)
{
delay_ms(20);
LCD_chonvitri(1,0);LCD_guichuoi("D.am:");
LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' ');
LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);
while(mode==0);
LCD_chonvitri(0,0);
LCD_guichuoi(" ");
while(1)
{
LCD_chonvitri(1,14);
LCD_guikitu(max_doam/10+48);
LCD_guikitu(max_doam%10+48);
if(up==0){max_doam++;if(max_doam>99)max_doam=0;delay_ms(300);}
if(down==0){if(max_doam>0)max_doam--;else max_doam=99;delay_ms(300);}
if(mode==0)
{
delay_ms(20);
LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
while(mode==0);goto thoat;
}
}
}
}
thoat:;
}
//-------------------------------------------------------------------------------//
//Kiem tra va SEND SMS canh bao
if(nhietdo>max_nhietdo && kt1==1 &&max_nhietdo!=0)
{
kt1=0;
UART_guichuoi("AT+CMGS=\"01694733311\"\r\n");UART_guikitu(0x0D);
delay_ms(500);
sprintf(SMS,"CANH BAO : nhiet do hien tai la %i, vuot qua nhiet do cho phep !\r\n",nhietdo);
UART_guichuoi(SMS);delay_ms(500);
UART_guikitu(0x1A);
for(a=0;a<50;a++)SMS[a]='\0';
LCD_xoamanhinh();LCD_guichuoi("---Dang gui SMS---");
delay_ms(7000); // cho gui tin nhan
LCD_xoamanhinh();
LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
LCD_chonvitri(1,0);LCD_guichuoi("D.am:");
LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' ');
LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);
}
else if(nhietdo<max_nhietdo)kt1=1;
if(doam>max_doam && kt2==1 && max_doam!=0)
{
kt2=0;
UART_guichuoi("AT+CMGS=\"01694733311\"\r\n");UART_guikitu(0x0D);
delay_ms(500);
sprintf(SMS,"CANH BAO : do am hien tai la %i, vuot qua do am cho phep !\r\n",doam);
UART_guichuoi(SMS);delay_ms(500);
UART_guikitu(0x1A);
for(a=0;a<50;a++)SMS[a]='\0';
LCD_xoamanhinh();LCD_guichuoi("---Dang gui SMS---");
delay_ms(7000); // cho gui tin nhan
LCD_xoamanhinh();
LCD_chonvitri(0,0);LCD_guichuoi("N.do:");
LCD_guikitu(nhietdo/10+48);LCD_guikitu(nhietdo%10+48);LCD_guikitu(0xDF);LCD_guikitu('C');
LCD_guichuoi(" MAX=");LCD_guikitu(max_nhietdo/10+48);LCD_guikitu(max_nhietdo%10+48);
LCD_chonvitri(1,0);LCD_guichuoi("D.am:");
LCD_guikitu(doam/10+48);LCD_guikitu(doam%10+48);LCD_guikitu(0x25);LCD_guikitu(' ');
LCD_guichuoi(" MAX=");LCD_guikitu(max_doam/10+48);LCD_guikitu(max_doam%10+48);
}
else if(doam<max_doam)kt2=1;
}
}
DOWNLOAD FULL:
( Nguyên lý + Code chuẩn) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - Nhận vẽ mạch thuê ONLINE Altium Designer/ Orcad 9.2/ Protues nhanh trong ngày
-----------------------------------------------------------------------------------
DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship
DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay
DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool
eChipKool - Chia sẻ kiến thức Kết Nối đam mê điện tử