Konfiguracja sprzętu i oprogramowania

Max7219 i kilka przewodów. Serce

Wszyscy od dawna są przyzwyczajeni do tego, że wszyscy urządzenie elektroniczne jest ekran, przez który daje człowiekowi wszystko przydatna informacja. Odtwarzacz MP3 pokazuje nazwę odtwarzanego utworu, pilot quadkoptera wyświetla telemetrię lotu, nawet pralka wyświetla czas do końca prania, a smartfon zazwyczaj obsługuje cały pulpit komputera osobistego! Najprawdopodobniej Twoje następne urządzenie również będzie wymagało małego wyświetlacza 🙂 Spróbujmy zrobić prosty zegar elektroniczny! A jako tablicę wyników używamy zwykłego i taniego wyświetlacza ciekłokrystalicznego 1602. Tak jak na zdjęciu: Oprócz 16x2 za dość popularny jest wyświetlacz 20x4 (cztery wiersze po 20 znaków) oraz wyświetlacz graficzny o rozdzielczości 128x64 pikseli. Oto one na zdjęciach:

1. Podłączanie znakowego wyświetlacza LCD 1602

Wyświetlacz 1602 ma 16 pinów. Zazwyczaj są one ponumerowane od lewej do prawej, jeśli spojrzeć na to tak, jak na zdjęciu. Czasami wnioski są podpisane, takie jak: DB0, DB1, EN, itp. A czasami po prostu wskazują numer wyjścia. W każdym razie lista pinów jest zawsze taka sama: 1 - "GND", masa (minus zasilania); 2 - "Vcc", zasilanie +5V; 3 - "VEE", kontrast; 4 - "RS", rejestr wybór 5 - "R/W", kierunek przesyłania danych (zapis/odczyt); 6 - "EN", synchronizacja; 7-14 - "DB0", "DB1", .., "DB7" - magistrala danych; 15 - anoda podświetlenia (+5V); 16 - katoda podświetlenia (masa). Linie VEE, RS oraz cztery linie danych DB4, DB5, DB6, DB7 są podłączone do wyjść cyfrowych sterownika. Linię „R/W” połączymy z „masą” sterownika (ponieważ potrzebujemy tylko funkcji zapisu do pamięci wyświetlacza). Podświetlenia jeszcze nie podłączymy, wierzę, że łatwo sobie to rozgryźcie 🙂 Schemat podłączenia wyświetlacza do Arduino Uno
Wygląd układu
Na wszelki wypadek również w formie talerza:
Wyświetlacz LCD 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5V 4 5 6 7 8 9 +5V GND

2. Program "Witaj świecie!"

Do pracy z wyświetlaczami LCD o różnych rozmiarach i typach, edytor Arduino IDE posiada specjalną bibliotekę płynny kryształ. Aby dołączyć bibliotekę, w pierwszej linii naszego programu piszemy następujące wyrażenie: #include Następnie musimy określić, których pinów Arduino użyliśmy do podłączenia wyświetlacza. Podamy te informacje podczas inicjalizacji modułu: LiquidCrystal lcd(4, 5, 6, 7, 8, 9);Tutaj pierwsze dwa argumenty to piny RS i EN, a pozostałe cztery to magistrala danych DB4-DB7 linie. Następnie określ rozmiar ekranu za pomocą polecenia „begin”: lcd.begin(16, 2); Przypominamy, że nasz wyświetlacz ma dwie linie po 16 znaków każda. Na koniec potrzebujemy prostej funkcji „drukuj” do drukowania tekstu. Wynik używający tej funkcji dla dobrze znanej frazy będzie wyglądał tak: lcd.print("Hello, world!"); Kompletny program będzie wyglądał tak: #include LCD LiquidCrystal (4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); lcd.print("Witaj, świecie!"); ) void loop()( ) Załaduj go na Arduino Uno i zobacz, co się dzieje na wyświetlaczu. Mogą wystąpić trzy główne sytuacje 🙂 1) Na wyświetlaczu pojawi się „Hello, world!”. Czyli podłączyłeś wszystko poprawnie, a kontrast jakimś cudem okazał się początkowo poprawnie skonfigurowany. Cieszymy się i przechodzimy do następnego rozdziału. 2) Wyświetlacz pokaże cała linia czarne prostokąty - wymagana regulacja kontrastu! Dlatego do układu dodaliśmy potencjometr z pokrętłem. Przekręcamy go od jednej krawędzi do drugiej, aż na wyświetlaczu pojawi się wyraźny napis. 3) Dwa rzędy czarnych prostokątów. Najprawdopodobniej zepsułeś coś podczas łączenia. Trzykrotnie sprawdź wszystkie przewody. Jeśli nie znajdziesz błędu - poproś kota o sprawdzenie!

3. Zaprogramuj zegarek

Teraz, gdy wyświetlacz działa dokładnie, spróbujmy zamienić nasze proste urządzenie w prawdziwy zegarek elektroniczny. Uwaga! Do wyświetlenia czasu potrzebujemy biblioteki "Czas". Jeśli nie jest jeszcze zainstalowany, możesz pobrać archiwum z linku. Uwzględnijmy to: #include Następnie ustawiamy aktualną datę i godzinę za pomocą funkcji „setTime”: setTime(23, 59, 59, 12, 31, 2015) Tu wszystko jest jasne: godziny, minuty, sekundy, miesiąc, dzień, rok. Do wyświetlenia daty wykorzystujemy kilka funkcji:
  • year() - zwróci nam rok;
  • miesiąc() - miesiąc;
  • dzień dzień;
  • godzina() - godzina;
  • minute() - zwraca minutę;
  • sekunda() - sekunda.
Zwróćmy teraz uwagę na ten fakt. Jeśli policzymy ilość znaków w typowym rekordzie dat: „31.12.2015 23:59:59”, otrzymamy 19. A mamy tylko 16! Nie mieści się jednak w jednej linii. Jeszcze jeden problem można rozwiązać użyteczna funkcja- "ustaw Kursor". Ta funkcja ustawia kursor w żądanej pozycji. Na przykład: lcd.setCursor(0,1); Ustawia kursor na początku drugiego wiersza. Kursor to lokalizacja znaku, od którego rozpocznie się wyprowadzanie tekstu przy następnym poleceniu „drukuj”. Użyjmy tej funkcji do wyświetlenia daty w pierwszym wierszu i czasu w drugim. Dzięki wyprowadzeniu daty i godziny wszystko jest teraz jasne. Pozostały rutynowe rzeczy. Przykładowo po każdym wypełnieniu wyświetlacza wyczyścimy go funkcją „clear()”: lcd.clear(); Poza tym nie ma sensu wyświetlać danych częściej niż raz na sekundę, więc zatrzymajmy 1000 milisekund między dwiema iteracjami. Tak więc zestawiając wszystko razem, otrzymujemy następujący program: #include #włączać LCD LiquidCrystal (4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 rano, 10 stycznia 2015 ) void loop()( lcd.clear(); lcd .print(day()); lcd.print("."); lcd.print(miesiąc()); lcd.print("."); lcd.print(year()); lcd.setCursor(0 , 1); lcd.print(hour()); lcd.print(":"); lcd.print(minute()); lcd.print(":"); lcd.print(second()); opóźnienie ( 1000);) Prześlij szkic do Arduino Uno i obserwuj ruch zegara! 🙂 W celu utrwalenia zdobytej wiedzy polecam przepompować nasz zegar do pełnoprawnego budzika. Wystarczy dodać kilka przycisków i brzęczyk 🙂

