char init_port(void);
char operation(void);
char init_port2(void);
char display(void);
int result,num1,num2,row,col,equals;
volatile long i,j;
char array[]={'1','2','3','+','4','5','6','-','7','8','9','/','c','0','=','*'};
volatile char *dirc,*dirf,*dirk,x,*dira,*ptr;
volatile char *outc,*outf,*ink,*outa;
char initialize(void);
char operation1;
char initialize()
{
dirc = 0x27;dirf=0x30;dirk = 0x107;dira=0x21;
outc=0x28;outf=0x31;ink=0x106;outa=0x22;
*dirf=0xff;*dirk=0x00;*dira=0xff;
}
char init_port()
{
int flag = 0;
while(flag != 1)
{
for(int i =0;i<4;i++)
{
*outf = 1<<i;
col = *ink;
if(*ink != 0)
{
*ptr=1<<i;
if(*ptr != 0)
{
row = *ptr;
}
}
if(col == 0b00000001 && row == 0b00000001)
{
*outa = 0x06;
num1=1;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000001)
{
*outa = 0x5b;
num1=2;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000001)
{
*outa = 0x4f;
num1=3;
delay(500);
*outa=0x00;
}
if(col == 0b00000001 && row == 0b00000010)
{
*outa = 0x66;
num1=4;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000010)
{
*outa = 0x6d;
num1=5;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000010)
{
*outa = 0x7d;
num1=6;
delay(500);
*outa=0x00;
}
if(col == 0b00000001 && row == 0b00000100)
{
*outa = 0x07;
num1=7;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000100)
{
*outa = 0x7f;
num1=8;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000100)
{
*outa = 0x6f;
num1=9;
delay(500);
*outa=0x00;
}
if(num1 !=0x00)
{
flag = 1;
}
}
}
}
char init_port2()
{
int flag = 0;
while(flag != 1)
{
for(int i =0;i<4;i++)
{
*outf = 1<<i;
col = *ink;
if(*ink != 0)
{
*ptr=1<<i;
if(*ptr != 0)
{
row = *ptr;
}
}
if(col == 0b00000001 && row == 0b00000001)
{
*outa = 0x06;
num2=1;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000001)
{
*outa = 0x5b;
num2=2;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000001)
{
*outa = 0x4f;
num2=3;
delay(500);
*outa=0x00;
}
if(col == 0b00000001 && row == 0b00000010)
{
*outa = 0x66;
num2=4;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000010)
{
*outa = 0x6d;
num2=5;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000010)
{
*outa = 0x7d;
num2=6;
delay(500);
*outa=0x00;
}
if(col == 0b00000001 && row == 0b00000100)
{
*outa = 0x07;
num2=7;
delay(500);
*outa=0x00;
}
if(col == 0b00000010 && row == 0b00000100)
{
*outa = 0x7f;
num2=8;
delay(500);
*outa=0x00;
}
if(col == 0b00000100 && row == 0b00000100)
{
*outa = 0x6f;
num2=9;
delay(500);
*outa=0x00;
}
if(num2 !=0x00)
{
flag = 1;
}
}
}
}
char operation()
{
int flag = 0;
while(flag != 1)
{
for(int i =0;i<4;i++)
{
*outf = 1<<i;
col = *ink;
if(*ink != 0)
{
*ptr=1<<i;
if(*ptr != 0)
{
row = *ptr;
}
}
if(col == 0b00001000 && row == 0b00000001)
{
operation1 = 1;
}
if(col = 0b00001000 && row == 0b00000010)
{
operation1 = 2;
}
if(col = 0b00001000 && row == 0b00000100)
{
operation1 = 3;
}
if(col = 0b00001000 && row == 0b00001000)
{
operation1 = 4;
}
if(operation1 !=0)
{
flag = 1;
}
}
}
}
char display()
{
volatile char *ddra,*outa;
ddra = 0x21;
outa=0x22;
*ddra=0xff;
if(operation1 ==1)
{
result = num1+num2;
}
if(operation1 ==2)
{
result = num1-num2;
}
if(operation1 ==3)
{
result = num1*num2;
}
if(operation1 ==4)
{
result = num1/num2;
}
int flag = 0;
while(flag != 1)
{
for(int i =0;i<4;i++)
{
*outf = 1<<i;
col = *ink;
if(*ink != 0)
{
*ptr=1<<i;
if(*ptr != 0)
{
row = *ptr;
}
}
if(col == 0b00000100 && row == 0b00001000)
{
equals = 1;
}
if(equals !=0)
{
flag = 1;
}
}
}
if(equals == 1 && result == 0)
{
*outa=0x3f;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 1)
{
*outa=0x06;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 2)
{
*outa=0x5b;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 3)
{
*outa=0x4f;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 4)
{
*outa=0x66;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 5)
{
*outa=0x6d;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 6)
{
*outa=0x7d;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 7)
{
*outa=0x07;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 8)
{
*outa=0x7f;
delay(500);
*outa=0x00;
}
if(equals == 1 && result == 9)
{
*outa=0x6f;
delay(500);
*outa=0x00;
}
}
void setup() {
initialize();
init_port();
operation();
init_port2();
display();
delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
}