Mam tu pro tebe program na o stejne, ale bez externi knihovny (opsano z internetu ta cast na konci programu) a upraveno pro muj ucel. Zobrazuje 4 ruzne cisla najednou na 4 segmentu pro digi hodiny. Program zabira
Kód: Vybrat vše
//zapojeni 4segmetni LED cislic se spolecnou Katodou
int cislo;
byte digit4[11][7] = { //segmenty D2=E,D3=D,D4=C,D5=G,D6=F,D7=B,D8=A
{1, 1, 1, 0, 1, 1, 1}, //0
{0, 0, 1, 0, 0, 1, 0}, //1
{1, 1, 0, 1, 0, 1, 1}, //2
{0, 1, 1, 1, 0, 1, 1}, //3
{0, 0, 1, 1, 1, 1, 0}, //4
{0, 1, 1, 1, 1, 0, 1}, //5
{1, 1, 1, 1, 1, 0, 1}, //6
{0, 0, 1, 0, 0, 1, 1}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{0, 1, 1, 1, 1, 1, 1}, //9
{0, 0, 0, 0, 0, 0, 0} //10
};
//*******************************************
void setup()
{
for (byte pins = 2; pins < 13; pins++) {// D9-D12 cisla 1-4
pinMode(pins, OUTPUT);
}
digiLowSeg(); //nulovani segmentu
digiLowABCD(); //nulovani cislic
}
//********************************************
void loop() {
cislo = 5667;
four_digit(cislo);
delay(5);
}
//**********************************************************
void Segment(int digi) { //zobraz segmenty
for (byte pin = 0 ; pin < 7 ; pin++) {
if (digit4[digi][pin] == 1) {
digitalWrite(pin + 2, HIGH);
} else {
digitalWrite(pin + 2, LOW);
}
}
}
//**********************************************************
void digiLowSeg() { //vynuluj jednotlive segmenty
for (byte pins = 2; pins < 13; pins++) {
digitalWrite(pins, LOW);
}
}
//**********************************************************
void digiLowABCD() { //vynulus vstupy 4 digit
for (byte pins = 9; pins < 13; pins++) {
digitalWrite(pins, HIGH);
}
}
//**********************************************************
void four_digit(int digits) { //zobraz cislo
#define bright 500
long zacni = millis();
for (int loap = 4; loap > 0 ; loap--) {
switch (loap) {
case 4: digitalWrite(9, LOW);
break;
case 3: digitalWrite(10, LOW);
break;
case 2: digitalWrite(11, LOW);
break;
case 1: digitalWrite(12, LOW);
break;
}
Segment(digits % 10);
digits /= 10;
delayMicroseconds(bright);
Segment(10);
digiLowABCD();
}
while ((millis() - zacni) < 10); //cyklus na zobrazemi segmentu
}