#define DATA_PIN 8 // DS
#define LATCH_PIN 9 // STCP
#define CLOCK_PIN 10 // SHCP
byte poleZnakovCisel[11] = {
// ABCDEFGdp (dp nie je,preto vzdy 0 na konci)
0b11111100, // nula
0b01100000, // jednotka
0b11011010, // dvojka
0b11110010,
0b01100110,
0b10110110,
0b10111110,
0b11100000,
0b11111110,
0b11110110, // deviatka
0b00000000 // OFF
};
#define POCET7SEG 16
byte cislaNa7Seg[POCET7SEG]; // pole pre 16, lebo je 16x 7-segmentoviek
void setup()
{
pinMode(DATA_PIN, OUTPUT); // piny pre pos.reg. su vystupne
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
// bootovaci test, ci nie je daky segment odpojeny/odpaleny
zobrazCisla(8); // zobraz na vsetkych 7-seg cislo 8 (vsetky ON)
delay(1000);
zobrazCisla(10); // zobraz na vsetkych 7-seg znak 10 (vsetky OFF)
delay(500);
zobrazCisla(8);
delay(1000);
zobrazCisla(10);
}
void loop()
{
cislaNa7Seg[0] = 1; // zapis cisel do pola
cislaNa7Seg[1] = 1;
cislaNa7Seg[2] = 2;
cislaNa7Seg[3] = 2;
cislaNa7Seg[4] = 3;
cislaNa7Seg[5] = 3;
cislaNa7Seg[6] = 4;
cislaNa7Seg[7] = 4;
cislaNa7Seg[8] = 5;
cislaNa7Seg[9] = 5;
cislaNa7Seg[10] = 6;
cislaNa7Seg[11] = 6;
cislaNa7Seg[12] = 7;
cislaNa7Seg[13] = 8;
cislaNa7Seg[14] = 9;
cislaNa7Seg[15] = 0;
zobrazCisla(); // vypis podla hodnot v poli cislaNa7Seg
}
void zobrazCisla() // ked sa neda vstupny parameter, tak zobrazi podla POLA
{
digitalWrite(LATCH_PIN, LOW); // zaciatok nacitavania dat do posuvneho registra
for(byte i=0; i<POCET7SEG; i++)
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, poleZnakovCisel[cislaNa7Seg[i]]); // vypis podla pola
digitalWrite(LATCH_PIN, HIGH); // koniec odosielania dat do posuvneho registra
}
void zobrazCisla(byte cislo) // ked sa da vstupny parameter, tak sa zobrazi vsade to cislo
{
digitalWrite(LATCH_PIN, LOW); // zaciatok nacitavania dat do posuvneho registra
for(byte i=0; i<POCET7SEG; i++)
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, poleZnakovCisel[cislo]); // vypis zadaneho cisla
digitalWrite(LATCH_PIN, HIGH); // koniec odosielania dat do posuvneho registra
}