Hình 3.6 Sơ đồ mạch in Hình 3.7 Mạch thực tế

Một phần của tài liệu Hệ thống báo cháy tự động sử dụng vi điều khiển AT89C51 (Trang 34 - 43)

Code chương trình

#include <REGX51.H> #define VREF5 //VREF=5V

//Khai bao chan giao tiep ADC0808 #define ADC0808_DATA P3//PORT #define ADC0808_A P2_0 //PIN #define ADC0808_B P2_1 #define ADC0808_C P2_2 #define ADC0808_ALE P2_3 #define ADC0808_START P2_4 #define ADC0808_EOC P2_5 #define ADC0808_OE P2_6 #define ADC0808_CLKP2_7

//Khai bao chan giao tiep LCD16x2 4bit #define LCD_RS P0_0 #define LCD_RW P0_1 #define LCD_EN P0_2 #define LCD_D4 P0_4 #define LCD_D5 P0_5 #define LCD_D6 P0_6 #define LCD_D7 P0_7 /*****************ADC0808*********************/ //Ham doc ADC0808 theo kenh

unsigned char ADC0808_Read(unsigned char channel){ unsigned char kq;

ADC0808_A = channel & 0x01; ADC0808_B = channel & 0x02; ADC0808_C = channel & 0x04; ADC0808_ALE = 1;

ADC0808_START = 1; ADC0808_ALE = 0; ADC0808_START = 0;

while(ADC0808_EOC); while(!ADC0808_EOC); ADC0808_OE = 1; kq = ADC0808_DATA; ADC0808_OE = 0; return kq; } /*****************Ham delay*********************/ void delay_us(unsigned int t){

unsigned int i; for(i=0;i<t;i++); }

void delay_ms(unsigned int t){ unsigned int i,j;

for(i=0;i<t;i++) for(j=0;j<125;j++); }

/**************Ctr giao tiep LCD 16x2 4bit**********************/ void LCD_Enable(void){ LCD_EN =1; delay_us(3); LCD_EN=0; delay_us(50); }

//Ham Gui 4 Bit Du Lieu Ra LCD

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; }

void LCD_SendCommand(unsigned char command){ LCD_Send4Bit(command >>4);/* Gui 4 bit cao */ LCD_Enable();

LCD_Send4Bit(command); /* Gui 4 bit thap*/ LCD_Enable();

}

void LCD_Clear(){// Ham Xoa Man Hinh LCD LCD_SendCommand(0x01);

delay_us(10); }

// Ham Khoi Tao LCD void LCD_Init(){ LCD_Send4Bit(0x00); delay_ms(20); LCD_RS=0; LCD_RW=0; LCD_Send4Bit(0x03); LCD_Enable(); delay_ms(5); LCD_Enable(); delay_us(100); LCD_Enable(); LCD_Send4Bit(0x02); LCD_Enable();

LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8 LCD_SendCommand( 0x0c); // cho phep hien thi man hinh

LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh LCD_SendCommand(0x01); // xoa toan bo khung hinh

}

void LCD_Gotoxy(unsigned char x, unsigned char y){ unsigned char address;

else address=(0xc0+x); delay_us(1000);

LCD_SendCommand(address); delay_us(50);

}

void LCD_PutChar(unsigned char Data){//Ham Gui 1 Ki Tu LCD_RS=1;

LCD_SendCommand(Data); LCD_RS=0 ;

} (adsbygoogle = window.adsbygoogle || []).push({});

