#include <MsTimer2.h>
#define segA 12 
#define segB 2 
#define segC 7
#define segD 9
#define segE 10
#define segF 11 
#define segG 6 
#define segDP 8
#define digit1 13 
#define digit2 4 
#define digit3 3 
#define digit4 5 

int fndDigit[4] = {digit1, digit2 ,digit3 ,digit4};

int fndPort[8] = {segA, segB, segC, segD, segE, segF, segG, segDP};

int fndData[11][8] = {
                    { 0, 0, 0, 0, 0, 0, 1, 1 }, // 0
                    { 1, 0, 0, 1, 1, 1, 1, 1 }, // 1
                    { 0, 0, 1, 0, 0, 1, 0, 1 }, // 2
                    { 0, 0, 0, 0, 1, 1, 0, 1 }, // 3
                    { 1, 0, 0, 1, 1, 0, 0, 1 }, // 4
                    { 0, 1, 0, 0, 1, 0, 0, 1 }, // 5
                    { 0, 1, 0, 0, 0, 0, 0, 1 }, // 6
                    { 0, 0, 0, 1, 1, 0, 1, 1 }, // 7
                    { 0, 0, 0, 0, 0, 0, 0, 1 }, // 8
                    { 0, 0, 0, 0, 1, 0, 0, 1 }, // 9
                    { 1, 1, 1, 1, 1, 1, 1, 1 }, // 10 - blank
                };   

int iflag = 0;
 
void setup(){
    // 1000ms 
    MsTimer2::set(10, myTimer);
    MsTimer2::start();
    // 7 Segment 
    for(int i = 0 ; i < 4 ; i++)
    {
        pinMode(fndDigit[i], OUTPUT);
        digitalWrite(fndDigit[i], LOW);
    }
    for(int i = 0 ; i < 8 ; i++)
    {
        pinMode(fndPort[i],OUTPUT);
        digitalWrite(fndPort[i],HIGH);
    }
}
 
void loop(){
    static int iCount = 0;
 
    
    if (iflag == 1)
    {
        if (iCount == 10000) {
            iCount = 0;
        }
        else {
            iCount++;
        }
        iflag = 0;
    }
 
    // 4자리수에 각각 입력 될 숫자 입력
    int digit1st = iCount / 1000;
    int digit2nd = iCount % 1000 / 100;
    int digit3rd = iCount % 100 / 10;
    int digit4th = iCount % 10;
    // for 문을 돌리기 위해 배열을 사용
    int digitData[4] = {digit1st, digit2nd, digit3rd, digit4th};
 
    for(int i = 0 ; i < 4 ; i++)
    {
        // 모든 Digit 1~4 핀 Off
        digitalWrite(digit1,LOW);
        digitalWrite(digit2,LOW);
        digitalWrite(digit3,LOW);
        digitalWrite(digit4,LOW);
 
        // 각 Digit 에 맞는 fnd 숫자의 값 입력
        for(int j= 0 ;j<8;j++)
        {
            digitalWrite(fndPort[j], fndData[digitData[i]][j]); 
            // 소수점 구분 점 찍기
            if(i==1) digitalWrite(fndPort[7], 0);
        }
 
        // Digit On
        digitalWrite(fndDigit[i],HIGH);
        delay(2);
    }
}
 
// 10ms 
void myTimer(){
    iflag = 1;
}