#include<16f877a.h> #use delay(clock=000000) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,BITS=8,PARITY=N) #bit LCD_RS=0x8.2 //0x5.3 //RA3 #bit LCD_RW=0x8.0 //0x5.2 //RA2 #bit LCD_EN=0x8.3 //0x5.1 //RA1 #byte LCD_DATA=8 #define LCD_STROBE() ((LCD_EN=1),(LCD_EN=0)) void lcd_string(char*s); void lcd_write(unsigned char c); void lcd_clear(void); void lcd_string(char*s); void lcd_character(char c); void lcd_char(unsigned char c); void lcd_init(); void init_GSM(); void Send_Message(); void Read_response(); void Read_Message(); void delete_allmsg(); void send_cmgf(); void lcd_numdsply(); unsigned char comnd4[9]="AT+CMGR="; unsigned char message[20]="Alert vehicle theft"; unsigned char msg[5]="stop"; unsigned char str1[17]="WELCOME TO GSM"; unsigned char str2[17]="Veh Theft Intmtn"; unsigned char str3[17]="Check Modem Conc"; unsigned char str4[17]="Module Activated"; unsigned char str5[17]="Message Sent..."; unsigned char str6[17]="Waiting for Msg."; unsigned char str7[17]="Vehicle Theft"; unsigned char str8[17]="IntimationsSystem"; unsigned char str9[17]="VEHICLE STOPPED"; unsigned char buffer[20],theft_flag=0,response_flag=0; void main() { unsigned char m,valid_flag,temp; set_tris_d(0x00); set_tris_b(0x01); set_tris_c(0x80); pins output_low(PIN_B4); theft_flag=1; output_low(PIN_C1); lcd_int(); Init_GSM(); delay_ms(3000); lcd_write(0x80); lcd_string(str7); lcd_write(0xc0); lcd_string(str8); while(TRUE) { while(input(PIN_B0)==1); while (input(PIN_B0)==0); theft_flag=0; output_high(PIN_C1); Send_Message(); delay_ms(10000); lcd_write(0xc0); lcd_string(str6); temp=1; while(temp) { Read_response(); if(response_flag==1) { response_flag=0; valid_flag=0; Read_message(); for(m=0;m<4;m++) { if(msg[m]==buffer[m]) { valid_flag=1; } else {valid_flag=0; break; } } if(valid_flag==1) { output_low(PIN_C1); temp=0; lcd_write(0xc0); lcd_string(str9); delay_ms(3000); } else { output_high(PIN_B4); } } delete_allmsg(); lcd_write(0x80); lcd_string(str7); Lcd_write(0xc0); lcd_string(str8); } } } void Read_response() { unsigned char k=0,resp[6]="CMTI:",temp1; while(getchar()!='+'); while (temp1!=0x0A) { temp1=getchar(); buffer[k++]=temp1; } for(k=0;k<5;k++) { if (reso[k]==buffer[k]) { response_flag=1; } else { response_flag=0; break; } } } void Read_message() { unsigned char r; for (r=0;r<8;r++) { putchar(comnd4[r]); } putchar(buffer[14]); putchar(0x0D); while(getchar()!=0x0A); for(r=0;r<4;r++) { buffer[r]=getchar(); } } void Send_Message() { unsigned char j,comnd3[9]="AT+CMGS="; unsigned char mobileno[14]="num you want to send"; for(j=0;j<8;j++) { putchar(comnd3[j]); } putchar(""); for(j=0;j<13;j++) { putchar(mobileno[j]); } putchar(""); putchar(0x0d); while(getchar()!='>'); for(j=0;j<20;j++) { putchar(message[j]); } lcd_write(0xc0); lcd_string(str5); } void delete_allmsg() { unsigned char d,atcmd1[10]="AT+CMGDA="; unsigned char atcmd2[8]="DELALL"; for(d=0;d<9;d++) { putchar(atcmd1[d]); } putchar(""); for(d=0;d<7;d++) { putchar(atcmd2[d]); } putchar(""); putchar(0x0D); delay_ms(2000); } void Init_GSM() { unsigned char exit=0,ch1,ch2; lcd_write(0x80); lcd_string(str1); delay_ms(2000); lcd_write(0x80); lcd_string(str2); while(!exit) { putchar('A'); putchar('T'); putchar(0x0d); while(getchar()!=0x0A); ch1=getchar(); ch2=getchar(); if((ch1=='O')&&(ch2==K)) { exit=1; } else { lcd_write(0xc0); lcd_string(str3); } } send_cmgf(); text format lcd_write(0xc0); lcd_string(str4); } void send_cmfg() in text format { unsigned char txtcmnd[10]="AT+CMGF=1",t; for(t=0;t<9;t++) { putchar(txtcmnd[t]); } putchar(0x0D); while(getchar()!='K'; lcd_numdsply(); } void lcd_numdsply() { char num,n1,n2,n3; for(num=20;num>num--) { n1=num; lcd_write(0xc8); n2=n1%10; n1=n1/10; n3=n1%10; lcd_char(n3+0x30); lcd_char (n2+0x30); delay_ms(500); } } void lcd_write(unsigned char c) { delay_us(40); LCD_DATA=((c & 0xf0)); LCD_STROBE(); LCD_DATA=((c<<4)&0xf0); LCD_STROBE(); } void lcd_char(unsigned char c) { delay_us(40); LCD_DATA=((c & 0xf0)); LCD_RS=1; LCD_STROBE(); LCD_DATA=((c<<4)&0xf0); LCD_STROBE(); } void lcd_clear(void) { LCD_RS=0; lcd_write(0x01); delay_ms(2); } /*write a string of chars to the LCD*/ voide lcd_string(char*s) { LCD_RS=1; while(*s) lcd_char(*s++); } /*write one character to the LCD*/ void lcd_character(char c) { LCD_RS=1; lcd_char(c)l } void lcd_init() { char init_value; init_value=0x30;//0x03; set_tris_a(0x00); set_tris_d(0x00); LCD_RS=0; LCD_EN=0; LCD_RW=0; delay_ms(15) LCD_DATA=init_value; LCD_STROBE(); delay_ms(5); LCD_STROBE(); delay_us(200); LCD_DATA=0x20//0x02; LCD_STROBE(); lcd_write(0x28); lcd_write(0x0F); lcd_clear(); lcd_write(0x06); }