volatile char *portf,*outf,*portk,*outk,*porta,*portc,*rowa,*colc,temp =0x3F,out = 0x3F,temp1,temp2;
int a=0,b=0,track=0,choice=0,c=0,num1=0,num2=0,d=0,result=0,start=0,resultSize=0,Echeck=0,buttonPressed=0;
void row2();
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
porta = 0x21;
portc = 0x27;
*porta = 0xFF;
*portc = 0x00;
rowa = 0x22;
colc = 0x26;
portk = 0x107;
outk = 0x108;
portf = 0x30;
outf = 0x31;
*portf = 0xFF;
*portk = 0xFF;
*colc =0;
}
void Delay(){
for(volatile long int j=0;j<90000;j++);
return;
}
// row1
void row1(){
*rowa = 0x01;
switch(*colc){
case 0x01:
if(track==0 && choice==0){
a = 1;
num1 = a;
}
if(track==1 && choice==0){
b = 1;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 1;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 1;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 1;
num2 = a;
}
if(track==1 && choice!=0){
b = 1;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 1;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 1;
num2 = 1000*a +100*b + 10*c +d;
}
track++;
Delay();
break;
case 0x02:
if(track==0 && choice==0){
a = 2;
num1 = a;
}
if(track==1 && choice==0){
b = 2;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 2;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 2;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 2;
num2 = a;
}
if(track==1 && choice!=0){
b = 2;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 2;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 2;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x04:
if(track==0 && choice==0){
a = 3;
num1 = a;
}
if(track==1 && choice==0){
b = 3;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 3;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 3;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice !=0){
a = 3;
num2 = a;
}
if(track==1 && choice!=0){
b = 3;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 3;
num2 = 100*a +10*b +c;
}
if(track==3 && choice !=0){
d = 3;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
}
return;
}
void row2(){
*rowa = 0x02;
switch(*colc){
case 0x01:
if(track==0 && choice==0){
a = 4;
num1 = a;
}
if(track==1 && choice==0){
b = 4;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 4;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 4;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 4;
num2 = a;
}
if(track==1 && choice!=0){
b = 4;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 4;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 4;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x02:
if(track==0 && choice==0){
a = 5;
num1 = a;
}
if(track==1 && choice==0){
b = 5;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 5;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 5;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 5;
num2 = a;
}
if(track==1 && choice!=0){
b = 5;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 5;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 5;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x04:
if(track==0 && choice==0){
a = 6;
num1 = a;
}
if(track==1 && choice==0){
b = 6;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 6;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 6;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 6;
num2 = a;
}
if(track==1 && choice!=0){
b = 6;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 6;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 6;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
}
return;
}
void row3(){
*rowa = 0x04;
switch(*colc){
case 0x01:
if(track==0 && choice==0){
a = 7;
num1 = a;
}
if(track==1 && choice==0){
b = 7;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 7;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 7;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 7;
num2 = a;
}
if(track==1 && choice!=0){
b = 7;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 7;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 7;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x02:
if(track==0 && choice==0){
a = 8;
num1 = a;
}
if(track==1 && choice==0){
b = 8;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 8;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 8;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 8;
num2 = a;
}
if(track==1 && choice!=0){
b = 8;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 8;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 8;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x04:
if(track==0 && choice==0){
a = 9;
num1 = a;
}
if(track==1 && choice==0){
b = 9;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 9;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 9;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 9;
num2 = a;
}
if(track==1 && choice!=0){
b = 9;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 9;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 9;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x08:
choice =1;
track=0;
break;
}
return;
}
void row4(){
*rowa = 0x08;
switch(*colc){
case 0x02:
if(track==0 && choice==0){
a = 0;
num1 = a;
}
if(track==1 && choice==0){
b = 0;
num1 = a*10+b;
}
if(track==2 && choice==0){
c = 0;
num1 = 100*a + 10*b +c;
}
if(track==3 && choice==0){
d = 0;
num1 = 1000*a + 100*b + 10*c + d;
}
if(track==0 && choice!=0){
a = 0;
num2 = a;
}
if(track==1 && choice!=0){
b = 0;
num2 = a*10 +b;
}
if(track==2 && choice!=0){
c = 0;
num2 = 100*a +10*b +c;
}
if(track==3 && choice!=0){
d = 0;
num2 = 1000*a +100*b + 10*c + d;
}
track++;
Delay();
break;
case 0x04:
if(num2!=0){
start =1;
}
break;
}
return;
}
void loop() {
//Serial.println(*colc);
if(choice==1){
result = num1 * num2;
}
if(start==1){
//for 5 or more digits
if(result/10000!=0){
Echeck =1;
*outk = 0x00;
*outf = 121;
}
// for 4 digits
if(Echeck!=1){
if(result/1000!=0){
resultSize = 4;
a = result/1000;
b = result/100;
b = b%10;
c = result/10;
c = c%10;
d = result%10;
}
// for 3 digits
if(result/100!=0 && result/1000==0){
resultSize =3;
a = result/100;
b = result/10;
b = b%10;
c = result%10;
}
// for 2 digits
if(result/100==0){
resultSize = 2;
a = result / 10;
b = result % 10;
// Serial.println(result);
}
// for 1 digit
if(result/10==0){
resultSize=1;
a = result;
}
if(resultSize >=0){
switch(a){
case 0:
*outk = 254;
*outf = 0x3F;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 1:
*outk = 254;
*outf = 0x06;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 2:
*outk = 254;
*outf = 0x5B;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 3:
*outk = 254;
*outf = 0x4F;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 4:
*outk = 254;
*outf = 0x66;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 5:
*outk = 254;
*outf = 0x6D;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 6:
*outk = 254;
*outf = 0x7D;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 7:
*outk = 254;
*outf = 0x7D;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 8:
*outk = 254;
*outf = 0x7F;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 9:
*outk = 254;
*outf = 0x67;
temp=*outf;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
}
}
// switch b
if(resultSize>=2){
switch(b){
case 0:
*outk = 253;
*outf = 0x3F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 1:
*outk = 253;
*outf = 0x06;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 2:
*outk = 253;
*outf = 0x5B;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 3:
*outk = 253;
*outf = 0x4F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 4:
*outk = 253;
*outf = 0x66;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 5:
*outk = 253;
*outf = 0x6D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 6:
*outk = 253;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 7:
*outk = 253;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 8:
*outk = 253;
*outf = 0x7F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 9:
*outk = 253;
*outf = 0x67;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
}
}
// switch c
if(resultSize>=3){
switch(c){
case 0:
*outk = 251;
*outf = 0x3F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 1:
*outk = 251;
*outf = 0x06;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 2:
*outk = 251;
*outf = 0x5B;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 3:
*outk = 251;
*outf = 0x4F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 4:
*outk = 251;
*outf = 0x66;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 5:
*outk = 251;
*outf = 0x6D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 6:
*outk = 251;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 7:
*outk = 251;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 8:
*outk = 251;
*outf = 0x7F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 9:
*outk = 251;
*outf = 0x67;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
}
}
//
if(resultSize==4){
switch(d){
case 0:
*outk = 247;
*outf = 0x3F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 1:
*outk = 247;
*outf = 0x06;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 2:
*outk = 247;
*outf = 0x5B;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 3:
*outk = 247;
*outf = 0x4F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 4:
*outk = 247;
*outf = 0x66;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 5:
*outk = 247;
*outf = 0x6D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 6:
*outk = 247;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 7:
*outk = 247;
*outf = 0x7D;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 8:
*outk = 247;
*outf = 0x7F;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
case 9:
*outk = 247;
*outf = 0x67;
for(int i=0;i<100;i++);
*outk = 255;
*outf = 0x00;
for(int i=0;i<100;i++);
break;
}
}
}
}
row1();
row2();
row3();
row4();
}