#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;
}