Skocz do zawartości

Matryca led: podstawy, proste wyświetlanie znaków część 3


slon

Pomocna odpowiedź

Część trzecia będzie w pewnym stopniu nawiązywać do części pierwszej od strony szkicu oraz do części drugiej od strony schematu połączenia w simulIDE. W zasadzie zawarta tu treść miała znaleźć się w części drugiej aczkolwiek chciałem połączyć całość w czytelny sposób co w pewnym stopniu się udało ale nie do końca tak jak chciałem. Założenie było takie aby wyświetlić przewijany tekst z wykorzystaniem materiałów z wcześniejszych części. Przejdźmy więc do schematu.

Spis treści serii artykułów:

shift595_x3_Leds2.thumb.png.b527405545dd0da2e27ee5d843195833.png

Trochę to dziwne jeśli chodzi i ten wyświetlacz aczkolwiek lepszego sposobu na ustawienie "linijek"  led nie znalazłem. To co powinno się znajdować na schemacie lub to co nas interesuje to dwanaście linijek po osiem diod led. Gdybym ustawił w ten sposób "liniki" w sumulIDE do nic nie było by widać i pewnie nawet nie dało by się tego połączyć. Dlatego taka kombinacja , że każda kolejna linijka jest wyższa o trzy punkty. Całość wygląda tak:

shift595_x3_Leds.thumb.png.31c706917f452a43b5a7db537a5c7363.png

Nie należy przejmować się jakością tej grafiki (pliki do simulIDE na końcu artykułu). Rejestrów jest tyle co "linijek". Przejdźmy teraz do kodu:


#define LATCH_PIN_MODE DDRB
#define CLOCK_PIN_MODE DDRB
#define DATA_PIN_MODE DDRB

#define LATCH_PIN_STATE PORTB

#define LATCH_PIN  12//stc
#define CLOCK_PIN  13 //shc
#define DATA_PIN  8 //ds

#define LITERA_ALFABETU 26
/*
   każda z liter ma trzy kolumny + dwie kolumny
   w celu odseparowania liter i zwiększenia czytelności
*/
#define KOLUMNA_LITERY 5

const uint8_t litera[LITERA_ALFABETU][KOLUMNA_LITERY] =
{
  /*----------litera A-----------*/
  { 0b11111000, // COL_1
    0b01010000, // COL_2
    0b00111000,
  },// COL_3
  /*----------litera B-----------*/
  { 0b11111000,
    0b10101000,
    0b01010000
  }, //B
  /*----------litera C-----------*/
  { 0b11111000,
    0b10001000,
    0b00000000
  }, //C
  /*----------litera D-----------*/
  { 0b11111000,
    0b10001000,
    0b01110000
  }, //D
  /*----------litera E-----------*/
  { 0b11111000,
    0b10101000,
    0b00000000
  },  //E
  /*----------litera F-----------*/
  { 0b11111000,
    0b10100000,
    0b00000000
  },  //F
  /*----------litera G-----------*/
  { 0b01111000,
    0b10001000,
    0b10110000
  }, //G
  /*----------litera H-----------*/
  { 0b11111000,
    0b00100000,
    0b11111000
  },  //H
  /*----------litera I-----------*/
  { 0b00000000,
    0b11111000,
    0b00000000
  },  //I
  /*----------litera J-----------*/
  { 0b00010000,
    0b00001000,
    0b11110000
  },  //J
  /*----------litera K-----------*/
  { 0b11111000,
    0b00100000,
    0b01011000
  }, //K
  /*----------litera L-----------*/
  { 0b11111000,
    0b00001000,
    0b00000000
  }, //L
  /*----------litera M-----------*/
  { 0b11111000,
    0b01100000,
    0b11111000
  }, //M
  /*----------litera N-----------*/
  { 0b11111000,
    0b01000000,
    0b11111000
  }, //N
  /*----------litera O-----------*/
  { 0b01110000,
    0b10001000,
    0b01110000
  }, //O
  /*----------litera P-----------*/
  { 0b11111000,
    0b10100000,
    0b01000000
  }, //P
  /*----------litera Q-----------*/
  { 0b01100000,
    0b10010000,
    0b01101000
  }, //Q
  /*----------litera R-----------*/
  { 0b11111000,
    0b10100000,
    0b01011000
  }, //R
  /*----------litera S-----------*/
  { 0b01101000,
    0b10101000,
    0b10110000
  }, //S
  /*----------litera T-----------*/
  { 0b10000000,
    0b11111000,
    0b10000000
  }, //T
  /*----------litera U-----------*/
  { 0b11111000,
    0b00001000,
    0b11111000
  }, //U
  /*----------litera V-----------*/
  { 0b11110000,
    0b00001000,
    0b11110000
  }, //V
  /*----------litera W-----------*/
  { 0b11111000,
    0b00010000,
    0b11111000
  }, //W
  /*-----------litera X----------*/
  { 0b11011000,
    0b00100000,
    0b11011000
  }, //X
  /*-----------litera Y----------*/
  { 0b11000000,
    0b00111000,
    0b11000000
  },
  /*---------- Litera Z ---------*/
  { 0b10011000,
    0b10101000,
    0b11001000
  }, //Z
};

void setup() {
  DATA_PIN_MODE |= 0b00000001; // D8 OUTPUT
  LATCH_PIN_MODE |= 0b00010000; //D12 OUTPUT
  CLOCK_PIN_MODE |= 0b00100000; //D13 OUTPUT
}

void loop() {
  for (int j = 0; j < LITERA_ALFABETU; j++) {
    for (int i = 0; i < KOLUMNA_LITERY; i++) {
      LATCH_PIN_STATE &= 0b00101111; //LOW
      shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, litera[j][i]);
      LATCH_PIN_STATE ^= 0b00010000; // HIGH
      delay(75);
    }
  }
}

Zgodnie z tym co pisałem na początku artykułu bazujemy na lekko zmodyfikowanym szkicu z części pierwszej. W tej wersji jest tylko jedna tablica litera[x][x]. Do wysyłania kolejnych bajtów (kolumn litery) została użyta funkcja znana z arduino IDE czyli shiftOut();

shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, litera[j][i]);

W takiej postaci bajt jest wysyłany od najbardziej znaczącego bitu( pierwszy od lewej) most significant  bit (MSB). Jaki będzie efekt takiej podmiany zapewne wiele osób wie ale jeśli ktoś nie wie to warto pogłówkować zanim sprawdzi się w symulatorze 🙂 .  W załączniku pliki  shift595_x3_Leds.zip

Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac »
Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay.
PCBway_logotyp-350x233.png

Spis treści serii artykułów:

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.