CODE CHƯƠNG TRÌNH

Một phần của tài liệu Thiết kế hệ thống điều khiển và giám sát nhiệt độ qua hệ thống GSM (Trang 48)

THIẾT KẾ VÀ THI CÔNG MẠCH HỆ THỐNG

5.4 CODE CHƯƠNG TRÌNH

/

************************************************************************ ********/

/**********CHUONG TRINH DIEU KHIEN VA GIAM SAT NHIET DO QUA HE THONG GSM*********/ / ************************************************************************ ********/ #include <htc.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <string.h>

#include "uart.h" // Cau hinh ket noi va khai bao lenh dung cho giao tiep UART. #include "lcd.h" // Cau hinh ket noi va khai bao lenh dung cho LCD.

__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT & BORDIS & LVPDIS); #define _XTAL_FREQ 4000000

#define buff_size 50

const char code_number[]='0','1','2','3','4','5','6','7','8','9'; unsigned char buff_sms[buff_size];

unsigned char flag_isr; unsigned char dk_tb,temp; unsigned char buff;

unsigned char khoa,dem,tinmoi;

//********************************************* const char cgram[]=

{

0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00, 0x99// ma chuoi ket thuc

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

//********************************************* void int_PORTA() // khoi tao port A

{

PORTA=0X0F; TRISA=0X0FF; }

void int_PORTB() // khoi tao port B {

PORTB = 0X01; TRISB = 0X01; }

void int_PORTD() // khoi tao port D {

PORTD = 0X00; TRISD = 0X00; }

//********************************** //chuong trinh tao thoi gian tre 1ms

//================================== void delay(unsigned char ms)