Cześć chłopaki. Dzisiaj skrócimy biegnącą linię na moduły LED MAX7219 i Arduino. Zadanie jest bardzo proste i nie wymaga od nas dużej wiedzy z zakresu elektroniki i programowania. Na początek proponuję przestudiować trochę teorii na temat urządzenia matrycy LED, zasady jej połączenia i obejrzeć film z wynikiem, do którego będziemy dążyć w całym artykule.

Matryca LED to graficzny wskaźnik, który można wykorzystać do wyświetlania prostych obrazków, liter i cyfr. Nie stawiam sobie zadania szczegółowego zajmowania się urządzeniem wskaźników matrycowych, jednak warto zauważyć, że tak naprawdę matryca składa się z 8x8 diod LED. Właściwie wszystko sprowadza się do dynamicznego wskazywania. Na tej podstawie jasne jest, że grupowanie kilku macierzy razem nie jest łatwym zadaniem. Do każdego nowego wiersza lub kolumny macierzy musisz dodać nowy rejestr przesuwny wraz z przewodami i opornikami, a w dobry sposób także układem ULN2003.

Na szczęście inżynierowie od dawna opracowali wyspecjalizowane mikroukłady do sterowania różnego rodzaju wskaźnikami. W tym artykule przyjrzymy się modułowi matrycy z układem MAX7219. Jak później okaże się, praca z takim modułem to przyjemność.

Moduł matrycy LED z chipem MAX7219

Moduł jest płytką z mikroukładem, niezbędnym do tego opasaniem i właściwie wskaźnikiem matrycy. Zazwyczaj wskaźnik nie jest wlutowany w płytkę, ale włożony do złącza. Odbywa się to tak, że grupę modułów można najpierw przymocować do jakiejś powierzchni za pomocą śrub, a następnie włożyć w nie matryce.

Moduł ma po pięć pinów z każdej strony. Z jednej strony dane wchodzą do modułu, z drugiej dane opuszczają moduł i są przenoszone do kolejnego. Pozwala to na łączenie macierzy y.

Złącze wejściowe / złącze wyjściowe:

  • VCC, GND - zasilanie;
  • DIN - wprowadzanie danych;
  • CS - wybór modułu (chip select);
  • CLK - impuls zegarowy.

Moduł pracuje na napięciu 5 woltów.

Wyjście pikseli przy użyciu biblioteki Max72xxPanel

Do sterowania układem MAX7219 użyjemy biblioteki Panel Max72xx. Możesz go pobrać z linków na końcu artykułu.

Zainstalujmy bibliotekę i napiszmy mały kod, który wyświetli tylko jeden punkt o współrzędnych x=3 i y=4. Kropka będzie migać z okresem 600 milisekund.

#włączać #włączać #włączać int pinCS = 10; int numberOfHorizontalDisplays = 1; // liczba macierzy poziomo int numberOfVerticalDisplays = 1; // pionowa liczba matryc Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() ( matrix.setIntensity(4); // jasność od 0 do 15 ) void loop() ( matrix.drawPixel(3, 4, HIGH); // rozświetl piksel na (3,4) macierzy. write (); // narysuj wszystkie piksele do matrycy delay(300); matrix. drawPixel(3, 4, LOW); // wygaś macierz pikseli. write(); delay(300); )

Jak wspomniano wcześniej, moduły matrycowe z układem MAX7219 można łatwo łączyć. W tym celu na początku programu ustalamy ilość macierzy poziomo i pionowo. W tym przypadku używana jest jedna macierz, więc oba te parametry będą równe 1.

Należy pamiętać, że po włączeniu i wyłączeniu pikseli za pomocą DrawPixel, musisz wywołać funkcję pisać. Bez funkcji zapisu piksele na matrycy nie będą się świecić!

Teraz napiszmy kod, który wyświetli emotikon na matrycy. Zaszyfrujemy uśmiech za pomocą tablicy ośmiu bajtów. Każdy bajt tablicy będzie odpowiedzialny za wiersz macierzy, a każdy bit w bajcie za punkt w wierszu.

#włączać #włączać #włączać int pinCS = 10; int numberOfHorizontalDisplays = 1; // liczba macierzy poziomo int numberOfVerticalDisplays = 1; // pionowa liczba matryc Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); dane bajtu stałego = (0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 ); void setup() ( matrix.setIntensity(7); // jasność od 0 do 15 matrix.fillScreen(LOW); // czyszczenie macierzy (int y = 0; y< 8; y++) { for (int x = 0; x < 8; x++) { // зажигаем x-й пиксель в y-й строке matrix.drawPixel(x, y, data[y] & (1<

Notatka. Biblioteka Max72xxPanel posiada funkcję ustaw obrót, który określa orientację obrazu na matrycy. Na przykład, jeśli chcemy obrócić emotikon o 90 stopni, będziemy musieli to zrobić natychmiast po wywołaniu funkcji setIntensity połączenie ustaw obrót z odpowiednimi argumentami:

matrix.setRotation(0, 1);

pierwszy parametr to indeks macierzy, w naszym przypadku jest równy zero; drugi parametr to liczba zwojów o 90 stopni.

Wyjście tekstowe za pomocą biblioteki Adafruit-GFX-Library

W podobny sposób możesz wyświetlić na matrycy dowolny inny symbol, na przykład literę. Aby jednak móc wyświetlić dowolną literę alfabetu angielskiego, będziemy musieli zdefiniować w programie aż 26 ośmiobajtowych tablic! To bardzo ponure i oczywiście ktoś już to zrobił przed nami.

W popularnej Bibliotece Adafruit-GFX, oprócz funkcji do pracy z grafiką i tekstem, znajduje się również baza liter łacińskich pisanych dużymi i małymi literami, a także wszelkie znaki interpunkcyjne i inne znaki serwisowe. Link do biblioteki znajduje się na końcu artykułu.

Możesz wyświetlić symbol na matrycy za pomocą funkcji DrawChar.

