volatile static unsigned long operator_sign=0,d=0;
volatile static long i=0,y=0;
volatile char buffer[20];
void unsigned_long_to_string(unsigned long num,char *buffer);

#include "suryaa.h"
void setup()
{
  pin_configure();
  init_lcd();
  display_welcome_message();
  display_calculator_features();
  display_instruction_manual();
  display_start_message();
}

void loop()
{
  init2_lcd();
  volatile unsigned long a=0,b=0,c=0,m;
  volatile float x=0.00;
  a=digit_press1();
  for(m=0;m<50000;m++);
  if(i <= 5)
  {
    for(m=0;m<50000;m++);
  b=digit_press2();
  
  if(operator_sign==1)
  {
    c=a+b;
   //  sprintf(buffer, "%lu", c);
   unsigned_long_to_string(c,buffer);
              write_string(buffer);
              clear_buffer();
  }
  else if(operator_sign==5)
  {
    out_data(0x01);
  lcd_control_write();
  out_data(0x80);
  lcd_control_write();
  write_string("out_of_bound..!!");
  out_data(0xc0);
  lcd_control_write();
  write_string("press[*]=> RESET");
  }
  
  else if(operator_sign==2)
  {
    if(a>b)
    {
      c=a-b;
         unsigned_long_to_string(c,buffer);
         write_string(buffer);
         clear_buffer();
    }
    else if(a==b)
    {
     unsigned_long_to_string(c,buffer);
              write_string(buffer);
              clear_buffer();
    }
    else
    {
      c=b-a;
      write_string("-");
      unsigned_long_to_string(c,buffer);
      write_string(buffer);
      clear_buffer();
    }
  }
  else if(operator_sign==3)
  {
    c=a*b;
     unsigned_long_to_string(c,buffer);
              write_string(buffer);
              clear_buffer();
  }
  else if(operator_sign==4)
  {
    x=(float)a/(float)b;
    dtostrf(x, 4, 2, buffer);
    write_string(buffer);
    clear_buffer();
    write_string("(approx)");
  }
  
    volatile long k=0;
    y=0;
    i=0;
  operator_sign=0;
  check_reset();
  for(k=0;k<50000;k++);

  }
else
{
  volatile long k=0;
i=0;
operator_sign=0;
out_data(0x01);
  lcd_control_write();
  out_data(0x80);
  lcd_control_write();
  write_string("out_of_bound..!!");
  out_data(0xc0);
  lcd_control_write();
  write_string("press[*]=> RESET");
  for(k=0;k<50000;k++);
 check_reset();
}
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
lcd1:VSS
lcd1:VDD
lcd1:V0
lcd1:RS
lcd1:RW
lcd1:E
lcd1:D0
lcd1:D1
lcd1:D2
lcd1:D3
lcd1:D4
lcd1:D5
lcd1:D6
lcd1:D7
lcd1:A
lcd1:K
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2