{

unsigned char i; for(i=0;i<ms;i++) {

__delay_ms(100); // tri hoan 1 ms }

}

//========================= void uart_AT(const char *s)

{

uart_puts(s); // truyen chuoi tu pic sang sim900 uart_putc(13); // truyen ki tu enter

}

//========================= void cauhinh_sim900()

{

uart_AT("AT");//kiem tra ket noi mang delay(5);

uart_AT("ATZ");//reset modulm delay(5);

uart_AT("ATZ"); delay(5);

uart_AT("ATE0");//tat che do echo delay(5);

uart_AT("AT+ICF=3,3");// che do start-stop (8 Data 1 Stop) delay(5);

uart_AT("AT+IPR=9600");// thiet lap toc do truyen delay(5);

uart_AT("AT&W");//luu cau hinh hien tai delay(5);

uart_AT("AT+CMGF=1");// dang du lieu dinh dang text de gui tin delay(5);

uart_AT("AT+CNMI=2,0,0,0,0");// thiet lap che do nhan tin nhan tu mang delay(5);

uart_AT("AT+CSAS");// luu thiet lap delay(5);

}

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

void send_sms(const char *text) {

uart_puts("AT+CMGS=");//lenh gui tin nhan AT+CMGS = "01889451792" uart_putc(34);

uart_puts("01889451792");// so dien thoai de gui tin nhan den uart_putc(34);

uart_putc(13);//<cr> delay(5);

uart_puts(text);//noi dung tin nhan delay(5);

uart_putc(26); // gui ki tu ctrl-Z/esc uart_putc(13); // gui ki tu enter <cr> delay(35);

}

void send_nhietdo(unsigned char temp,const char *text) {

unsigned char nhiet_do[3],i; // tao bo mang de luu tru nhiet do do duoc for (i=0;i<=2;i++) //tach nhiet do do duoc de truyen di

{

nhiet_do[i] = code_number[temp%10]; temp=temp/10;

}

uart_puts("AT+CMGS=");// lenh gui tin nhan uart_putc(34); // ki tu dau nhay doi

uart_puts("01889451792"); uart_putc(34);

uart_putc(13);//<cr> ki tu enter delay(5);

uart_puts("NHIET DO HIEN TAI DANG LA: "); // gui chuoi noi dung hien thi do nhiet do vao tin nhan

if(nhiet_do[2] == '0') // neu nhiet do nho hon 100 do c thi so dau tien hien th khoang trang

uart_putc(' '); else

uart_putc(nhiet_do[2]); // gui cac phan tu nhiet do qua tin nhan uart_putc(nhiet_do[1]);

uart_putc(nhiet_do[0]); delay(5);

uart_putc(' ');

uart_puts(text);//noi dung tin nhan sms delay(5);

uart_putc(26);// gui ctrl-Z/esc uart_putc(13); // gui ki tu enter delay(35);

}

//===================== void doc_sms()

{

uart_AT("AT+CMGR=1,0"); // lenh doc tin nhan delay(5);

}

//===================== void xoa_sms()

{

uart_AT("AT+CMGD=1,4");// lenh xoa tin nhan o nho so 1, va chon 4 de xoa het delay(15);

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

}

//==================== void xoa_het_sms()

{

uart_puts("AT+CMGDA =");// lenh xoa het tin nhan uart_putc(34);// gui ki tu enter

uart_puts("DEL ALL");// xoa het cac tin nhan uart_putc(34); uart_putc(13);//<cr> delay(15); } //==================== void huy_call() {

uart_puts("ATH");// lenh huy cuoc goi uart_putc(13);//<cr>

delay(7); }

//*****chuong trinh xoa mang buff_sms*****

void clear_buff() // xoa bo dem chua du lieu tin nhan nhan dc trong chuong trinh ngat { char i=0; for(i=0;i<strlen(buff_sms);i++) { buff_sms[i]=0x00; } } //******************************************************

char test_string(const char buffer[], const char str[]) // kiem tra cac cu phap trong chuoi, neu dung tra ve 1, sai tra ve 0

{

unsigned char leng_buff = 0; unsigned char leng_str = 0; char i, j;

leng_buff = strlen(buffer);// do dai chuoi buffer leng_str = strlen(str);//do dai cu phap can kiem tra if (leng_buff >= leng_str)

{

for (i = 0; i <= leng_buff - leng_str; i++) { for (j = 0; j < leng_str; j++) { if (buffer[i + j] != str[j]) break; } if (j == leng_str) return 1; } return 0; } return 0; } //*********************************************************** void interrupt isr()// chuong trinh ngat va nhan du lieu

{

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

if(RCIE && RCIF) // Kiem tra cho phep ngat thu cua UART. {

RCIF = 0; // Xoa co ngat flag_isr =1;

data=uart_getc();

if(data=='#')// ki tu ket thuc de nhan du lieu {

khoa=0;

tinmoi=1; // bien toan cuc dung de dieu khien thiet bi }

if(khoa==1) // chp phep luu du lieu vao trong bo dem buffer_sms cua chuong trinh {

buff_sms[dem]=data; dem++;

}

if(data=='*')// ki tu bat dau de nhan du lieu { khoa=1; dem=0; } } } //********************************************************** unsigned int read_ADC()

{

__delay_us(5); // Cho ADC thuc hien lay mau.

GODONE = 1; // Bat dau thuc hien chuyen doi AD. while(GODONE); // Cho ADC thuc hien chuyen doi xong. // Tra ve ket qua ADC sau khi chuyen doi xong.

return (((unsigned int)ADRESH)<<8)|ADRESL;// Ghep byte thap va byte cao cua gia tri ADC.

}

//********************************************************** void init_ADC()// chuong trinh do nhiet do va doc nhiet do tu RA1

{

unsigned char i,do_C; unsigned long adc_val;

ADCON1 = 0; //khoi dong thanh ghi ADCON1

ADCON0 = 0; //KHOI DONG THANH GHI ADCON0

ADFM = 1;

CHS0 = 1; CHS1 = 0; CHS2 = 0;

ADCS0 = 1; //CHON XUNG TRONG CHIP. ADCS1 = 1;

ADON = 1; //CHO PHEP ADC HOAT DONG. adc_val = read_ADC();

delay(1);

do_C = (char)(adc_val*445/1023);

temp = do_C;//gia tri adc de dieu khien thiet bi. }

//********************************************************** void kt_cgram(void) // chuong trinh hien thi ki tu dac biet len lcd

{ unsigned char i; // khai bao bien

i = 0; // Dia chi ky tu dac biet trong bo

ma cgram_dat.

lcd_put_byte(0,0x40); // Lenh = 40H - Dat CGRAM co dia chi bat dau la 00H.

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

while(lcd_busy()); // Kiem tra LCD bao ban.

while(cgram[i]!=0x99) // Kiem tra nap xong du lieu cho cac ky tu dac biet,

{ // ky tu ket thuc chuoi la 99H.

lcd_put_byte(1,cgram[i]); // Ghi cac ma ky tu dac biet vao CGRAM theo dia chi.

while(lcd_busy()); // Kiem tra LCD bao ban. i++;

} }

//********************************************************** void display_temp(unsigned char itemp) // chuong trinh hien thi nhiet do len lcd {

unsigned char i;

lcd_puts("\f NHIET DO LA:"); // hien thi ma hinh lcd kt_cgram();// chuong trinh hien thi ki tu dac biet len lcd lcd_gotoxy(9,1);

lcd_puts("\2C");// gui ki tu do C len lcd

for (i=8;i>=6;i--) //Hien thi gia tri ADC len LCD {

lcd_gotoxy(i,1);

lcd_putc(code_number[itemp%10]); //Tach NG-TR-CH-DV va giai ma hien thi LCD

itemp=itemp/10; }

}