drawChar(x, y, znak, kolor, tło, rozmiar);

Pierwsze dwa parametry funkcji odpowiadają za współrzędne lewego górnego rogu symbolu. Trzecim parametrem jest sam symbol. Kolor symbolu w naszym przypadku będzie równy 1 lub WYSOKI, ponieważ matryca jest dwukolorowa. Tło wynosi 0 lub NISKI. Ustawmy ostatni parametr „rozmiar” równy 1.

Napiszmy program, który wyświetli kolejno wszystkie litery frazy: „HELLO WORLD!”

#włączać #włączać #włączać int pinCS = 10; int numberOfHorizontalDisplays = 1; int numberOfVerticalDisplays = 1; Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Taśma sznurkowa = "HELLO WORLD"; int czekaj = 800; void setup() ( matrix.setIntensity(1); // jasność od 0 do 15 ) void loop() ( for (int i = 0 ; i< tape.length(); i++) { matrix.fillScreen(LOW); matrix.drawChar(0, 0, tape[i], HIGH, LOW, 1); matrix.write(); delay(wait); } }

Notatka. Biblioteka Adafruit_GFX posiada wiele funkcji do pracy z grafiką. Na przykład drawCircle(3, 3, 2, HIGH) narysuje okrąg o środku (3,3) i promieniu 2. Ostatnim parametrem jest kolor, ale w przypadku matrycy monochromatycznej jest to 1 lub HIGH. Funkcja drawLine(0, 0, 3, 6, HIGH) narysuje linię między punktami (0,0) i (3,6).

Linia biegnąca na max7219

Mam więc nadzieję, że wymyśliliśmy urządzenie i zasadę wyjścia do jednej matrycy. Przejdźmy teraz bezpośrednio do linii biegowej.

Co będzie wymagane?

Aby zrealizować pomysł, potrzebujesz bardzo niewielu szczegółów:

  • dwa moduły LED, składające się z czterech matryc 8 na 8 pikseli;
  • przewody łączące;
  • płytka Arduino Nano;

Schemat

Na płytce drukowanej zastosowanego modułu LED znajdują się 4 matryce o wymiarach 8 na 8 pikseli. Każda tablica LED jest kontrolowana przez układ MAX7219.

MAX7219 to kontroler do 64 wyświetlaczy LED, wspólnych matryc katodowych i dyskretnych diod LED. Dla wygodniejszego odbioru informacji wyświetlanych na wyświetlaczu LED zaleca się zainstalowanie kilku modułów. W tym celu łączy się je w grupy połączone szeregowo, to znaczy wyjście pierwszego modułu (out) jest połączone z wejściem drugiego modułu (in). Mój montaż składa się z dwóch modułów (16 matryc), których długość jest wystarczająca do wygodnego czytania całych zdań. W tym przypadku montaż łączy się z Arduino w taki sam sposób, jak z pojedynczym modułem.

Uruchamianie programowania linii.

Linia biegnąca z Arduino i modułów LED pod kontrolą MAX7219 jest już prawie gotowa. Czas przejść do ostatniej części programu.

#włączać #włączać #włączać int pinCS = 10; // Podłącz CS do pinu 10, DIN do MOSI i CLK do SCK int numberOfHorizontalDisplays = 1; // Liczba modułów poziomo int numberOfVerticalDisplays = 8; // Liczba modułów w pionie Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Taśma sznurkowa = ""; int czekaj = 10; // Szybkość przewijania w milisekundach int spacer = 1; // Odstęp między znakami (liczba kropek) int width = 5 + odstęp; // Szerokość znaku /* Konwertuj rosyjską czcionkę z UTF-8 na Windows-1251 */ String utf8rus(String source) ( int i,k; String target; unsigned char n; char m = ( "0", "\0" ); k = source.length(); i = 0; while (i< k) { n = source[i]; i++; if (n >= 0xC0) ( przełącznik (n) ( przypadek 0xD0: ( n = źródło[i]; i++; if (n == 0x81) ( n = 0xA8; przerwa; ) if (n >= 0x90 && n<= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n<= 0x8F) n = n + 0x6F; break; } } } m = n; target = target + String(m); } return target; } /* Код для работы с com-портом */ String Serial_Read() { unsigned char c; // переменная для чтения сериал порта String Serial_string = ""; // Формируемая из символов строка while (Serial.available() >0) ( // Jeśli w porcie szeregowym są znaki c = Serial.read(); // Odczytaj znak //Serial.print(c,HEX); Serial.print(" "); Serial.print(c if (c == "\n") ( // Jeśli to jest koniec ciągu, return Serial_string; // Zwróć ciąg ) if (c == 0xB8) c = c - 0x01; // Korekta znaku kody tabeli???? ponieważ rosyjskie znaki w tabeli są przesunięte względem standardowego kodowania utf o 1 znak if (c >= 0xBF && c<= 0xFF) c = c - 0x01; Serial_string = Serial_string + String(char(c)); //Добавить символ в строку } return Serial_string; } void setup() { Serial.begin(9600); tape = utf8rus("сайт Amateur Radio WorkShop"); // Этот текст выводиться при включении или если в com-порт не пришла информация matrix.setIntensity(3); // Яркость от 0 до 15 matrix.setRotation(matrix.getRotation()+3); //1 - 90 2 - 180 3 - 270 } void loop() { if (Serial.available()){ tape=Serial_Read(); } for (int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; // Номер символа выводимого на матрицу int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // Центрируем текст по вертикали while (x + width - spacer >= 0 && litera >= 0) ( jeśli (litera< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW,1); } letter--; x -= width; } matrix.write(); // Вывод сообщения на экран delay(wait); } }

Nie widzę sensu w pisaniu kodu. Jest dobrze komentowany. Warto jednak wspomnieć o kilku cechach.

Notatka. Ważny. Standardowa biblioteka Adafruit_GFX początkowo obsługuje tylko czcionki angielskie, więc chłopaki z Rosji zrobili co w ich mocy i przepisali bibliotekę, dodając rosyjskie czcionki i wszelkiego rodzaju gadżety. Wszystkie biblioteki i szkice są dostępne na mojej stronie GitHUB.

Potrzebny jest fragment kodu do pracy z portem com, aby szybko zmienić tekst komunikatu wyświetlanego na module LED. Potrzebujemy go jednak nie tylko do tego. W przyszłości dzięki tej funkcji połączymy naszą i działającą linię na Arduino.

Do pracy ze znakowymi wyświetlaczami graficznymi sugerujemy użycie biblioteki LiquidCrystal, która wchodzi w skład standardowego zestawu Arduino IDE i jest przeznaczona do pracy na 8-bitowym (4-bitowym) interfejsie równoległym. Jeśli Twój wyświetlacz jest podłączony do Arduino za pośrednictwem magistrali I2, musisz zainstalować bibliotekę LiquidCrystal_I2C (większość funkcji powtarza funkcje z pierwszej biblioteki).

