below is my full code...i posted some explanation in a few posts previous to this in regards to some of the functions
basically for each digit, (except 1 and 7), it has to switch the high and low twice...with a delay(5) of between switches for displaying. this is done in "show_num"
Function descriptions:
show_num(a,b,c,d) - shows digits specified in args
clearSegments() - resets all pins to low
swapGround() - switches the voltages
clearRegisters() - resets registered pins to low
setRegisterPin() - set a register pin to high or low
writeRegisters() - update display with updated register
/*
Arduino pins 2,3,4,5,6,7 - (handling pins 16-21 from display)
Arduino pins 8, 9, 10 - 74HC595 8 bit shift register (handling 5,6,9,10,12,13,14,15 pins from display)
Arduino pin 11 - Two center dots (pin 30 from display)
Arduino pin 12, 13 - ground 1 (pin 1) + ground 2 (pin 2)
*/
//How many of the shift registers - change this
#define number_of_74hc595s 1
//do not touch
#define numOfRegisterPins number_of_74hc595s * 8
boolean registers[numOfRegisterPins];
int const ledLength = 6;
int ledPins[ledLength] = {2,3,4,5,6,7};
int dotsPin = 11;
int SER_Pin = 8; //pin 14 on the 75HC595
int RCLK_Pin = 9; //pin 12 on the 75HC595
int SRCLK_Pin = 10; //pin 11 on the 75HC595
int ground1 = 12;
int ground2 = 13;
void setup(){
for (int x=0; x<ledLength; x++){
pinMode(ledPins[x], OUTPUT);
}
// Serial.begin(9600);
pinMode(dotsPin, OUTPUT);
pinMode(SER_Pin, OUTPUT);
pinMode(ground1, OUTPUT);
pinMode(ground2, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
pinMode(dotsPin, OUTPUT);
//reset all register pins
clearRegisters();
writeRegisters();
}
void show_num(int a,int b,int c,int d){
//turn on dots
clearSegments();
swapGround(ground1);
digitalWrite(dotsPin, HIGH);
delay(5);
switch (a){
case 1:
clearSegments();
swapGround(ground2);
setRegisterPin(5, HIGH); //with g2,
setRegisterPin(6, HIGH);
writeRegisters();
delay(5);
break;
}
switch (b){
case 0:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
//setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(5, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
case 1:
clearSegments();
swapGround(ground2);
setRegisterPin(3, HIGH); //with g2,
setRegisterPin(4, HIGH);
writeRegisters();
delay(5);
break;
case 2:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(5, HIGH);
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 3:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 4:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 5:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 6:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(5, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 7:
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
break;
case 8:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(5, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
//setRegisterPin(5, HIGH); //with g2
writeRegisters();
delay(5);
case 9:
clearSegments();
swapGround(ground1);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
writeRegisters();
delay(5);
clearSegments();
swapGround(ground2);
//bottom right
setRegisterPin(2, HIGH); //with g2
setRegisterPin(3, HIGH); //with g2
setRegisterPin(4, HIGH); //with g2
writeRegisters();
delay(5);
break;
}
switch (c){
case 1:
clearSegments();
swapGround(ground2);
digitalWrite(ledPins[2], HIGH);
setRegisterPin(0, HIGH);
writeRegisters();
delay(5);
break;
}
switch (d){
case 1:
clearSegments();
swapGround(ground1);
digitalWrite(ledPins[5], HIGH);
digitalWrite(ledPins[2], HIGH);
delay(5);
break;
}
}
int x_=0;
int start = millis();
void loop(){
/*
//loop numbers
x_= int(millis()/1000)%10;
show_num(0,x_,1,1);
*/
show_num(1,7,1,1);
}
//set all register pins to LOW
void clearRegisters(){
for(int i = numOfRegisterPins - 1; i >= 0; i--){
registers[i] = LOW;
}
}
void clearSegments(){
//turn off normal pin leds
for (int x=0; x<ledLength; x++){
digitalWrite(ledPins[x], LOW);
}
digitalWrite(dotsPin, LOW);
clearRegisters();
writeRegisters();
}
void swapGround(int gr){
if (gr==ground1){
// Serial.println("switched to ground 1");
digitalWrite(ground1, LOW);
digitalWrite(ground2, HIGH);
}
else if (gr==ground2){
//Serial.println("switched to ground 2");
digitalWrite(ground2, LOW);
digitalWrite(ground1, HIGH);
}
}
//Set and display registers
//Only call AFTER all values are set how you would like (slow otherwise)
void writeRegisters(){
digitalWrite(RCLK_Pin, LOW);
for(int i = numOfRegisterPins - 1; i >= 0; i--){
digitalWrite(SRCLK_Pin, LOW);
int val = registers[i];
digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);
}
digitalWrite(RCLK_Pin, HIGH);
}
//set an individual pin HIGH or LOW
void setRegisterPin(int index, int value){
registers[index] = value;
}