You are on page 1of 26

#include<avr/io.

h>

#include<util/delay.h>

#include<compat/deprecated.h>

#include<avr/interrupt.h>

#include <avr/sleep.h>

#include <stdio.h>

#include <stdlib.h>

#include<inttypes.h>

#define SCLK 0

#define SDIN 1

#define DC 2

#define SCE 3

#define RST 4

void lcd_cmd(char);

void lcd_data(char);

void lcd_clear(void);

void lcd_init(void);

void lcd_string(char*ptr);

void lcd_position(char);

void lcd_gotoxy(char,char);

void welcome_note(void);

void usart_init(void);

void usart_string(char *str);

void usart_transmit(char dat);


void touchscreen_scan(void);

void modem_chk(void);

void condition_chk(void);

void network_init(void);

void poweron_rtc(void);

void poweron_rtcedit(void);

void rtc_read(void);

void calling_fun(void);

void dial_fun(void);

void incoming_chk(void);

void display_innum(void);

void send_sms_fun(void);

void sms_read_fun(void);

int x,y,l,l1; //for touch screen data receiving

char b[100],a[10],dial[20],incomnum[20];

char Receivedbyte,touchrecv,touchstore;

int ts,k,start,d,num,fkey=0,fring=0,fans;

char frtc=0;

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