Obsługiwane wyświetlacze:

Wyświetlacz Połączenie i inicjalizacja
LCD1602 - wyświetlacz znakowy (16x02 znaki),


#włączać
[ , 8 , 9 , 10 , 11 ]);
pusta konfiguracja()( lcd.początek(16, 2);}

// Wyjaśnienie:

pusta konfiguracja()( OBIEKT.początek (LICZBA_KOLUMN, LICZBA_WIERSZY); )


OBIEKT LiquidCrystal (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


z interfejsem I2C (niebieski)

#włączać
#włączać
LCD LiquidCrystal_I2C (0x27 lub 0x3F, 16 , 2);
pusta konfiguracja()( lcd.init(); }

// Wyjaśnienie:



LCD1602 I2C - wyświetlacz znakowy (16x02 znaki),
z interfejsem I2C (zielony)

#włączać
#włączać
LCD LiquidCrystal_I2C (0x27 lub 0x3F, 16 , 2);
pusta konfiguracja()( lcd.init(); }

// Wyjaśnienie:
OBIEKT LiquidCrystal_I2C (ADRES_I2C , LICZBA_KOLUMN, LICZBA_WIERSZY);
// ADDRESS_I2C może mieć wartość 0x27 lub 0x3F

LCD2004 - wyświetlacz znakowy (20x04 znaków),
z interfejsem równoległym (niebieski)

#włączać
LCD LiquidCrystal (2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]);
pusta konfiguracja()( lcd.początek(20, 4);}

// Wyjaśnienie:
OBIEKT LiquidCrystal (RS, E, D4, D5, D6, D7);
void setup()( OBJECT.begin(LICZBA_KOLUMN, LICZBA_RZĘDÓW); )

