/**********************************************************************
* Filename    : digitcount.c
* Description : A single digit counter with output to a seven segment display
* auther      : Bob Smith
**********************************************************************/
#include <wiringPi.h>
#include <stdio.h>

#define  ledPin    0    //define the led pin number

void main(void)
{    
    // bcd2seg has binary for segments g,f,e,d,c,b,a in digits 0-9
    int bcd2seg[10] =  { 0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67 };

    int count = 0; 

    wiringPiSetup();    //Initialize wiringPi.
 
    pinMode(25, OUTPUT); // segment dp
    pinMode(28, OUTPUT); // segment a
    pinMode(29, OUTPUT); // segment b
    pinMode(24, OUTPUT); // segment c
    pinMode(23, OUTPUT); // segment d
    pinMode(22, OUTPUT); // segment e
    pinMode(27, OUTPUT); // segment f
    pinMode(26, OUTPUT); // segment g

    while(1){
        count = (count == 9) ? 0: count + 1;

        digitalWrite(25, (bcd2seg[count] & 0x80) ? HIGH : LOW);  // DP
        digitalWrite(28, (bcd2seg[count] & 0x01) ? HIGH : LOW);  // a
        digitalWrite(29, (bcd2seg[count] & 0x02) ? HIGH : LOW);  // b
        digitalWrite(24, (bcd2seg[count] & 0x04) ? HIGH : LOW);  // c
        digitalWrite(23, (bcd2seg[count] & 0x08) ? HIGH : LOW);  // d
        digitalWrite(22, (bcd2seg[count] & 0x10) ? HIGH : LOW);  // e
        digitalWrite(27, (bcd2seg[count] & 0x20) ? HIGH : LOW);  // f
        digitalWrite(26, (bcd2seg[count] & 0x40) ? HIGH : LOW);  // g
        delay(1000);                        // Wait 1 second
    }
}

