#include"functions.h"
void setup()
{
init_port();
double_digit_addition();
}
void double_digit_addition()
{
volatile unsigned char nums[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x79/*E*/};
volatile unsigned char i,j=0,flag=0,n_1_d_1 = 0,n_1_d_2 = 0,n_1_d_3 = 0,n_1_d_4 = 0,number_of_numbers = 0;
volatile long sum = 0,number_1 = 0,number_2 = 0;
while(1)
{
for(i=0;i<4;i++)
{
outl(1<<i);
if((inb() != 0)&(inb() != 0x08))
{
switch(flag)
{
case 0: n_1_d_1 = entered_num(i,inb()); flag++; delay1(2); break;
case 1: n_1_d_2 = entered_num(i,inb()); flag++; delay1(2); break;
case 2: n_1_d_3 = entered_num(i,inb()); flag++; delay1(2); break;
case 3: n_1_d_4 = entered_num(i,inb()); flag++; delay1(2); break;
}
}
if((i == 3) & (inb() == 0x08))
{
switch(flag)
{
case 1: // SINGLE DIGIT NUMBER
switch(number_of_numbers)
{
case 0: number_1 = n_1_d_1; n_1_d_1 = 0; number_of_numbers++; flag = 0; break;
case 1: number_2 = n_1_d_1; n_1_d_1 = 0; number_of_numbers++; flag = 0; break;
}
break;
case 2: // DOUBLE DIGIT NUMBER
switch(number_of_numbers)
{
case 0: number_1 = ((n_1_d_1)*10)+(n_1_d_2);
n_1_d_1 = 0; n_1_d_2 = 0;
number_of_numbers++;
flag = 0;
break;
case 1: number_2 = ((n_1_d_1)*10)+(n_1_d_2);
n_1_d_1 = 0; n_1_d_2 = 0;
number_of_numbers++;
flag = 0;
break;
}
break;
case 3: // TRIPLE DIGIT NUMBER
switch(number_of_numbers)
{
case 0: number_1 = ((n_1_d_1)*100)+((n_1_d_2)*10)+(n_1_d_3);
n_1_d_1 = 0; n_1_d_2 = 0; n_1_d_3 = 0;
number_of_numbers++;
flag = 0;
break;
case 1: number_2 = ((n_1_d_1)*100)+((n_1_d_2)*10)+(n_1_d_3);
n_1_d_1 = 0; n_1_d_2 = 0; n_1_d_3 = 0;
number_of_numbers++;
flag = 0;
break;
}
break;
case 4: // FOUR DIGIT NUMBER
switch(number_of_numbers)
{
case 0: number_1 = ((n_1_d_1)*1000)+((n_1_d_2)*100)+((n_1_d_3)*10)+(n_1_d_4);
n_1_d_1 = 0; n_1_d_2 = 0; n_1_d_3 = 0; n_1_d_4 = 0;
number_of_numbers++;
flag = 0;
break;
case 1: number_2 = ((n_1_d_1)*1000)+((n_1_d_2)*100)+((n_1_d_3)*10)+(n_1_d_4);
n_1_d_1 = 0; n_1_d_2 = 0; n_1_d_3 = 0; n_1_d_4 = 0;
number_of_numbers++;
flag = 0;
break;
}
break;
}
}
if(number_of_numbers == 2)
{
sum = number_1 + number_2;
if((sum >= 0) & (sum < 10))// single digit
{
outf(nums[sum]); break;
}
if((sum >= 10) & (sum < 100)) // double digit
{
outk(nums[(sum/10)%10]); outf(nums[sum%10]);
}
if((sum >=100) & (sum < 1000)) // triple digit
{
outa(nums[(sum/100)]); outk(nums[(sum/10)%10]); outf(nums[sum%10]); break;
}
if((sum>=1000) & (sum <10000)) // four digit
{
outc(nums[sum/1000]); outa(nums[(sum/100)%10]); outk(nums[(sum/10)%10]); outf(nums[sum%10]); break;
}
if(sum >= 10000)
{
outc(nums[11]); outa(nums[11]); outk(nums[11]); outf(nums[11]); break;
}
}
}
}
}
void loop()
{
// put your main code here, to run repeatedly:
}