void LCD_Puts(char *s){//Ham gui 1 chuoi ky tu while (*s){ LCD_PutChar(*s); s++; } } /**************Show Temp***********************

unsigned char Temp(unsigned char adc){//Tinh nhiet do tu adc8bit return ((VREF*adc)/2.56f); //Tinh nhiet do

} */

void TempShow(unsigned char z){ //Chuyen doi hien thi LCD_Puts("Nhiet do: "); LCD_PutChar((z/100)+48);//Tram LCD_PutChar((z%100/10)+48);//Chuc LCD_PutChar((z%10)+48);//Don vi LCD_Puts("'C"); } /******************Ctr ngat timer 0**************************/ void INT_Timer0()interrupt 1 {

//ctr phuc vu ngat tao xung clock cho ADC0808 ADC0808_CLK=~ADC0808_CLK; //Dao bit }

/******************Chuong trinh chinh**************************/ void mq2(){

if(P1_7==1) {

P1_6 = 0; } // Khi co tin hieu thi cap nguon cho coi chip keu if(P1_7==0) {

P1_6 =1; // Khi khong co tin hieu thi coi chip khong hoat dong }

}

void main(){

unsigned char temp;

//Tao xung clock cho ADC0808 dung ngat timer TMOD=0x02; //Timer0 8bit tu nap lai

TH0=TL0=236;//Tao ngat 20us TR0=1;//Khoi dong timer0 ET0=1;//Ngat timer0

EA=1;//Cho phep ngat cuc bo //init

LCD_Init();//Khoi tao LCD delay_ms(200);

///LCD_Puts("Do nhiet do...");//Gui chuoi len LCD // delay_ms(500);

LCD_Clear();//Xoa man hinh LCD_Gotoxy(0,1);

LCD_Puts("LyHaoBTHTMT_K14A"); while(1){

LCD_Gotoxy(0,0);

temp=ADC0808_Read(0); //Doc ADC0 if(temp>=40) {

P1_5=1; } Else

{ P1_5=0; } P1_6=0;

if(P1_7=1) {

P1_6 = 1; } // Khi co tin hieu thi cap nguon cho coi chip keu else{

P1_6 = 0; // Khi khong co tin hieu thi coi chip khong hoat dong } //temp=Temp(temp); //Tinh nhiet do

TempShow(temp); //Hien thi nhiet do delay_ms(200); //0.5s doc mot lan

P1_6=1; if(P1_7==0) {

P1_6 = 1; } // Khi co tin hieu thi cap nguon cho coi chip keu if(P1_7==1) {

P1_6 = 0; } // Khi khong co tin hieu thi coi chip khong hoat dong mq2(); (adsbygoogle = window.adsbygoogle || []).push({});

} }

KẾT LUẬN Ưu nhược điểm của mạch

- Ưu điểm: Hệ thống hoạt động tương đối ổn định các linh kiện cảm biến nhạy bén.

- Có độ bền cao và giá thành rẻ.

- Nhược điểm: Mạch có khả năng bị nhiễu, không hoạt động bằng nguồn xoay chiều 220V là nguồn điện dân dụng hiện nay.

Ứng dụng và phát triển

Hệ thống báo cháy có ứng dụng lớn nhất là báo động khi có hỏa hoạn xảy ra. Giúp đảm bảo một phần an toàn của người dân, cũng như tránh những thiệt hại đáng tiếc về tính mạng con người và tài sản.

Mạch có khả năng nâng cấp cải tiến để dùng cho các mục đích khác như hệ thống phát hiện rò rỉ gas, và có thể ứng dụng vào các công trình lớn nếu được cải thiện và nâng cấp hoàn chỉnh hơn ….

TÀI LIỆU THAM KHẢO

[1] Nguyễn Mạnh Giang (2002), Kỹ thuật ghép nối máy vi tính, NXB Giáo dục [2] Giáo trình họ vi điều khiển 8051-Tống Văn On

[3] dientuvietnam.net [4] banlinhkien.vn [5] luanvan.net.vn [6] codientu.org

NHẬN XÉT CỦA GIÁO VIÊN

Thái Nguyên, ngày 16 tháng 04 năm 2019

Một phần của tài liệu Hệ thống báo cháy tự động sử dụng vi điều khiển AT89C51 (Trang 34 - 43)