- 16x2 Dot Matrix LCD Kontroler IC HD44780:
- Wyświetlanie niestandardowego znaku na wyświetlaczu LCD 16x2:
- Programowanie i objaśnienie robocze:
- Połączenia i testowanie obwodów:
W naszym poprzednim samouczku nauczyliśmy się, jak połączyć wyświetlacz LCD 16 * 2 z mikrokontrolerem PIC. Zalecamy, aby przejść przez to przed przejściem dalej, jeśli jesteś początkującym w mikrokontrolerze PIC. Wcześniej nauczyliśmy się również podstaw PIC za pomocą programu migającego diody LED i timerów w mikrokontrolerze PIC. Możesz sprawdzić tutaj wszystkie samouczki dotyczące nauki mikrokontrolerów PIC przy użyciu kompilatora MPLABX i XC8.
W tym samouczku uczyńmy go bardziej interesującym, tworząc własne niestandardowe znaki i wyświetlając je na naszym ekranie LCD za pomocą mikrokontrolera PIC16F877A PIC. Istnieją również predefiniowane, najczęściej używane, niestandardowe znaki podane przez sam układ HD44780A, zobaczymy również, jak możemy ich użyć. Jak wyjaśniono w naszym poprzednim samouczku, nasz wyświetlacz LCD ma wbudowany kontroler Hitachi HD44780, który pomaga nam wyświetlać znaki. Każdy znak, który wyświetlamy, jest już wstępnie zdefiniowany w pamięci ROM układu HD44780. Dowiemy się o kontrolerze LCD IC HD44780 przed wyświetleniem znaku na wyświetlaczu LCD.
16x2 Dot Matrix LCD Kontroler IC HD44780:
Aby wyświetlić niestandardową postać, musimy w jakiś sposób powiedzieć układowi scalonemu, jak będzie wyglądać niestandardowa postać. Aby to zrobić, powinniśmy wiedzieć o trzech typach wspomnień obecnych wewnątrz układu scalonego kontrolera LCD HD44780:
Pamięć ROM generatora znaków (CGROM): Jest to pamięć tylko do odczytu, która, jak wspomniano wcześniej, zawiera wszystkie wzorce znaków wstępnie zdefiniowanych w niej. Ta pamięć ROM będzie się różnić dla każdego typu układu scalonego interfejsu, a niektóre mogą mieć z nimi wstępnie zdefiniowane niestandardowe znaki.
Display Data RAM (DDRAM): Jest to pamięć o dostępie swobodnym. Za każdym razem, gdy wyświetlamy znak, jego wzór zostanie pobrany z CGROM i przeniesiony do DDRAM, a następnie zostanie umieszczony na ekranie. Mówiąc prościej, DDRAM będzie miał wzory wszystkich znaków, które są aktualnie wyświetlane na ekranie LCD. W ten sposób dla każdego cyklu układ scalony nie musi pobierać danych z CGROM i pomaga uzyskać krótką częstotliwość aktualizacji
Generator znaków RAM (CGRAM): Jest to również pamięć o dostępie swobodnym, więc możemy zapisywać i odczytywać z niej dane. Jak sama nazwa wskazuje, ta pamięć będzie tą, której można użyć do wygenerowania niestandardowego znaku. Musimy utworzyć wzór dla postaci i zapisać go w CGRAMIE, ten wzór może być odczytany i wyświetlony na ekranie, gdy jest to wymagane.
Teraz, ponieważ mamy podstawową wiedzę na temat typów pamięci obecnych w układzie scalonym interfejsu HD44780. Zajrzyjmy do jego arkusza danych, aby zrozumieć nieco więcej.
Jak sugeruje arkusz danych, układ scalony HD44780 dostarczył 8 lokalizacji do przechowywania naszych niestandardowych wzorów w CGRAM, również po prawej stronie widzimy, że istnieją pewne predefiniowane znaki, które mogą być również wyświetlane na naszym ekranie LCD. Zobaczmy, jak możemy to zrobić.
Wyświetlanie niestandardowego znaku na wyświetlaczu LCD 16x2:
Aby wyświetlić niestandardowy znak, musimy najpierw wygenerować dla niego wzorzec, a następnie zapisać go w CGRAMIE. Ponieważ mamy już przy sobie funkcje biblioteczne, powinno być łatwo to zrobić za pomocą kilku prostych poleceń. Oto Biblioteka funkcji LCD, ale tutaj skopiowaliśmy i wkleiliśmy wszystkie funkcje biblioteki w samym programie, więc nie ma potrzeby dołączania tego pliku nagłówkowego do naszego programu. Zapoznaj się również z tym artykułem, aby zapoznać się z działaniem Basic LCD i jego pinami.
Pierwszym krokiem jest wygenerowanie wzoru lub własnego znaku. Jak wiemy, każdy znak to kombinacja 5 * 8 kropek. Musimy wybrać, która kropka (piksel) powinna być wysoka, a która powinna pozostać nisko. Po prostu narysuj ramkę jak poniżej i cieniuj regiony w zależności od twojej postaci. Moja postać to człowiek-patyk (mam nadzieję, że tak wygląda). Po cieniowaniu, po prostu zapisz równoważną wartość binarną każdego bajtu, jak pokazano poniżej.
Po prostu umieść „1” w zacienionym regionie i „0” w niezacienionym regionie dla każdego bajtu i to jest to, że nasz niestandardowy wzorzec jest gotowy. Podobnie stworzyłem 8 niestandardowych kodów wzorców dla naszych 8 przestrzeni pamięci, które przedstawiają CGROM. Są one wymienione w poniższej tabeli.
S.NO: |
Postać niestandardowa |
Kod wzoru |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Uwaga: nie jest obowiązkowe załadowanie wszystkich 8 miejsc przewidzianych na CGRAMIE.
Programowanie i objaśnienie robocze:
Teraz nasze kody wzorców są gotowe, wystarczy załadować je do CGRAMu LCD i wyświetlić za pomocą mikrokontrolera PIC. Aby załadować je do CGRAMu, możemy utworzyć tablicę elementów 5 * 8 i załadować każdy bajt za pomocą „ pętli for ”. Tablicę kodu wzoru pokazano poniżej:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Kod dla przestrzeni pamięci CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, Pamięć CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Kod pamięci CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Kod pamięci CGRAM przestrzeń 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Kod dla miejsca w pamięci CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Kod przestrzeni pamięci CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Kod przestrzeni pamięci CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Kod pamięci CGRAM 8};
Każde miejsce w pamięci jest ładowane z odpowiednim wzorcem znaków. Aby załadować ten wzór do układu scalonego HD44780, należy odwołać się do arkusza danych HD44780, ale są to tylko wiersze poleceń, które można wykorzystać do ustawienia adresu CGRAMU
// *** Załaduj niestandardowy znak do CGROM *** ////// Lcd_Cmd (0x04); // Ustaw adres CGRAM Lcd_Cmd (0x00); //.. ustaw adres CGRAM dla (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Powrót do strony głównej Lcd_Cmd (2); //.. powrót do strony głównej // *** Ładowanie niestandardowego znaku zakończone *** //////
Tutaj, wewnątrz „ pętli for” każda wartość binarna jest ładowana do CGROM. Po załadowaniu wzorca niestandardowe znaki można wyświetlić, po prostu wywołując lokalizację wzorca za pomocą funkcji void Lcd_Print_Char (dane char), jak pokazano poniżej.
Lcd_Print_Char (0); // Wyświetl niestandardowy znak 0 Lcd_Print_Char (1); // Wyświetl niestandardowy znak 1 Lcd_Print_Char (2); // Wyświetl niestandardowy znak 2 Lcd_Print_Char (3); // Wyświetl niestandardowy znak 3 Lcd_Print_Char (4); // Wyświetl niestandardowy znak 4 Lcd_Print_Char (5); // Wyświetl niestandardowy znak 5 Lcd_Print_Char (6); // Wyświetl niestandardowy znak 6 Lcd_Print_Char (7); // Wyświetl niestandardowy znak 7
Drukuj predefiniowany znak specjalny:
Układ scalony HD44780 ma kilka predefiniowanych znaków specjalnych przechowywanych w DDROM. Znaki te można wydrukować bezpośrednio na ekranie, odwołując się do ich wartości binarnej w arkuszu danych.
Na przykład: Wartość binarna znaku „ALFA” to 0b11100000. Jak to uzyskać, można zrozumieć na poniższym rysunku, podobnie można uzyskać wartość dla dowolnego znaku specjalnego, który jest wstępnie zdefiniowany w IC.
Gdy znana jest wartość binarna, odpowiedni znak można wydrukować na ekranie, po prostu używając funkcji void Lcd_Print_Char (dane char), jak pokazano poniżej, Lcd_Print_Char (0b11100000); // binarna wartość alfa z arkusza danych
Kompletny kod tego projektu znajduje się poniżej w sekcji kodu, również sprawdzić szczegóły wideo wyjaśnienie na końcu tego poradnika.
Połączenia i testowanie obwodów:
Ten projekt nie ma żadnych dodatkowych wymagań sprzętowych, po prostu wykorzystaliśmy te same połączenia z poprzedniego samouczka dotyczącego interfejsu LCD i użyliśmy tej samej płytki, którą stworzyliśmy w samouczku migania diod LED. Jak zwykle zasymulujmy program za pomocą Proteusa, aby zweryfikować nasze wyniki.
Gdy symulacja działa zgodnie z oczekiwaniami, wypalmy kod bezpośrednio w naszej konfiguracji sprzętu. Wynik programu powinien wyglądać mniej więcej tak:
W ten sposób możesz wyświetlać dowolne znaki niestandardowe na wyświetlaczu LCD 16x2 za pomocą mikrokontrolera PIC z kompilatorem MPLABX i XC8. Sprawdź również naszą pełną serię uczenia się mikrokontrolerów PIC tutaj.