int anode[4]={6,8,9,12};
int cath[7]={11,7,4,2,13,10,5};
unsigned short time=0;
void setup(){
for(short i=2;i<=13;i++)
pinMode(i,OUTPUT);
}
short count(short n){
short count=0;
while(n!=0){
n/=10;
count+=1;
}
return count;
}
void reset(){
for(short i=0;i<=6;i++){
digitalWrite(*(cath+i),HIGH);
}
}
void display(int n) {
reset();
if(n==1||n==7){
digitalWrite(7,LOW);
digitalWrite(4,LOW);
if(n==7){digitalWrite(11,LOW);}
}
for(short i=0;i<=6;i++){
if(n==1||n==7){break;}
if(n==0&& *(cath+i)==5){continue;}
if(n==2&&(*(cath+i)==4||*(cath+i)==10)){continue;}
if(n==3&&(*(cath+i)==13||*(cath+i)==10)){continue;}
if(n==4&&(*(cath+i)==11||*(cath+i)==2||*(cath+i)==13)){continue;}
if(n==5&&(*(cath+i)==13||*(cath+i)==7)){continue;}
if(n==6 && *(cath+i)==7){continue;}
if(n==9 && *(cath+i)==13){continue;}
digitalWrite(*(cath+i),LOW);
}
}
void loop(){
short val=9999;
while(val!=0){
short dup=val;
short sum=count(dup);
for(short i=0;i<=sum;i++){
short temp=dup%10;
dup/=10;
display(temp);
digitalWrite(anode[i],HIGH);
delay(25);
digitalWrite(anode[i],LOW);
}
if((millis()-time)>=1000){
val--;
time=millis();
}
}
}