im also useing a 74HC595 shift register to control the segments ,
this is the code :
(code tags added by moderator)
int data = 2;
int latch = 4;
int clock = 3;
int digit_1 = 8;
int digit_2 = 9;
int digit_3 = 12;
int digit_4 = 11;
int DelayVal = 5;
int NumVal = B00000000;
void setup()
{
pinMode(data , OUTPUT);
pinMode(latch , OUTPUT);
pinMode(clock , OUTPUT);
pinMode(digit_1 , OUTPUT);
pinMode(digit_2 , OUTPUT);
pinMode(digit_3 , OUTPUT);
pinMode(digit_4 , OUTPUT);
}
void DigitsOff()
{
digitalWrite(digit_1 , LOW);
digitalWrite(digit_2 , LOW);
digitalWrite(digit_3 , LOW);
digitalWrite(digit_4 , LOW);
}
void DigitDisplay(int num)
{
switch(num)
{
case 0:
NumVal = B10000000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 1:
NumVal = B11110010;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 2:
NumVal = B01001000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 3:
NumVal = B01100000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 4:
NumVal = B00110010;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 5:
NumVal = B00100100;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 6:
NumVal = B00000100;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 7:
NumVal = B11110000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 8:
NumVal = B00000000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
case 9:
NumVal = B00110000;
digitalWrite(latch , LOW);
shiftOut(data , clock , MSBFIRST , NumVal);
digitalWrite(latch , HIGH);
break;
}
}
void SwitchDigit(int digit)
{
switch(digit)
{
case 1 :
digitalWrite(digit_1 , HIGH);
digitalWrite(digit_2 , LOW);
digitalWrite(digit_3 , LOW);
digitalWrite(digit_4 , LOW);
break;
case 2 :
digitalWrite(digit_1 , LOW);
digitalWrite(digit_2 , HIGH);
digitalWrite(digit_3 , LOW);
digitalWrite(digit_4 , LOW);
break;
case 3 :
digitalWrite(digit_1 , LOW);
digitalWrite(digit_2 , LOW);
digitalWrite(digit_3 , HIGH);
digitalWrite(digit_4 , LOW);
break;
case 4 :
digitalWrite(digit_1 , LOW);
digitalWrite(digit_2 , LOW);
digitalWrite(digit_3 , LOW);
digitalWrite(digit_4 , HIGH);
break;
}
}
void DisplayNumber(int num)
{
int a = num / 1000;
int b = (num / 100) % 10;
int d = (num / 10)% 10;
int c = num % 10;
SwitchDigit(1);
DigitDisplay(a);
delay(DelayVal);
SwitchDigit(2);
DigitDisplay(b);
delay(DelayVal);
SwitchDigit(3);
DigitDisplay(d);
delay(DelayVal);
SwitchDigit(4);
DigitDisplay(c);
delay(DelayVal);
}
void loop()
{
DisplayNumber(NumVal);
}