char ltab[96][5]={

{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //sp

{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !

{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "

{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #

{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $

{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %

{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // &


{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // '

{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (

{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )

{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *

{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +

{ 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,

{ 0x10, 0x10, 0x10, 0x10, 0x10 }, // -

{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // .

{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // /

{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0

{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1

{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2

{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3

{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4

{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5

{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6

{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7

{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8

{ 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9

{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // :

{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;

{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // <

{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // =

{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // >

{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?

{ 0x32, 0x49, 0x59, 0x51, 0x3E }, // @

{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A

{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B

{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C

{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D


{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E

{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F

{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G

{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H

{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I

{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J

{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K

{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L

{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M

{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N

{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O

{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P

{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q

{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R

{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S

{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T

{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U

{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V

{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W

{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X

{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y

{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z

{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [

{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55

{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]

{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^

{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _

{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // '

{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a

{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b


{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c

{ 0x38, 0x44, 0x44, 0x48, 0x7F }, // d

{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e

{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f

{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g

{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h

{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i

{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j

{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k

{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l

{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m

{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n

{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o

{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p

{ 0x08, 0x14, 0x14, 0x18, 0x7C }, // q

{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r

{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s

{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t

{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u

{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v

{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w

{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x

{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y

{ 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z

};

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

typedef struct {

int x;

int y;
}touch;

touch Get_Touch_Coordinate(void);

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

int main (void)

DDRC = 0xFF;

lcd_init();

lcd_clear();

welcome_note();

usart_init();

modem_chk();

poweron_rtc();

a[ts]=0x0a;

poweron_rtcedit();

network_init();

a[ts]=0x0a;

d=0;

lcd_gotoxy(0x44,0x80);

frtc=0;

while(1)

touchscreen_scan();

k=0;
incoming_chk();

if(fring==1)

display_innum();

if(fkey==1)

frtc=1;

calling_fun();

if(frtc==0)

rtc_read();

send_sms_fun();

_delay_ms(100);

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

void display_innum(void)

fring=0;

lcd_gotoxy(0x44,0x80);

lcd_string("InCom Call... ");

k=0;

usart_string("AT+CLIP=1");

usart_transmit(0x0D);

_delay_ms(500);
k=21;

num=0;

do

incomnum[num]=b[k];

k++;

num++;

while(b[k]!=0x2c);

lcd_gotoxy(0x45,0x80);

num=0;

do

lcd_position(incomnum[num]);

num++;

while(incomnum[num]!=0x22);

_delay_ms(1000);

frtc=0;

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

void calling_fun(void)

fkey=0;

if(a[ts]==0x2B)

dial[d]=';';
d++;

dial[d]=0x0D;

d++;

dial[d]=0x00;

dial_fun();

if(a[ts]==0x2D)

lcd_gotoxy(0x44,0x80);

lcd_string("Call End... ");

lcd_gotoxy(0x45,0x80);

lcd_string(" ");

usart_string("ATH");

usart_transmit(0x0D);

_delay_ms(500);

d=0;

while(d==15)

dial[d]=0;

d++;

d=0;

_delay_ms(100);
lcd_gotoxy(0x44,0x80);

lcd_string(" ");

lcd_gotoxy(0x44,0x80);

frtc=0;

else

dial[d]=a[ts];

d++;

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

void dial_fun(void)

k=0;

usart_string("AT+SPEAKER=1");

usart_transmit(0x0D);

_delay_ms(100);

lcd_gotoxy(0x44,0x80);

lcd_string("Calling... ");

lcd_gotoxy(0x45,0x80);

usart_string("ATD");

_delay_ms(10);

d=0;

while(dial[d]!=0x00)
{

usart_transmit(dial[d]);

lcd_position(dial[d]);

_delay_ms(10);

d++;

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

void incoming_chk(void)

k=2;

if((b[2]=='R')&(b[3]=='I')&(b[4]=='N')&(b[5]=='G'))

fring=1;

//lcd_gotoxy(0x43,0x80);

//lcd_string("ring test ");

else

k=0;

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

void send_sms_fun(void)

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

void rtc_read(void)
{

k=0;

usart_string("AT+CCLK?");

usart_transmit(0x0D);

_delay_ms(1000);

lcd_gotoxy(0x42,0x95);

k=10;

do

lcd_position(b[k]);

k++;

while(b[k]!=0x2c);

k++;

lcd_gotoxy(0x40,0xA5);

do

lcd_position(b[k]);

k++;

while(b[k]!=0x22);

lcd_gotoxy(0x44,0x80);

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

void touchscreen_scan(void)

touch TS_val;
TS_val=Get_Touch_Coordinate();

if((TS_val.x>=800)&&(TS_val.x<=915)) //FIRST ROW

if((TS_val.y>=877)&&(TS_val.y<=938))lcd_position('1');

else if((TS_val.y>=790)&&(TS_val.y<=856))lcd_position('2');

else if((TS_val.y>=711)&&(TS_val.y<=777))lcd_position('3');

else if((TS_val.y>=627)&&(TS_val.y<=691))lcd_position('4');

else if((TS_val.y>=553)&&(TS_val.y<=606))lcd_position('5');

else if((TS_val.y>=465)&&(TS_val.y<=526))lcd_position('6');

else if((TS_val.y>=384)&&(TS_val.y<=445))lcd_position('7');

else if((TS_val.y>=295)&&(TS_val.y<=364))lcd_position('8');

else if((TS_val.y>=215)&&(TS_val.y<=295))lcd_position('9');

else if((TS_val.y>=134)&&(TS_val.y<=194))lcd_position('0');

fkey=1;

if((TS_val.x>=660)&&(TS_val.x<=777)) //SECOND ROW

if((TS_val.y>=877)&&(TS_val.y<=938))lcd_position('Q');

else if((TS_val.y>=790)&&(TS_val.y<=856))lcd_position('W');

else if((TS_val.y>=711)&&(TS_val.y<=777))lcd_position('E');

else if((TS_val.y>=627)&&(TS_val.y<=691))lcd_position('R');

else if((TS_val.y>=553)&&(TS_val.y<=606))lcd_position('T');

else if((TS_val.y>=465)&&(TS_val.y<=526))lcd_position('Y');

else if((TS_val.y>=384)&&(TS_val.y<=445))lcd_position('U');

else if((TS_val.y>=295)&&(TS_val.y<=364))lcd_position('I');

else if((TS_val.y>=215)&&(TS_val.y<=295))lcd_position('O');

else if((TS_val.y>=134)&&(TS_val.y<=194))lcd_position('P');

fkey=1;
}

if((TS_val.x>=485)&&(TS_val.x<=600)) //THIRD ROW

if((TS_val.y>=840)&&(TS_val.y<=895))lcd_position('A');

else if((TS_val.y>=756)&&(TS_val.y<=815))lcd_position('S');

else if((TS_val.y>=676)&&(TS_val.y<=735))lcd_position('D');

else if((TS_val.y>=601)&&(TS_val.y<=653))lcd_position('F');

else if((TS_val.y>=508)&&(TS_val.y<=575))lcd_position('G');

else if((TS_val.y>=426)&&(TS_val.y<=485))lcd_position('H');

else if((TS_val.y>=345)&&(TS_val.y<=401))lcd_position('J');

else if((TS_val.y>=265)&&(TS_val.y<=323))lcd_position('K');

else if((TS_val.y>=185)&&(TS_val.y<=235))lcd_position('L');

fkey=1;

if((TS_val.x>=312)&&(TS_val.x<=424)) //FOURTH ROW

if((TS_val.y>=852)&&(TS_val.y<=933))lcd_position('+');

else if((TS_val.y>=763)&&(TS_val.y<=812))lcd_position('Z');

else if((TS_val.y>=671)&&(TS_val.y<=735))lcd_position('X');

else if((TS_val.y>=591)&&(TS_val.y<=651))lcd_position('C');

else if((TS_val.y>=508)&&(TS_val.y<=571))lcd_position('V');

else if((TS_val.y>=426)&&(TS_val.y<=485))lcd_position('B');

else if((TS_val.y>=345)&&(TS_val.y<=401))lcd_position('N');

else if((TS_val.y>=265)&&(TS_val.y<=325))lcd_position('M');

else if((TS_val.y>=145)&&(TS_val.y<=225))lcd_position('-');

fkey=1;

}
if((TS_val.x>=145)&&(TS_val.x<=252)) //FIFTH ROW

if((TS_val.y>=847)&&(TS_val.y<=933))lcd_position('/');

else if((TS_val.y>=748)&&(TS_val.y<=830))lcd_position(':');

else if((TS_val.y>=353)&&(TS_val.y<=720))lcd_position(' ');

else if((TS_val.y>=145)&&(TS_val.y<=325))lcd_clear();

fkey=1;

else

{}

_delay_ms(500);

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

touch Get_Touch_Coordinate(void)

touch val;

DDRA=0x03;

cbi(PORTA,0);

sbi(PORTA,1);

_delay_ms(10);

ADMUX = 0x03;

ADCSRA =0XC5;

while(ADCSRA & (1 << ADSC));

l = ADCL;

y = ADCH & 0x03;

y = y << 8;

y = y + l;
DDRA = 0x0C;

cbi(PORTA,2);

sbi(PORTA,3);

_delay_ms(10);

ADMUX = 0x01;

ADCSRA = 0xC5;

while(ADCSRA & (1 << ADSC));

l1 = ADCL;

x = ADCH & 0x03;

x = x << 8;

x = x + l1;

val.x=x;

val.y=y;

return val;

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

ISR(USART_RXC_vect)

Receivedbyte = UDR;

b[k]=Receivedbyte;

k++;

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

void poweron_rtc(void)

{
k=0;

usart_string("AT+CCLK?");

usart_transmit(0x0D);

_delay_ms(100);

lcd_clear();

lcd_gotoxy(0x42,0x95);

k=10;

do

lcd_position(b[k]);

k++;

while(b[k]!=0x2c);

k++;

lcd_gotoxy(0x40,0xA5);

do

lcd_position(b[k]);

k++;

while(b[k]!=0x22);

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

void poweron_rtcedit(void)

k=0;

usart_string("AT+CCLK=");

usart_transmit(0x22);
lcd_gotoxy(0x42,0x95);

do

touchscreen_scan();

if((a[ts]>=0x20)&&(a[ts]<=0x59))

if(a[ts]==0x20)

else

//lcd_position(a[ts]);

usart_transmit(a[ts]);

a[ts]=0x0a;

while(a[ts]!=0x20);

a[ts]=0x0a;

usart_transmit(0x2c);

lcd_gotoxy(0x40,0xA5);

a[ts]=0x0a;

do

touchscreen_scan();

if((a[ts]>=0x20)&&(a[ts]<=0x59))

if(a[ts]==0x20)
{

else

//lcd_position(a[ts]);

usart_transmit(a[ts]);

a[ts]=0x0a;

while(a[ts]!=0x20);

usart_transmit(0x22);

usart_transmit(0x0D);

_delay_ms(500);

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

void network_init(void)

k=0;

usart_string("AT+COPS=0");

usart_transmit(0x0D);

_delay_ms(100);

k=0;

usart_string("AT+COPS=3,0");

usart_transmit(0x0D);

_delay_ms(100);
k=0;

usart_string("AT+COPS?");

usart_transmit(0x0D);

_delay_ms(100);

lcd_gotoxy(0x41,0x9A);

k=14;

do

lcd_position(b[k]);

k++;

while(b[k]!=0x22);

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

void modem_chk(void)

do

k=0;

usart_string("AT");

usart_transmit(0x0D);

_delay_ms(100);

condition_chk();

while(start!=1);

_delay_ms(1000);

}
/**************************************/

void condition_chk(void)

if((b[2]=='O')&(b[3]=='K'))

lcd_clear();

lcd_string("Modem Tested");

_delay_ms(500);

start=1;

else

lcd_gotoxy(0x40,0x80);

lcd_string("Modem Testing");

start=0;

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

void usart_string(char *str)

while(*str)

usart_transmit(*str);

str++;

k=0;

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

void usart_transmit(char dat)

{
while(!(UCSRA & 0x20));

UDR = dat;

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

void usart_init(void)

UCSRB = 0x98;

UCSRC = 0x06;

UBRRL = 0x67;

UBRRH = 0x00;

sei();

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

void welcome_note(void)

lcd_string("************");

lcd_gotoxy(0x41,0x99);

lcd_string("RaviTeja");

lcd_gotoxy(0x42,0x99);

lcd_string("UDAY KIRAN");

lcd_gotoxy(0x43,0x80);

lcd_string("************");

_delay_ms(3000);

lcd_clear();

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

void lcd_string(char*ptr)

while(*ptr)
{

lcd_position(*ptr);

ptr++;

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

void lcd_position(char data)

touchrecv=data;

unsigned char pos;

unsigned int n;

pos=data-0x20;

for(n=0;n<5;n++)

lcd_data(ltab[pos][n]);

lcd_data(0x00);

a[ts]=touchrecv;

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

void lcd_init(void)

sbi(PORTC,RST);

_delay_us(5);

cbi(PORTC,RST);

_delay_us(5);

sbi(PORTC,RST);

lcd_cmd(0x21);

lcd_cmd(0x13);
lcd_cmd(0x06);

lcd_cmd(0xc8);

lcd_cmd(0x20);

lcd_cmd(0x0c);

lcd_cmd(0x40);

lcd_cmd(0x80);

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

void lcd_cmd(char temp)

unsigned int i;

cbi(PORTC,DC);

cbi(PORTC,SCE);

cbi(PORTC,SCLK);

for(i=0;i<8;i++)

if(temp&0x80)

sbi(PORTC,SDIN);

else

cbi(PORTC,SDIN);

sbi(PORTC,SCLK);

_delay_us(5);

cbi(PORTC,SCLK);

temp=temp<<1;

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

void lcd_data(char temp)

unsigned int i;
sbi(PORTC,DC);

cbi(PORTC,SCE);

cbi(PORTC,SCLK);

for(i=0;i<8;i++)

if(temp&0x80)

sbi(PORTC,SDIN);

else

cbi(PORTC,SDIN);

sbi(PORTC,SCLK);

_delay_us(5);

cbi(PORTC,SCLK);

temp=temp<<1;

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

void lcd_clear(void)

unsigned int j;

for(j=0;j<=504;j++)

lcd_data(0x00);

lcd_gotoxy(0x40,0x80);

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

void lcd_gotoxy(char x,char y)

lcd_cmd(x);

lcd_cmd(y);
}

You might also like