#include "ecen.h"
void setup() {
// put your setup code here, to run once:
volatile char *dirf,*dirk,*dira,*dird;
dira=0x21;
dird=0x2a;
dirf=0x30;
dirk=0x107;
*dira=0xff;
*dird=0x0f;
*dirf=0x0f;
*dirk=0x00;
}
void loop() {
// put your main code here, to run repeatedly:
volatile char *outf,*ink,*outa,*outd;
outf=0x31;
ink=0x106;
outa=0x22;
outd=0x2b;
volatile char readInput,flag1=0,flag2=0,firstnumber=0,secondnumber=0,sumflag=0,subflag=0,prodflag=0,divflag=0,modflag=0,eflag=0,negflag=0;
volatile long number1=0,number2=0,no1=0,no2=0,sum=0,sub=0,prod=0,div=0,mod=0,first,second,third,fourth,count;
while(1){
for(volatile long i=0;i<4;i++){
*outf=1<<i;
readInput=*ink;
if(readInput){
for(volatile long j=0;j<160000;j++);
if(flag1==0 && flag2==0){
*outd=0x0f;
firstnumber=digits(*outf,readInput);
no1=numbers(firstnumber);
number1=(number1*10)+no1;
*outa=firstnumber;
*outd=0x0e;
if(*outf==0x02 && readInput==0x08){
for(volatile long j=0;j<3000;j++);
flag1=2;
number1/=10;
}
}
else if(flag1 && flag2==0){
*outd=0x0f;
secondnumber=digits(*outf,readInput);
no2=numbers(secondnumber);
number2=(number2*10)+no2;
*outa=secondnumber;
*outd=0x0d;
if(*outf==0x08 && readInput==0x04){
for(volatile long j=0;j<3000;j++);
flag2=1;
number2/=10;
break;
}
}
}
}
if(flag2){
if(flag1==2){
sub=number1-number2;
count=countNumbers(sub);
if(sub<10000 && sub>0){
first=sub/1000;
second=(sub%1000)/100;
third=(sub%100)/10;
fourth=sub%10;
eflag=0;
subflag=1;
break;
}
else if(sub<0){
sub=-sub;
count=countNumbers(sub);
first=sub/1000;
second=(sub%1000)/100;
third=(sub%100)/10;
fourth=sub%10;
eflag=0;
negflag=1;
subflag=1;
break;
}
else{
subflag=1;
eflag=1;
break;
}
}
}
}
if(subflag){
if(eflag==0){
if(negflag==0) outputs(count,first,second,third,fourth);
else if(negflag==1){
outputNeg(count,first,second,third,fourth);
}
}
else if(eflag) printE();
}
}