//*********************************************************** void dieukhien()// chuong trinh dieu khien thiet bi

if(test_string(buff_sms,"BAT1")) // BAT THIET BI 1 {

lcd_puts("\f Co Tin Hieu");// hien thi lcd delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1");// hien thi lcd delay(7);

RB5 = 0;// bat thiet bi 1 delay(7);

lcd_puts("\f Thiet Bi 1\n Da Bat");// hien thi lcd send_sms("Thiet Bi 1: Da Bat");// gui tin nhan clear_buff();// xoa bo dem

xoa_sms();// xoa tin nhan return; // thoat chuong trinh }

if(test_string(buff_sms,"BAT2")) // BAT THIET BI 2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 2"); delay(7);

RB6 = 0; delay(7);

lcd_puts("\f Thiet Bi 2\n Da Bat"); send_sms("Thiet Bi 2: Da Bat"); clear_buff();

xoa_sms(); return; }

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

{

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 3"); delay(7);

RB7 = 0; delay(7);

lcd_puts("\f Thiet Bi 3\n Da Bat"); send_sms("Thiet Bi 3: Da Bat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT1")) //TAT THIET BI 1 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Tat\n Thiet Bi 1"); delay(7);

RB5 = 1; delay(7);

lcd_puts("\f Thiet Bi 1\n Da Tat"); send_sms("Thiet Bi 1: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT2")) // TAT THIET BI 2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Tat\n Thiet Bi 2"); delay(7);

RB6 = 1; delay(7);

lcd_puts("\f Thiet Bi 2\n Da Tat"); send_sms("Thiet Bi 2: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT3")) // TAT THIET BI 3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Tat\n Thiet Bi 3"); delay(7);

RB7 = 1; delay(7);

lcd_puts("\f Thiet Bi 3\n Da Tat"); send_sms("Thiet Bi 3: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"TAT@123")) //TAT HET CAC THIET BI 1-2-3 {

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

delay(7);

lcd_puts("\f Dang Tat \n Thiet Bi 1 2 3"); delay(7);

RB5 = 1 ; RB6 = 1; RB7 = 1; delay(7);

lcd_puts("\f Da Tat Het\n Thiet Bi 1 2 3");

send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3: Da Tat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"BAT@123")) // BAT HET CAC THIET BI 1-2-3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1 2 3"); delay(7);

RB5 = 0 ; RB6 = 0; RB7 = 0; delay(7);

lcd_puts("\f Da Bat Het\n Thiet Bi 1 2 3");

send_sms("Thiet Bi 1 - Thiet Bi 2 - Thiet Bi 3 Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@2@3")) // TAT TB1 - MO TB2 VA TB3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 2 3"); delay(7);

RB5 = 1 ; RB6 = 0; RB7 = 0; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 2 3");

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2 - Thiet Bi 3: Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@3")) // TAT TB2 - MO TB1 VA TB3 {

lcd_puts("\f Co Tin Hieu"); delay(7);

lcd_puts("\f Dang Bat\n Thiet Bi 1 3"); delay(7);

RB5 = 0 ; RB6 = 1; RB7 = 0; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 2 3");

