Monday, June 5, 2017

Seven Segment Display Numbers






Code for driving segment display. To drive a common cathode the NOT operator ! must be removed from the front of the array in the highlighted part of the code.

// make an array to save Sev Seg pin configuration of numbers

int num_array[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9
                                      
//function header
void Num_Write(int);

void setup()
{
  // set pin modes
  pinMode(6, OUTPUT);  
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 
 }

void loop()
{

  for (int counter = 10; counter > 0; --counter)
  {
   delay(1000);
   Num_Write(counter-1);
  }
  delay(5000);
}

// this functions writes values to the sev seg pins 
void Num_Write(int number)
{
  int pin= 6;
  for (int j=0; j < 7; j++) {
   digitalWrite(pin, !num_array[number][j]); //Inverted array value due to Common Anode display
   pin++;
  }

}

No comments:

Post a Comment