interfacing gsm module with proteus

15
#include <AT89X51.H> #define lcd_port P2 #define LCD_D7 P2_3 #define LCD_RS 0x20 #define LCD_EN 0x10 #define TRUE 1 //some defines #define FALSE 0 #define keyport P0 //keypad connected to P0 #define col1 P0_0 //column 1 #define col2 P0_1 //column 2 #define col3 P0_2 //column 3 #define col4 P0_3 //column 4 #define col5 P0_4 //column 5 #define DcmotorA P3_6 #define DcmotorB P3_7 char ascii_key='0'; unsigned int counter,counter2=0; unsigned char read_msg[40]; int flag5,flag3,flag4; unsigned char msg[20]; void serial_init(); void serial_send_string(unsigned char *str); void LCD_cleardisplay(); void lcd_reset(); void lcd_init (); void lcd_cmd (char cmd); void lcd_data (unsigned char dat); void LCD_sendstring(unsigned char *var); void delayus(unsigned int del); void delayms(unsigned int del); void key_init(); unsigned char get_key(); unsigned char translate(unsigned char keyval); void new_password_get();

Upload: reynard-kevin-francisco

Post on 28-Nov-2015

217 views

Category:

Documents


2 download

DESCRIPTION

adasdasdas

TRANSCRIPT

Page 1: Interfacing Gsm Module With Proteus

#include <AT89X51.H>#define lcd_port P2#define LCD_D7 P2_3#define LCD_RS 0x20#define LCD_EN 0x10#define TRUE 1 //some defines#define FALSE 0#define keyport P0 //keypad connected to P0#define col1 P0_0 //column 1#define col2 P0_1 //column 2#define col3 P0_2 //column 3#define col4 P0_3 //column 4#define col5 P0_4 //column 5#define DcmotorA P3_6#define DcmotorB P3_7

char ascii_key='0';unsigned int counter,counter2=0;unsigned char read_msg[40];int flag5,flag3,flag4;

unsigned char msg[20];void serial_init();void serial_send_string(unsigned char *str);

void LCD_cleardisplay();void lcd_reset();void lcd_init ();void lcd_cmd (char cmd);void lcd_data (unsigned char dat);void LCD_sendstring(unsigned char *var);void delayus(unsigned int del);void delayms(unsigned int del);void key_init();unsigned char get_key();unsigned char translate(unsigned char keyval);void new_password_get();void password_get();void password_init();void password_match();void default_password();char wrong_password=0x45;char wrong_password_end=0x01;char x[4],y[4]={'1','2','3','4'};

Page 2: Interfacing Gsm Module With Proteus