// Jeśli używanych jest 8 przewodów magistrali danych, określ je wszystkie
OBIEKT LiquidCrystal (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - wyświetlacz znakowy (20x04 znaków),
z interfejsem I2C (niebieski)
#włączać
#włączać
LCD LiquidCrystal_I2C (0x27 lub 0x3F, 20 , 4);
pusta konfiguracja()( lcd.init(); }

// Wyjaśnienie:
OBIEKT LiquidCrystal_I2C (ADRES_I2C , LICZBA_KOLUMN, LICZBA_WIERSZY);
// ADDRESS_I2C może mieć wartość 0x27 lub 0x3F

#1 Przykład

Napis wyświetlamy na wyświetlaczu LCD1602 podłączonym przez magistralę I2C. Aby pracować z wyświetlaczem LCD2004, musisz zmienić linię 3 na LiquidCrystal_I2C lcd (0x27,20,4);

#włączać // Łączymy bibliotekę do pracy z wyświetlaczem LCD poprzez magistralę I2C LiquidCrystal_I2C lcd(0x27,16,2); // Zadeklaruj obiekt biblioteczny, określając parametry wyświetlania (adres I2C = 0x27, liczba kolumn = 16, liczba wierszy = 2) // Jeśli napis nie pojawia się, zamień adres 0x27 na 0x3F void setup()( / / lcd.init(); // Rozpocznij pracę z wyświetlaczem LCD lcd.backlight(); // Włącz podświetlenie wyświetlacza LCD lcd.setCursor(0, 0); // Ustaw kursor w pozycji (kolumna 0 , wiersz 0) lcd.print("LCD"); // Wydrukuj tekst "LCD" zaczynając od bieżącej pozycji kursora lcd.setCursor(0, 1); // Ustaw kursor na pozycji (kolumna 0, wiersz 1) lcd.print("www.iarduino.ru"); // Wyświetlamy tekst "www.iarduino.ru", zaczynając od ustawionej pozycji kursora ) // // void loop() // Kod wewnątrz funkcja pętli jest stale wykonywana. Ale ponieważ wyświetlamy tekst statyczny, wystarczy, że wyświetlimy go 1 raz przy uruchomieniu, bez użycia kodu pętli

#2 Przykład

Napis wyświetlamy na wyświetlaczu LCD1602 podłączonym poprzez 4-bitową szynę równoległą. Aby pracować z wyświetlaczem LCD2004, musisz zmienić linię 5 na lcd.begin(20, 4);

#włączać // Podłączamy bibliotekę LiquidCrystal do pracy z wyświetlaczem LiquidCrystal LCD lcd(2,3,4,5,6,7); // Zadeklaruj obiekt biblioteki, określając piny wyświetlania (RS,E,D4,D5,D6,D7) // Jeśli używanych jest 8 przewodów magistrali danych, podaj (RS,E,D0,D1,D2,D3,D4, D5, D6,D7) void setup()( // lcd.begin(16, 2); // Rozpocznij pracę z wyświetlaczem LCD, określając liczbę (kolumny, wiersze) lcd.setCursor(0, 0); // Ustaw kursor na pozycji (0 kolumna, 0 wierszy) lcd.print("LCD2004");// Wydrukuj tekst "LDC1602" zaczynając od bieżącej pozycji kursora lcd.setCursor(0, 1);//Ustaw kursor na pozycję (0 kolumna, 1 wiersz) lcd.print("www.iarduino.ru"); // Wydrukuj tekst "www.iarduino.ru" zaczynając od ustawionej pozycji kursora) // // void loop()( ) // Kod wewnątrz funkcji pętli jest stale wykonywany. Ale ponieważ wyświetlamy tekst statyczny, wystarczy, że wyświetlimy go 1 raz przy uruchomieniu, bez użycia kodu pętli

#3 Przykład

Wyświetlamy napis "język rosyjski" na wyświetlaczu LCD1602 podłączonym przez magistralę I2C:

#włączać // Podłącz bibliotekę do pracy z magistralą I2C #include // Łączymy bibliotekę do pracy z wyświetlaczem LCD poprzez magistralę I2C LiquidCrystal_I2C lcd(0x27,16,2); // Zadeklaruj obiekt biblioteki, określając parametry wyświetlania (adres I2C = 0x27, liczba kolumn = 16, liczba wierszy = 2) // symbol uint8_t = ( // Zadeklaruj tablicę 6 własnych symboli (ki yizs), każdy symbol składa się z 8 bajtów ( 0, 0,18,20,24,20,18, 0 ), // do ( 0, 0,17,19,21,25,17, 0 ), // i (10 , 4 ,17,19,21,25,17, 0 ), // th ( 0, 0.15,17,15, 5, 9, 0 ), // i ( 0, 0.14,17, 6.17 ,14, 0 ), // z (0, 0,17,17,29,19,29,0)); // s // void setup()( // lcd.init(); // rozpoczęcie pracy z wyświetlaczem LCD lcd.backlight(); // włączenie podświetlenia lcd.createChar(1, symbol); // Załaduj 1 znak „k” do wyświetlacza RAM lcd.createChar(2, symbol); // Załaduj 2 znak „i” do wyświetlacza RAM lcd.createChar(3, symbol); // Załaduj 3 znak „th” do wyświetlacza RAM wyświetlacza .createChar (4, symbol); // Załaduj 4 znak do pamięci RAM wyświetlacza lcd.createChar(5, symbol); // Załaduj 5 znak do pamięci RAM wyświetlacza lcd.createChar(6, symbol); // Załaduj 6 znaków „s” na wyświetlaczu RAM lcd.setCursor(0, 0); // Ustaw kursor na pozycji (kolumna 0, wiersz 0) lcd.print("Pycc\1\2\3 \4\5\6\1" ); // Wyprowadź tekst „Język Pyccky”, gdzie „Pycc” jest napisane po łacinie, a „kycc” jest pisane znakami z pamięci RAM wyświetlacza ) // Jeśli chcesz wydrukować znak z pamięci RAM wyświetlacza, wpisz \ i znak number // void loop()() // Kod wewnątrz funkcji loop jest stale wykonywany. Ale ponieważ wyświetlamy tekst statyczny, wystarczy, że wyświetlimy go 1 raz przy uruchomieniu, bez użycia kodu pętli

#4 Przykład

Czas, który upłynął od startu wyświetlamy na wyświetlaczu LCD1602 podłączonym magistralą I2C:

#włączać // Podłącz bibliotekę do pracy z magistralą I2C #include // Łączymy bibliotekę do pracy z wyświetlaczem LCD poprzez magistralę I2C LiquidCrystal_I2C lcd(0x27,16,2); // Zadeklaruj obiekt biblioteki, określając parametry wyświetlania (adres I2C = 0x27, liczba kolumn = 16, liczba wierszy = 2) // uint8_t tim_D, tim_H, tim_M, tim_S; // Zadeklaruj zmienne do przechowywania dni, godzin, minut i sekund. uint32_ttim; // Deklarujemy zmienną do przechowywania całkowitego czasu, jaki upłynął od początku. // Jeśli napis się nie pojawi, zamień adres 0x27 na 0x3F void setup()( // lcd.init(); // Rozpocznij pracę z wyświetlaczem LCD lcd.backlight(); // Włącz podświetlenie LCD ) // // void loop()( // // Pobranie czasu, który upłynął od początku: // tim = millis() / 1000; // Pobranie całkowitej liczby sekund (maksymalnie 4"294"967 sek ≈ 49,7 dni ).tim_S = tim % 60 ; // Uzyskaj sekundy: reszta ze wszystkich sekund podzielona przez minuty (60 s) tim = (tim-tim_S) / 60; // Uzyskaj całkowitą liczbę minut tim_M = tim % 60; // Uzyskaj minuty: reszta ze wszystkich minut na godzinę (60 min) tim = (tim-tim_M) / 60 // Pobierz całkowitą liczbę godzin tim_H = tim % 24 // Pobierz godziny: reszta ze wszystkich godzin podzielona przez dzień (24 godziny) tim_D = (tim-tim_H) / 24 // Pobierz całkowitą liczbę dni // Wydrukuj czas, który upłynął od początku: // if (millis()%1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

Funkcje wspólne dla bibliotek LiquidCrystal i LiquidCrystal_I2C:

  • zaczynać( kolumny, wiersze, ); – Wyświetl inicjalizację z liczbą kolumn, wierszy i rozmiarem znaków.
  • jasne();– Czyszczenie wyświetlacza przy kursorze ustawionym na 0,0 (zajmuje dużo czasu!).
  • Dom();– Ustaw kursor na 0,0 (zajmuje dużo czasu!).
  • wyświetlacz();– Szybkie włączanie wyświetlacza (bez zmiany danych w pamięci RAM).
  • bezWyświetlania();– Szybkie wyłączenie wyświetlacza (bez zmiany danych w pamięci RAM).
  • migać();– Aktywacja migającego kursora (z częstotliwością ok. 1 Hz).
  • nieBlink();– Wyłącz migający kursor.
  • kursor();– Włącz podkreślanie kursora.
  • bezKursora();– Wyłącz podkreślanie kursora.
  • scrollDisplayLeft();– Przewiń wyświetlacz w lewo. Przesunięcie wyświetlania współrzędnych o jedną kolumnę w lewo (bez zmiany pamięci RAM).
  • scrollWyświetlaczPrawo();– Przewiń wyświetlacz w prawo. Przesunięcie wyświetlania współrzędnych o jedną kolumnę w prawo (bez zmiany pamięci RAM).
  • z lewej na prawą();– Określa dalsze przesuwanie pozycji kursora po wyświetleniu następnego znaku o jedną kolumnę w prawo.
  • od prawej do lewej();– Wskazuje na dalsze przesunięcie pozycji kursora, po wyprowadzeniu następnego znaku, o jedną kolumnę w lewo.
  • bez automatycznego przewijania();– Wskazuje, że tekst jest dalej wyrównany do lewej strony pozycji kursora (jak zwykle).
  • Auto Scroll();– Wskazuje, że tekst zostanie dodatkowo wyrównany na prawo od pozycji kursora.
  • utwórzChar( liczba, tablica ); – Wpisz własny znak do CGRAM wyświetlacza pod określoną liczbą.
  • ustawKursor( kol, wiersz ); – Ustaw kursor w pozycji wskazanej przez numer kolumny i wiersza.
  • wydrukować( tekst ); – Wyświetlaj tekst, symbole lub cyfry na ekranie wyświetlacza. Składnia jest podobna do funkcji o tej samej nazwie w klasie Serial.

Funkcje zaimplementowane tylko w bibliotece LiquidCrystal_I2C:

  • w tym();– Inicjalizacja wyświetlacza. Musi być pierwszym poleceniem biblioteki LiquidCrystal_I2C po utworzeniu obiektu. W rzeczywistości ta funkcja znajduje się również w bibliotece LiquidCrystal, ale w tej bibliotece jest wywoływana automatycznie (domyślnie) podczas tworzenia obiektu.
  • podświetlenie();– Włącz podświetlenie wyświetlacza.
  • bez podświetlenia();– Wyłącz podświetlenie wyświetlacza.
  • ustawPodświetlenie( flaga ); – Sterowanie podświetleniem (true - enable / false - disable), stosowane zamiast funkcji noBacklight i podświetlenia.

Połączenie:

// Dla magistrali I2C:
#włączać
#włączać
LiquidCrystal_I2C LCD( adres , przełęcz , wiersz );
pusta konfiguracja()(
lcd.init();
}

Parametr:
  • adres: Wyświetl adres na magistrali I2C - 0x27 lub 0x3F
  • przełęcz:
  • wiersz:
// Dla 4-przewodowej szyny równoległej:
#włączać
płynny kryształ LCD( RS , mi , D4 , D5 , D6 , D7 );
pusta konfiguracja()(
lcd.rozpocznij( przełęcz , wiersz );
}
Parametr:
  • RS:# pinu Arduino, do którego podłączony jest pin RS
  • MI: Numer pinu Arduino, do którego podłączony jest pin E
  • D0...D3: Liczba pinów Arduino, do których podłączone są piny D0-D3
  • D4...D7: Liczba pinów Arduino, do których podłączone są piny D4-D7
  • przełęcz: liczba kolumn zaimplementowanych na wyświetlaczu
  • wiersz: liczba linii zaimplementowanych na wyświetlaczu
// Dla 8-przewodowej szyny równoległej:
#włączać
płynny kryształ LCD( RS , mi , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
pusta konfiguracja()(
lcd.rozpocznij( przełęcz , wiersz );
}
zaczynać( przełęcz , wiersz , );
Wyświetl inicjalizację z rozmiarami ekranu i znakami.
Parametr:
  • przełęcz: liczba kolumn zaimplementowanych na wyświetlaczu
  • wiersz: liczba linii zaimplementowanych na wyświetlaczu
  • rozmiar: wielkość znaku, określona przez stałą:
    LCD_5x8DOTS (domyślnie) lub LCD_5x10DOTS
/* Dla magistrali I2C: */ #include // Podłącz bibliotekę do pracy z magistralą I2C #include // Łączymy bibliotekę do pracy z wyświetlaczem LCD poprzez magistralę I2C LiquidCrystal_I2C lcd(0x3F,20,4); // Zadeklaruj obiekt biblioteki, określając parametry wyświetlania (adres I2C = 0x3F, liczba kolumn = 20, liczba wierszy = 4) // void setup()( // lcd.init(); // rozpoczęcie pracy z Wyświetlacz LCD lcd.backlight (); // Włącz podświetlenie wyświetlacza LCD... // Wyświetl informacje, które powinny być wyświetlane podczas uruchamiania ) // // void loop() // ... // Wyświetl informacje, które powinny się zmienić zgodnie z algorytmem Twojego kodu ) // /* Dla 4-przewodowej szyny równoległej: */ #include // Podłączamy bibliotekę LiquidCrystal do pracy z wyświetlaczem LiquidCrystal LCD lcd(2,3,4,5,6,7); // Zadeklaruj obiekt biblioteki, określając piny wyświetlania (RS,E,D4,D5,D6,D7) // Jeśli używanych jest 8 przewodów magistrali danych, podaj (RS,E,D0,D1,D2,D3,D4, D5, D6,D7) void setup()( // lcd.begin(16, 2); // Rozpoczęcie pracy z wyświetlaczem LCD, określając liczbę (kolumn, wierszy) ... // Informacje wyjściowe, które powinny być wyświetlane przy starcie ) / / // void loop() // ... // Informacje wyjściowe, które powinny się zmienić zgodnie z algorytmem twojego kodu ) //

Funkcje sterowania wyświetlaczem:

wyświetlacz();
Włącza wyświetlacz po jego wyłączeniu przez funkcję noDisplay.
Uwaga: Funkcja jest wykonywana szybko i bez zmian w pamięci RAM wyświetlacza.
bezWyświetlania();
Wyłącza wyświetlacz.
Dane na wyświetlaczu nie będą wyświetlane do czasu wywołania funkcji wyświetlania, ale nie zostaną usunięte z pamięci RAM, a po wywołaniu funkcji wyświetlania zostaną ponownie wyświetlone.
Uwaga: Funkcja jest wykonywana szybko i bez zmian w pamięci RAM wyświetlacza.
scrollDisplayLeft();
Przesuwa współrzędne wyświetlania o jedną kolumnę w lewo.



scrollWyświetlaczPrawo();
Przesuwa współrzędne wyświetlania o jedną kolumnę w prawo.
Ciągłe wywołanie tej funkcji stworzy efekt biegnącej linii.
Przesunięte są współrzędne zarówno dla informacji na wyświetlaczu, jak i dla tej, która będzie wyświetlana później.
Uwaga: Funkcja jest wykonywana bez zmiany pamięci RAM wyświetlacza.
Jeśli wywołasz funkcję 40 razy z rzędu, współrzędna powróci do pierwotnego punktu
jasne();
Czyszczenie wyświetlacza przy kursorze ustawionym na 0,0.
Informacje na wyświetlaczu zostaną trwale usunięte.
Uwaga: zajmuje dużo czasu.
podświetlenie();
Włącz podświetlenie wyświetlacza.
bez podświetlenia();
Wyłącz podświetlenie wyświetlacza.
Uwaga: Funkcja jest zaimplementowana tylko w bibliotece LiquidCrystal_I2C.
ustawPodświetlenie( flaga );
Sterowanie podświetleniem (zamiast funkcji noBacklight i podświetlenia).
Parametr:
  • flaga: true - włącza, a false - wyłącza podświetlenie.
Uwaga: Funkcja jest zaimplementowana tylko w bibliotece LiquidCrystal_I2C.
/* Wyświetl etykietę, aby monitorować funkcje sterujące wyświetlaniem: */ lcd.cursor(0,0); // Ustaw kursor w najwyższym rogu ekranu (kolumna 0, wiersz 0) lcd.print("iarduino.ru"); // Wyświetl tekst „iarduino.ru” (pierwsza litera „i” będzie na pozycji „0,0”, a ostatnia „u” na pozycji „10,0”, niewidoczny kursor na pozycji „11,0” ) // lcd.noDisplay(); // Wyłącz wyświetlacz (napis zniknie z wyświetlacza) lcd.display(); // Włącz wyświetlacz (etykieta pojawi się na wyświetlaczu w tym samym miejscu) lcd.scrollDisplayLeft(); // Przesuń współrzędne kolumny w lewo (na wyświetlaczu pojawi się „arduino.ru” bez pierwszej litery „i”, co wyjdzie poza wyświetlacz, ale pozostanie w jego pamięci RAM) lcd.scrollDisplayRight(); // Przesuń współrzędne kolumny w prawo (na wyświetlaczu pojawi się „iarduino.ru” w tym samym miejscu, w którym był pierwotnie wyświetlany) lcd.clear(); // Wyczyść wyświetlacz (napis na stałe zniknie z wyświetlacza) lcd.noBacklight(); // Wyłącz podświetlenie wyświetlacza lcd.backlight(); // Włącz podświetlenie wyświetlacza lcd setBacklight(0); // Wyłącz podświetlenie wyświetlacza lcd setBacklight(1); // Włącz podświetlenie wyświetlacza

Funkcje sterowania kursorem:

ustawKursor( przełęcz , wiersz );
Ustawia kursor w określonej pozycji.
Parametr:
  • przełęcz: numer kolumny (od 0).
  • wiersz: numer linii (od 0)
Dom();
Ustaw kursor w pozycji 0,0. Działa jak setCursor(0,0);
Uwaga: zajmuje dużo czasu.
migać();
Włącz migający kursor.
Uwaga: Kursor zajmuje całe pole znaku i miga z częstotliwością około 1 Hz w miejscu, w którym był wcześniej ustawiony.
nieBlink();
Wyłącz migający kursor.
Uwaga: Kursor staje się niewidoczny, ale jego pozycja jest zachowana.
kursor();
Włącz podkreślanie kursora.
Uwaga: Kursor zmieni się w znak podkreślenia i zostanie ustawiony w miejscu, w którym był wcześniej ustawiony.
bezKursora();
Wyłącz podkreślanie kursora.
Uwaga: Kursor staje się niewidoczny, ale jego pozycja jest zachowana.
lcd.setCursor(0, 1); // Ustaw kursor na pierwszym znaku drugiego wiersza (numeracja wierszy i kolumn zaczyna się od 0) lcd.home(); // Ustaw kursor na pierwszym znaku pierwszej linii (jak podczas wywoływania lcd.setCursor(0,0);) lcd.blink(); // Uwidocznienie kursora (w miejscu kursora będzie migać prostokąt) lcd.noBlink(); // Zrób niewidoczny kursor (usuń migający prostokąt) lcd.cursor(); // Uwidocznienie kursora (w miejscu kursora pojawi się podkreślenie) lcd.noCursor(); // Spraw, aby kursor był niewidoczny (usuń podkreślenie) // Jeśli kursor znajdzie się w miejscu, w którym znajduje się znak, znak ten nie znika

Funkcje kierunku i wyrównania:

z lewej na prawą();
Określa, że ​​po każdym nowym znaku pozycja kursora powinna przesunąć się o jedną kolumnę w prawo.
Uwaga: Jeśli wyświetlany jest tekst „abc”, wyświetlacz pokaże „abc”, a tekst będzie na prawo od początkowej pozycji kursora.
(Jak zwykle)
od prawej do lewej();
Określa, że ​​po każdym nowym znaku pozycja kursora powinna przesunąć się o jedną kolumnę w lewo.
Uwaga: Jeśli wyświetlany jest tekst „abc”, wyświetlacz pokaże „cba”, a tekst będzie znajdował się na lewo od początkowej pozycji kursora.
(pisanie od prawej do lewej)
bez automatycznego przewijania();
Określa, że ​​w przyszłości tekst powinien być wyrównany do lewej od początkowej pozycji kursora.
Uwaga: jeśli ustawisz kursor na pozycji 10.0 i wyświetlisz tekst, to pierwszy znak wyświetlanego tekstu będzie na tej pozycji.
(Jak zwykle)
Auto Scroll();
Określa, że ​​w przyszłości tekst powinien być wyrównany do prawej od początkowej pozycji kursora.
Uwaga: jeśli ustawisz kursor na pozycji 10.0 i wyświetlisz tekst, kursor będzie znajdował się w tej pozycji.
(Współrzędne wyświetlacza zostaną przesunięte w lewo, tak jakbyś wywoływał funkcję scrollDisplayLeft tyle razy, ile jest liter w wyświetlanym tekście)
lcd.LeftToRight(); // Powiedz kursorowi, aby przesunął się w prawo (jak zwykle w europejskim piśmiennictwie) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na wyświetlaczu zobaczymy: „ABC” (po „A” kursor przesunął się w prawo i wyświetliło się „B”, następnie kursor przesunął się w prawo i wyświetliło się „C”) lcd.rightToLeft(); // Powiedz kursorowi, aby przesunął się w lewo (jak pisanie od prawej do lewej) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na wyświetlaczu zobaczymy: "CBA" (po "A" kursor przesunął się w lewo i wyświetliło się "B", potem kursor przesunął się w lewo i wyświetliło się "C") lcd.noAutoscroll(); // Ustaw wyrównanie do lewej (jak zwykle) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Wyświetlacz pokaże: "ABC" (jak zwykle) lcd.autoscroll(); // Ustawia wyrównanie do prawej (współrzędne wyświetlania zostaną przesunięte w lewo o liczbę wyświetlanych znaków) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Na wyświetlaczu zobaczymy: „ABC” (współrzędne wyświetlacza zostaną przesunięte o 3 znaki w lewo, ponieważ po każdym znaku wywoływana jest funkcja scrollDisplayLeft)

Funkcje wprowadzania tekstu i znaków:

utwórzChar(liczba,tablica);
Wpisz własny znak do CGRAM wyświetlacza pod określoną liczbą.
Jeśli chcesz wydrukować tekst (za pomocą funkcji print), który powinien zawierać ustawiony znak, podaj ukośnik i numer, pod którym ten znak został zapisany: print("C\1MBO\2").
Parametr:
  • numer: numer, pod którym zostanie zapisany symbol.
  • szyk: tablica reprezentująca zapisywany znak.
Uwaga: Tablica składa się z kilku bajtów, których liczba jest równa liczbie ciągów znaków. Każdy ustawiony bit bajtu odpowiada ustawionemu (wyświetlanemu) pikselowi znaku.
drukuj(tekst);
Wyświetlaj tekst, symbole lub cyfry na ekranie wyświetlacza.
Parametr:
  • tekst: znak, liczba lub ciąg do wyświetlenia.
Uwaga: Składnia jest podobna do funkcji o tej samej nazwie w klasie Serial.
#włączać // Podłącz bibliotekę do pracy z magistralą I2C #include // Łączymy bibliotekę do pracy z wyświetlaczem LCD poprzez magistralę I2C LiquidCrystal_I2C lcd(0x27,16,2); // Zadeklaruj obiekt biblioteki, określając parametry wyświetlania (adres I2C = 0x27, liczba kolumn = 16, liczba wierszy = 2) // uint8_t symbol_d = (0b00000, // 1 linia symbolu "d" 0b00000, // 2 wiersz symbolu „d” „ 0b00110, // ciąg 3 znaków „e” 0b01010, // ciąg 4 znaków „e” 0b01010, // ciąg 5 znaków „e” 0b01010, // ciąg 6 znaków „e” 0b11111, // 7-znakowy ciąg "e" "0b10001); // 8 łańcuch znaków "d" W jednym wierszu można zapisać całą tablicę: uint8_t symbol_d=(0,0,6,10,10,10,31,17); // uint8_t symbol_i = (0b00000, // pierwszy ciąg symbolu „i” 0b00000, // drugi ciąg symbolu „i” 0b10001, // trzeci ciąg symbolu „i” 0b10011, // czwarty ciąg symbolu „i” symbol „i” 0b10101, // 5 ciąg znaków „i” 0b11001, // 6 ciąg znaków „i” 0b10001, // 7 ciąg znaków „i” 0b00000); // ósmy ciąg znaków "i" W jednym wierszu można zapisać całą tablicę: uint8_t symbol_i=(0,0,17,19,21,25,17,0); void setup()( // lcd.init(); // Rozpoczęcie pracy z wyświetlaczem LCD lcd.backlight(); // Włącz podświetlenie LCD lcd.createChar(1,symbol_d); // Załaduj pierwszy znak wyświetlacza LCD do pamięci wyświetlacza .createChar(2,symbol_i);// Załaduj drugi symbol do pamięci wyświetlacza LCD.clear();//Wyczyść wyświetlacz LCD.setCursor(0,0);//Ustaw kursor na najwyższym narożny lcd. print("Pa\ 1\2o"); // Wyświetl tekst "Radio", podczas gdy znaki "P", "a" , "o" są napisane po łacinie, ) // i znaki "e ", "i" są wyświetlane z pamięci wyświetlacza, podając ich numery // void loop()( // lcd.setCursor(0,1); lcd.print(" "); // kasowanie całego dolnego wiersza. setCursor(0,1); lcd.print("i"); lcd.print("arduino"); lcd.print(".ru"); // wypisz tekst "i" "arduino" ".ru" w dolnej linii delay(2000); // poczekaj 2 sekundy lcd.setCursor( 0,1); lcd.print(" "); // usuń całą dolną linię lcd.setCursor(0,1); lcd.print (12.345); // drukuj liczbę 12.34 (wydrukowuje 2 miejsca po przecinku) delay(2000 ); // czekaj 2 sekundy lcd.setCursor(0,1); lcd.pri nt(""); // usuń całą dolną linię lcd.setCursor(0,1); lcd.print(12, HEX); // wypisz 12 jako szesnastkowe opóźnienie(2000); // czekaj 2 sekundy lcd.setCursor(0,1); lcd print(" "); // usuń całą dolną linię lcd.setCursor(0,1); druk lcd(1); // wypisz opóźnienie numer 1(2000); // poczekaj 2 sekundy)

Linia biegnąca w LCD na HD44780.

Poszukiwanie „gotowego rozwiązania” dla linii biegnącej w C nie przyniosło żadnego rezultatu. Więc musiałem to zrobić sam.

Ten „kawałek” kodu pozwala wyświetlić pasek (od prawej do lewej), w dowolnym miejscu i za pomocą dowolnej liczby spacji znakowych, na wskaźnikach LCD z kontrolerem HD44780 lub podobnym.

Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że język C nie pozwala na pracę z łańcuchami „bezpośrednio”. Oznacza to, że nie można skopiować znaku z jednego ciągu do drugiego za pomocą operatora przypisania ( = ) ... w tym celu musisz użyć specjalnej funkcji strncpy(). Ogólnie rzecz biorąc, kilka funkcji jest używanych do pracy z ciągami w C. W Self-Dręczyciele osobny rozdział poświęcony jest wykorzystaniu tych funkcji. W Pomocy "e na CV_AVR opis funkcji do pracy z łańcuchami znajduje się w sekcji „Funkcje strunowe”. Prototypy tych funkcji znajdują się w pliku string.h.

"...initial string..." - znaki ciągu, z których chcesz wyświetlić w linii "uruchomiony";

"...wyświetlane znaki..." - właściwie "pełna linia".

Do zorganizowania linii biegowej wybrano następujący algorytm:

1. Wyświetlane znaki są przesuwane od prawej do lewej. Skrajna lewica jest „zagubiona”.

2. Po przesunięciu następny znak z ciągu źródłowego jest kopiowany do znaku znajdującego się najbardziej po prawej stronie.

3. Po osiągnięciu końca ciągu źródłowego pierwszy znak ciągu źródłowego staje się następny.

W przypadku przesunięcia znaku — dla przesuwanej komórki kod znaku jest odczytywany z ekranowej pamięci RAM (DDRAM) HD44780 i zapisywany w lewej komórce RAM.

Zgodnie z DataSheet na HD44780, lewy znak w górnym wierszu ma adres DDRAM równy 0x00, a lewy znak w dolnym wierszu to 0x40. Należy pamiętać, że aby odnosić się konkretnie do pamięci RAM ekranu (a nie do pamięci RAM generatora znaków), konieczne jest, aby bit RS był równy 1 (RS jest najbardziej znaczącym bitem w bajcie adresu, patrz DataSheet) .

W rezultacie otrzymujemy, że aby „odwoływać się” do drugiego znaku od lewej górnej linii, trzeba „pracować” z adresem 0x01 | 0x80 = 0x81.

Funkcje zapisywania i odczytywania „wewnętrznej zawartości” HD44780 znajdują się w bibliotece (prototypy w lcd.h).... zatem... rzeczywisty program:

/* dla CV_AVR

W tym przykładzie bieżąca linia jest wyświetlana w bitach od 8 (0xC7) do 16 dolnej linii 16-bitowego wskaźnika.

. ......

#włączać

znak bez znaku n_sim=1,m_end=43; //43 - długość linii w przykładzie
...........

błagać_łańcuch()(
znak bez znaku i;

// przesunięcie wskaźnika

jeśli(str_początek)(
dla(i=0;i<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
b_str=0;

// wpisz następny znak na skrajnej prawej pozycji

lcd_gotoxy(15,1);
lcd_putchar(ish_str);
if(++n_sim>m_end)n_sim=1;
}
}

Słowniczek:

n_sim - wskaźnik na pozycję bieżącego znaku w łańcuchu źródłowym;

m_end - całkowita liczba znaków w łańcuchu źródłowym;

beg_str- bit włączenia zmiany biegów. Dzięki niemu możesz dostosować prędkość „biegania”;

ish_str - ciąg źródłowy.

Najprawdopodobniej każdy z istniejących kompilatorów C posiada funkcje biblioteczne do pracy z HD44780. Dlatego „przerobienie” programu dla „swojego” kompilatora nie będzie trudne.

„Gotuję” ciąg źródłowy za pomocą dobrze znanego narzędzia „HD44780.exe”. Przy jego użyciu komentarze wskazują długość linii: "/* Maksymalna długość linii: 43 bajty */"

Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
tak
Nie
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję Ci. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!