send_sms("Thiet Bi 2: Da Tat \n Thiet Bi 1 - Thiet Bi 3: Da Bat"); clear_buff(); xoa_sms(); return; } if(test_string(buff_sms,"BAT@1@2")) // TAT TB3 - MO TB1 VA TB2 {

lcd_puts("\f Co Tin Hieu"); delay(7);

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

delay(7);

RB5 = 0 ; RB6 = 0; RB7 = 1; delay(7);

lcd_puts("\f Da Bat\n Thiet Bi 1 2");

send_sms("Thiet Bi 3: Da Tat \n Thiet Bi 1 - Thiet Bi 2: Da Bat"); clear_buff();

xoa_sms(); return; }

if(test_string(buff_sms,"KIEMTRA")) // KIEM TRA THIET BI DANG HOAT DONG

{

lcd_puts("\f Dang Kiem Tra\n Thiet Bi"); if(RB5==0&&RB6==0&&RB7==0)

{

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat");

}

if(RB5==1&&RB6==1&&RB7==1) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");

}

if(RB5==0&&RB6==1&&RB7==1) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Tat");

if(RB5==1&&RB6==0&&RB7==1) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");

}

if(RB5==0&&RB6==0&&RB7==1) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Tat");

}

if(RB5==1&&RB6==1&&RB7==0) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");

}

if(RB5==0&&RB6==1&&RB7==0) {

send_sms("Thiet Bi 1: Da Bat \n Thiet Bi 2: Da Tat \n Thiet Bi 3: Da Bat");

}

if(RB5==1&&RB6==0&&RB7==0) {

send_sms("Thiet Bi 1: Da Tat \n Thiet Bi 2: Da Bat \n Thiet Bi 3: Da Bat"); } delay(5); clear_buff(); xoa_sms(); return;

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

}

if(test_string(buff_sms,"TEST@NHIETDO")) {

lcd_puts("\f DANG KIEM TRA \n NHIET DO"); delay(5); send_nhietdo(temp," "); delay(5); clear_buff(); xoa_sms(); return; }

lcd_puts("\f SAI CU PHAP\n KIEM TRA LAI"); delay(5);

send_sms("GUI TIN SAI CU PHAP \n VUI LONG KIEM TRA LAI CU PHAP"); delay(5); clear_buff(); xoa_sms(); } //**************************CHUONG TRINH CHINH**************************************** void main() {

int_PORTD(); //Khoi dong portD.

RD0 = 1; //Khoi dong sim900 bang chuong trinh delay(8);

RD0 = 0; delay(2);

int_PORTB(); //Khoi dong portA. int_PORTA(); //Khoi dong portB.

RB5 = 1; RB6 = 1; RB7 = 1;

uart_init(); //Khoi dong UART. lcd_init(); //Khoi dong lcd. GIE = 1; // Cho phep ngat toan cuc. PEIE = 1; // Cho phep ngat ngoai vi. lcd_puts("\f Dang Cau Hinh \n Waiting!!!!");

cauhinh_sim900(); // chuong trinh cau hinh sim900 vao mang delay(50);

lcd_puts("\f Cau Hinh Xong \n Start...."); delay(20);

lcd_puts("\f Welcome To ... \n DO-AN-2A"); delay(15);

lcd_puts("\f--HOANG GIANG--\n --NGOC KIEU--"); xoa_het_sms();// xoa het tat ca cac tin nhan

clear_buff();//xoa het bo dem chua du lieu tin nhan duoc luu xoa_sms(); // xoa tin nhan

flag_isr = 0;

tinmoi = 0;//gan gia tri tinmoi=0 de cho ngat xay ra bat len 1 de thuc hien dk t_bi unsigned char ix=1;

while(1) {

init_ADC();// chuong trinh doc va do nhiet do display_temp(temp);

delay(15); if(ix)

{

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH

send_nhietdo(temp,"Do C"); delay(20);

lcd_puts("\f Da Gui Xong"); delay(10);

ix = 0; }

if(tinmoi) {

dieukhien(); //CHUONG TRINH DIEU KHIEN THIET BI tinmoi = 0;

} }

}

Một phần của tài liệu Thiết kế hệ thống điều khiển và giám sát nhiệt độ qua hệ thống GSM (Trang 48)

Tải bản đầy đủ (DOCX)

(72 trang)
w