int times_left=2;unsigned int flag2=0; void main(){ while(1) { char key='0'; key_init(); lcd_init(); IE=0x90; //10010000B enables serial interrupt;rest are disabled serial_init(); LCD_cleardisplay(); LCD_sendstring(" Welcome!"); delayms(10); password_get(); while(flag2==1) {

key_init(); password_get(); }

LCD_cleardisplay(); LCD_sendstring("Welcome Master!"); delayms(10); LCD_cleardisplay(); LCD_sendstring("Change Pass.?"); delayms(2); LCD_cleardisplay(); LCD_sendstring("A-yes,other-no"); delayms(1); key_init(); while(key=='0') key=translate(get_key()); LCD_cleardisplay(); lcd_data(key); delayms(5); if(key=='1') {

Page 3: Interfacing Gsm Module With Proteus

password_init(); LCD_cleardisplay(); LCD_sendstring("Pass. Changed"); delayms(3); } key='0'; LCD_cleardisplay(); //char at_command[]="AT\r"; serial_send_string("ATe0\r"); delayms(5); serial_send_string("AT\r"); delayms(5); //while(1) { LCD_cleardisplay(); LCD_sendstring(" Welcome"); delayms(3); LCD_cleardisplay(); // serial_send('A'); // delay(1000); // serial_send('T'); // delay(1000); // serial_send('\r'); // delay(10000) ; // LCD_sendstring("AT"); // delay(100); /* LCD_sendstring("operating mode"); serial_send_string("AT+CMGF=?\r"); //operating modes supported delayms(5);

LCD_cleardisplay(); LCD_sendstring("opt. mode now"); serial_send_string("AT+CMGF?\r"); //current operating mode in use delayms(5);

*/ LCD_cleardisplay(); LCD_sendstring("SMSC address"); serial_send_string("AT+CSCA?\r"); //current SMSC address delayms(5);

Page 4: Interfacing Gsm Module With Proteus

/* LCD_cleardisplay(); LCD_sendstring("msg store area"); serial_send_string("AT+CPMS=?\r"); //Finding the Message Storage Areas Supported by a GSM/GPRS Modem or Mobile Phone delayms(5); LCD_cleardisplay(); LCD_sendstring("curr. msg store"); serial_send_string("AT+CPMS?\r"); //message storage areas currently used, the number of messages currently stored //in a certain message storage area, and the maximum number of messages that are //allowed to be stored in a certain message storage area delayms(5); */ LCD_cleardisplay(); LCD_sendstring("sms initialize"); serial_send_string("AT+CMGF=1\r"); //sms initialization delayms(5); LCD_cleardisplay(); LCD_sendstring("all messages"); serial_send_string("AT+CMGL=\"ALL\"\r"); //Finding ALL Messages delayms(5); LCD_cleardisplay(); LCD_sendstring("config. to get"); serial_send_string("AT+CNMI=1,1,0,0,0\r"); //setting configuration to receive msg on serial port delayms(5);

LCD_cleardisplay(); LCD_sendstring("unread msg:"); delayms(5); if(flag5==1) { LCD_cleardisplay(); LCD_sendstring("msg:"); serial_send_string("AT+CMGL=\"REC UNREAD\"\r"); //setting configuration to receive msg on serial port delayms(5); counter=0; flag5=0; } else

Page 5: Interfacing Gsm Module With Proteus

{ LCD_cleardisplay(); LCD_sendstring("no unread msg"); delayms(5); } //want to open door LCD_cleardisplay(); LCD_sendstring("Open door?"); delayms(5); LCD_cleardisplay(); LCD_sendstring("A-yes,other-no"); delayms(1); key_init(); while(key=='0') key=translate(get_key()); LCD_cleardisplay(); lcd_data(key); delayms(1); if(key=='1') { //send sms

//serial_send_string("AT+CMGS=1,1,0,0,0\r"); //setting configuration to send msg on serial port //delay(10000); LCD_cleardisplay(); LCD_sendstring("Door opening"); DcmotorA=1; DcmotorB=0; delayms(15); LCD_cleardisplay(); LCD_sendstring("Door closing"); DcmotorA=0; DcmotorB=1; delayms(17); DcmotorA=0; DcmotorB=0; } key='0'; } }}

Page 6: Interfacing Gsm Module With Proteus

void serial0() interrupt 4{ unsigned char temp,temp1; if(TI==1) { temp=SBUF; serial_send_string(&temp); LCD_sendstring(&temp1); } else if(RI==1) { RI=0; temp=SBUF; /* msg[counter]=temp; if(flag5==0) { switch (temp) {

case '+' : if(counter==0){counter++;} break; case 'C' : if(counter==1){counter++;} break; case 'M' : if(counter==2||counter==9){counter++;} break; case 'T' : if(counter==3){counter++;} break; case 'I' : if(counter==4){counter++;} break; case ':' : if(counter==5){counter++;} break; case ' ' : if(counter==6){counter++;} break; case '"' : if(counter==7||counter==10){counter++;} break; case 'S' : if(counter==8){counter++;} break; case ',' : if(counter==11){counter++; flag5=1;} break; } } if(flag5==1) { ++counter; counter2=counter; read_msg[counter2]=temp; while(read_msg[counter2]!='G') { flag3=1;counter2++; } while(read_msg[counter2]!='O') { flag4=1;counter2++; } if(flag3==1||flag4==1)

Page 7: Interfacing Gsm Module With Proteus

{ LCD_sendstring(&read_msg[counter2]); flag3=0;flag4=0; } } */ //LCD_sendstring(&temp); }} void delayms(unsigned int del){ unsigned int i,j; for(i=1;i<del;i++) for(j=1;j<24000;j++);}void serial_init(){ TMOD = 0x20; TH1 = 0x0FD; SCON = 0x50; //PCON=0x80; TR1 = 1;}

void serial_send_string(unsigned char *str){ while(*str!='\0') { SBUF = *str; while(!TI); TI = 0; ++str; } } void lcd_reset(){

Page 8: Interfacing Gsm Module With Proteus

lcd_port = 0xFF; delayms(20); lcd_port = 0x03+LCD_EN; lcd_port = 0x03; delayms(10); lcd_port = 0x03+LCD_EN; lcd_port = 0x03; delayms(1); lcd_port = 0x03+LCD_EN; lcd_port = 0x03; delayms(1); lcd_port = 0x02+LCD_EN; lcd_port = 0x02; delayms(1);}void lcd_init (){ lcd_reset(); // Call LCD reset lcd_cmd(0x28); // 4-bit mode - 2 line - 5x7 font. lcd_cmd(0x0C); // Display no cursor - no blink. lcd_cmd(0x06); // Automatic Increment - No Display shift. lcd_cmd(0x80); // Address DDRAM with 0 offset 80h. }void lcd_cmd (char cmd){ lcd_port = ((cmd >> 4) & 0x0F)|LCD_EN; lcd_port = ((cmd >> 4) & 0x0F); lcd_port = (cmd & 0x0F)|LCD_EN; lcd_port = (cmd & 0x0F); delayus(200); delayus(200);}void lcd_data (unsigned char dat){ lcd_port = (((dat >> 4) & 0x0F)|LCD_EN|LCD_RS); lcd_port = (((dat >> 4) & 0x0F)|LCD_RS); lcd_port = ((dat & 0x0F)|LCD_EN|LCD_RS); lcd_port = ((dat & 0x0F)|LCD_RS); delayus(200); delayus(200);}void delayus(unsigned int del){

Page 9: Interfacing Gsm Module With Proteus

unsigned int i,j; for(i=1;i<del;i++) for(j=1;j<24;j++); }

void LCD_sendstring(unsigned char *var){ unsigned char abc=' '; lcd_data(abc); lcd_data(abc); while(*var) {

lcd_data(*var++); //till string ends delayms(1); //send characters one by one }} void LCD_cleardisplay() { lcd_cmd(0x01); P2_5=0; P2_4=1; P2_4=0; delayms(7); }void key_init(){ keyport &=0x1F; //make Rows as o/p and cols are i/p}unsigned char get_key(){ unsigned char i,k,key=0; k=1; for(i=0;i<3;i++){ //loop for 4 rows keyport &=~(0x80>>i); //to make rows low 1 by 1 if(!col1){ //check if key1 is pressed key = k+0; //set key number while(!col1); //wait for release

Page 10: Interfacing Gsm Module With Proteus

return key; //return key number } if(!col2){ //check if key2 is pressed key = k+1; //set key number while(!col2); //wait for release return key; //return key number } if(!col3){ //check if key3 is pressed key = k+2; //set key number while(!col3); //wait for release return key; //return key number } if(!col4){ //check if key4 is pressed key = k+3; //set key number while(!col4); //wait for release return key; //return key number } if(!col5){ //check if key4 is pressed key = k+4; //set key number while(!col5); //wait for release return key; //return key number } k+=3; //next row key number keyport |= 0x80>>i; //make the row high again } return 0;} unsigned char translate(unsigned char keyval){ if(keyval<10&&keyval>0) return keyval+'0'; else if(keyval>=10 && keyval < 15) return keyval - 10 + 'A'; else return '0';}

void password_init(){ LCD_cleardisplay(); LCD_sendstring("Enter new pass"); delayms(1); new_password_get();

Page 11: Interfacing Gsm Module With Proteus

}void new_password_get(){ int i; LCD_cleardisplay(); LCD_sendstring("Password:");

for(i=0;i<4;i++) { while(ascii_key=='0') { ascii_key = translate(get_key()); } y[i]=ascii_key; lcd_data('*'); ascii_key='0'; } }void password_match(){ int i; unsigned int flag=1; unsigned int msg_sent_count=1; for(i=0;i<4;i++) { if(y[i]==x[i]); else { LCD_cleardisplay(); flag=0; } } if(flag==1) { LCD_cleardisplay(); flag2=0; times_left=2; LCD_sendstring("Password match"); delayms(2); }

Page 12: Interfacing Gsm Module With Proteus

else if(flag==0&&times_left!=0) { { times_left--; flag2=1; LCD_cleardisplay(); //delayms(2); LCD_sendstring("Wrong Password"); //delayms(2); } } else if(flag==0&&times_left==0) { while(1) { flag2=1; LCD_cleardisplay(); LCD_sendstring("RED ALERT!!!"); delayms(5); if(msg_sent_count==1) { serial_send_string("AT+CMGF=1\r"); //sms initialization to enter Text mode from the PDU mode delayms(1); serial_send_string("AT+CMGS=\"+919971752464\"\r"); //sms is sent to be sent to this no. delayms(1); serial_send_string("Security breached!"); serial_send_string("0x1A"); //ctrl+z marks the end of message & it is delivered } } //send sms

//serial_send_string("AT+CMGS=1,1,0,0,0\r"); //setting configuration to send msg on serial port //delay(10000); }}

Page 13: Interfacing Gsm Module With Proteus

void password_get(){ int i; LCD_cleardisplay(); LCD_sendstring("Enter password"); delayms(5); LCD_cleardisplay(); LCD_sendstring("Password:");

for(i=0;i<4;i++) { while(ascii_key=='0') { ascii_key = translate(get_key()); } x[i]=ascii_key; lcd_data('*'); ascii_key='0'; } password_match();}