Жк дисплей розпинування. Підключення та робота з дисплеєм WH1602. Бібліотеки для роботи з i2c LCD дисплеєм

За весь час захоплення електронікою мені довелося користуватися РКД від кількох виробників. DataVision, WINSTAR, Uniworld Technology Corp.. Вони відрізнялися типом контролера, кількістю висновків і довгими рядками, але при цьому всі мали однакову схему підключення, систему команд і обслуговувалися однією і тією ж програмою з боку мікроконтролера. Тому, хоча мова зараз піде про дисплей WH0802A фірми WINSTAR, все нижче сказане застосовно до символьних РК-дисплеїв та інших фірм.

Отже, підключаємо дисплей WH0802A-YGH-CT до мікроконтролера

WH0802A – дворядковий символьний дисплей на 8 знайомств із вбудованим керуючим контролером KS0066.
Розбираємо призначення висновків дисплея.

Деякі дисплеї мають два додаткові висновки – висновки підсвічування +LED і –LED. Причому якщо висновки є – це ще не означає, що є і підсвічування. Як і навпаки. У мого дисплея підсвічування є, а висновків керування немає.

За замовчуванням підсвічування дисплея WH0802A-YGH-CT вимкнено. Щоб її включити, потрібно виконати парочку нехитрих маніпуляцій, а саме - встановити дві перемички і впаяти струмообмежувальний резистор (дивись на фотці RK, JF і RA відповідно).

Схема підключення дисплея

Це типова схема увімкнення символьних LCD. Схему управління підсвічуванням дисплея ми задіяти не будемо, але я її про всяк випадок намалював.

Початковий код

Подавши живлення на схему, необхідно покрутити регулятор контрасту (резистор R1). Якщо на екранчику з'явився верхній рядок, значить, він живий і час приступати до написання коду. На початковому етапі ми будемо використовувати 8-розрядну шину. Щоб отримати перші результати, нам знадобиться написати дві функції – функцію запису даних та функцію запису команд. Відрізняються вони лише одним рядком – коли записуються дані, сигнал RS має бути 1, коли записується команда, RS має бути 0. Функції читання ми поки що використовуватимемо, тому сигнал R/W завжди 0.

Цикл запису для 8-розрядної шини виглядає наступним чином:
1. Встановити RS (0 – команда, 1 – дані)
2. Вивести значення байта даних на шину DB7…DB0
3. Встановити E=1
4. Програмна затримка
5. Встановити E=0
6. Програмна затримка 2

Контролер символьного РК-дисплея не має нескінченної швидкодії, тому між деякими операціями використовуються програмні затримки. Перша потрібна для утримання деякий час строб сигналу, друга, щоб контролер встиг записати дані чи виконати команду. Величини затримок завжди наводяться в описі на контролер дисплея і потрібно завжди витримувати хоча б їхнє мінімальне значення, інакше неминучі збої в роботі контролера.

Взагалі контролер дисплея має так званий прапор зайнятості – BF. Якщо прапор 1 – контролер зайнятий, якщо 0 – вільний. Замість другої програмної затримки можна читати прапор зайнятості та перевіряти, коли контролер дисплея звільниться. Але оскільки ми хочемо швидко отримати перші результати, з прапором зайнятості розбиратимемося потім.

//підключаємо символьний РК-дисплей до AVR
#include
#include

//порт до якого підключена шина даних РКД
#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDRX_DATA DDRD

//порт якого підключені управляючі висновки
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

//номера висновків мікроконтролера
//до яких підключені керуючі висновки РКД
#define RS 5
#define RW 6
#define EN 7

//макроси для роботи з бітами
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define F_CPU 8000000
#define _delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
#define _delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));

//функція запису команди
void LcdWriteCom( unsigned char data)
{
ClearBit(PORT_SIG, RS); // встановлюємо RS 0
PORT_DATA = data; // Виводимо дані на шину
SetBit(PORT_SIG, EN); // встановлюємо Е 1
_delay_us (2);
ClearBit(PORT_SIG, EN); // встановлюємо Е 0
_delay_us(40);

//функція запису даних

void LcdWriteData( unsigned char data)
{
SetBit(PORT_SIG, RS); //встановлюємо RS 1
PORT_DATA = data; //виводимо дані на шину
SetBit(PORT_SIG, EN); //встановлюємо Е 1
_delay_us (2);

ClearBit(PORT_SIG, EN); // встановлюємо Е 0

Delay_us(40);
}

int main( void )
{
while (1);
return 0;
}

Тут немає складних місць, все має бути зрозумілим. Йдемо далі.

Будь-який РК-дисплей перед використанням необхідно ініціалізувати.Процес ініціалізації зазвичай описаний у dataheet`е на контролер дисплея. Але навіть якщо там немає інформації, послідовність, швидше за все, буде такою.

1. Подаємо харчування

2. Чекаємо >40 мс

3. Подаємо команду Function set

DL- біт установки розрядності шини
0 - 4 розрядна шина, 1 - 8 розрядна шина

N- біт установки кількості рядків дисплея
0 – однорядковий режим, 1 – дворядковий режим

F- біт установки шрифту
0 – формат 5*8, 1 – формат 5*11

* - не важливо, що буде в цих бітах

4. Подаємо команду Display ON/OFF

D– біт увімкнення/вимкнення дисплея
0 – дисплей вимкнено, 1 – дисплей увімкнено

C– біт увімкнення/вимкнення курсору
0 – курсор вимкнено, 1 – курсор увімкнено

B- біт включення мерехтіння
0 – мерехтливий курсор увімкнений, 1 – мерехтливий курсор вимкнений

5. Подаємо команду Clear Display


6. Чекаємо > 1,5 ms

7. Подаємо команду Entry Mode Set

I/D- Порядок збільшення / зменшення адреси DDRAM (ОЗУ даних дисплея)
0 – курсор рухається вліво, адреса зменшується на 1, 1 – курсор рухається вправо, адреса збільшується на 1

SH- Порядок зсуву всього дисплея
0 – зсуву немає, 1 – зсув відбувається згідно з сигналом I/D – якщо він 0 – дисплей зсувається вправо, 1 – дисплей зсувається вліво

Для нашого прикладу функція ініціалізації виглядатиме так

Ми навчилися: керувати мікроконтролером і керувати чимось за допомогою мікроконтролера. Тепер, щоб зробити наш пристрій більш доброзичливим, підключатимемо до нього дисплей.

Відразу обмовлюся дисплей - символьний. Це означає, що всередині в нього, в пам'яті, вже є алфавіт. Все, що нам потрібно, дати команду вивести рядок.

Дисплеї бувають різні: різний колір підсвічування екрана, різна кількість рядків, різна кількість символів у рядку. Тому тут розглядається дисплей WH0802A-YGK-CT, 2 рядки по 8 символів, підсвічування жовте світлодіодне.

Створимо проект у CodeVision. На вкладці LCD вкажемо порт, до якого буде підключено наш дисплей (PORTD). У рядку Char/Line вказуємо кількість символів нашого РК-дисплея (8).

Генеруємо, зберігаємо проект. Наводимо код до такого виду:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include #asm .equ __lcd_port= 0x12; PORTD #endasm #include void main(void ) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ) ; while (1 ) ( ) ; )

#include #asm .equ __lcd_port=0x12 ;PORTD #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); while (1) ( ); )

Трохи змінимо код нашої програми:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #asm .equ __lcd_port= 0x12 #endasm #include void main(void ) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ) ; lcd_gotoxy(0 , 0 ) ; lcd_putsf("lesson3" ) ; #pragma rl+ lcd_gotoxy(0 ); #pragma rl-while (1) ();

#include #asm .equ __lcd_port=0x12 #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); lcd_gotoxy(0,0); lcd_putsf("lesson3"); #pragma rl+ lcd_gotoxy(0,1); lcd_putsf("У) #pragma rl-while (1) ( );

Запустимо код, що вийшов, на симуляцію в ISIS Proteus. Як видно перший рядок відображається правильно, а ось другий кракозяб. Справа в тому, що протеус не розпізнає російський алфавіт і якщо ваш дисплей не підтримуватиме його, то на реальному дисплеї теж будуть незрозумілі символи.

Тепер потрібно випробувати це на справжньому дисплеї. Тут є свої нюанси. Відкриваємо даташит на наш дисплейчик і бачимо таку таблицю з розпинуванням:

Напевно, тут все очевидно, але все ж таки:

1 - Земля 0В.

2 - Харчування +5В.

3 - Управління контрастністю. Підключається через змінний резистор.

Світлодіодна підсвітка. Підключаємо як звичайний світлодіод.

А - підключаємо до "+" через струмообмежуючий резистор, До - підключаємо до "землі" (GND).

Ще один важливий момент - мікроконтролер повинен тактуватися від кварцового резонатора, інакше коректна робота не гарантується.

Зовнішній вигляд прошитого пристрою

Файл прошивки та протеуса доступні

При роботі з Arduino іноді виникає необхідність вивести будь-які дані на дисплей, але передавати для цього дані на ПК має сенс тільки якщо пристрій використовуватиметься у зв'язці з ПК.

А як бути з автономними пристроями?

Тут на допомогу прийдуть LCD-дисплеї.

Розглянемо LCD-дисплеї на базі контролера HD44780

  • Цей монохромний дисплей має опціональне підсвічування та може відображати 2 рядки по 16 символів.
  • Роздільна здатність символів - 5x8 пікселів. Існує підтримка кирилиці.
  • Чим хороші такі дисплеї? LCD-екран HD44780 – стандартний і часто використовується серед невеликих монохромних LCD-дисплеїв, тому бібліотека для роботи з дисплеями на його базі записана професіоналами.
  • Розробники Arduino написали бібліотеку для своєї платформи, і вона називається LiquidCrystal.
  • Її ми використовуємо для роботи з вибраним мною дисплеєм.

Для підключення LCD екрану нам знадобляться такі компоненти

Будь-яка Arduino (у нашому випадку Arduino UNO) LCD-дисплей на базі HD44780


Breadboard (макетна плата)

  • З'єднувальні дроти
  • Потенціометр (не обов'язковий)
  • 3 - Vo, керування контрастністю напругою ⇨ вихід потенціометра
  • 4 - RS, вибір регістру ⇨ пін 12 Arduino
  • 5 - R/W, читання/запис ⇨ земля (режим запису)
  • 6 - E, він же Enable, строб по спаду ⇨ пін 11 Arduino
  • 7-10 – DB0-DB3, молодші біти 8-бітного інтерфейсу; не підключені
  • 11-14 - DB4-DB7, старші біти інтерфейсу ⇨ піни 5-2 Arduino
  • 15 - A, живлення для підсвічування ⇨ +5 В
  • 16 - K, підсвічування ⇨ GND

Цей дисплей, як і інші на контролері HD44780, підтримує два варіанти паралельного інтерфейсу:

  • 8-бітний, висновки DB0-DB7, за один такт передається 1 байт (8 біт)
  • 4-бітний, висновки DB4-DB7, за один такт передається половина байта (4 біти)

Сенсу використовувати 8-бітний варіант немає, тому що це вимагає більше ніг, а виграшу в швидкості все одно немає: частота оновлення дисплея не більше 10 разів на секунду, так що ми все одно не зможемо побачити дані, що часто оновлюються. Тому висновки DB0-DB3 залишаємо непідключеними.

Екран підключений та готовий до прийому даних. Залишилось написати програму для Arduino.

Програмування

Для виведення тексту з Arduino скористаємось бібліотекою Liquid Crystal, про яку ми говорили вище.

Для роботи датчика на Arduino потрібно завантажити та встановити бібліотеку DHT11.


Завантажити бібліотеку можна тут.


Після того, як ми завантажили потрібну бібліотеку, її потрібно правильно встановити.

завантажені файли потрібно перемістити наступним шляхом:



Диск C Progtam Files Arduino Libraries


Після того, як ми все зробили, перейдемо до найважливішої сходинки, а саме до програмування.
#include

/* Підключаємо бібліотеку для роботи з LCD */
/* Створюємо об'єкт LCD-дисплея, використовуючи конструктор класу LiquidCrystal
* з 6 аргументами. Бібліотека за кількістю аргументів сама визначить,
* що потрібно використовувати 4-бітний інтерфейс.
* Вказуємо, до яких пін Arduino підключені висновки дисплея:
*/
* RS, E, DB4, DB5, DB6, DB7

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
{
Void setup ()
/* Ініціалізуємо дисплей: 2 рядки по 16 символів */
lcd. begin (16, 2);
/* Виводимо на дисплей фразу */
}

lcd. print ("hello from HelpDuino!");
{
Void loop ()
/* Встановлюємо курсор в 1 стовпець 2-го рядка. Нумерація йде з нуля,
*/

* Першим аргументом йде номер стовпця.
lcd. setCursor (0, 1);
/* Виводимо на дисплей число секунд, що минули з моменту старту Arduino */
}


lcd. print (millis () / 1000);

Кожен радіоаматор після деякої кількості простих саморобок приходить до мети сконструювати щось грандіозне з використанням датчиків і кнопок. Адже набагато цікавіше виводити дані на дисплей, ніж монітор порту. Але тоді постає питання: який екран вибрати? І взагалі, як підключати його, що потрібне для підключення? Відповіді на ці питання будуть розглянуті у цій статті.

LCD 1602

Серед багатьох варіантів серед дисплеїв окремо хочеться відзначити саме дисплей LCD1602 на базі контролера HD4478. Існує цей дисплей у двох кольорах: білі літери на блакитному тлі, чорні літери на жовтому фоні. Підключення LCD 1602 до Arduino також не викликає жодних проблем, оскільки є вбудована бібліотека, і нічого завантажувати додатково не потрібно. Дисплеї відрізняються не лише ціною, а й розміром. Найчастіше радіоаматорами використовується 16 x 2, тобто 2 рядки по 16 символів. Але існує також і 20 х 4, де 4 рядки по 20 символів. Розміри та колір не відіграють жодної ролі у підключенні дисплея lcd 1602 до Arduno, підключаються вони однаково. Кут огляду складає 35 градусів, час відгуку дисплея – 250 мс. Працювати може при температурах від -20 до 70 градусів за Цельсієм. При роботі використовує 4 мА на екран і підсвічування 120 мА.

Де використовується?

Даний дисплей має свою популярність не тільки у радіоаматорів, а й у великих виробників. Наприклад, принтери, кавові апарати також використовують LCD1602. Це зумовлено її низькою ціною, коштує цей дисплей на китайських майданчиках 200-300 рублів. Купувати варто саме там, тому що у наших магазинах націнки на цей дисплей дуже високі.

Підключення до Arduino

Підключення LCD 1602 до Arduino Nano та Uno не відрізняється. З дисплеєм можна працювати у двох режимах: 4 біти та 8. При роботі з 8-бітним використовуються і молодші, і старші біти, а з 4-бітним – лише молодші. Працювати з 8-бітним особливого сенсу немає, оскільки додасться для підключення ще 4 контакти, що не доцільно, адже швидкості вище не буде, межа оновлень дисплея – 10 разів на секунду. Взагалі, для підключення lcd 1602 до Arduino використовується багато дротів, що завдає деяких незручностей, але є спеціальні шилди, але про це пізніше. На фотографії зображено підключення дисплея до Arduino Uno:

Приклад програмного коду:

#include // Додаємо необхідну бібліотеку LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup()( lcd.begin(16, 2); // Задаємо розмірність екрану lcd.setCursor(0, 0); // Встановлюємо курсор на початок 1 рядки lcd.print("Hello, world!"); // Виводимо текст lcd.setCursor(0, 1); // Встановлюємо курсор на початок 2 рядки lcd.print("сайт") // Виводимо текст ) ()( )

Що робить код? Насамперед підключається бібліотека для роботи з дисплеєм. Як уже говорилося вище, ця бібліотека вже входить до складу Arduino IDE та додатково завантажувати та встановлювати її не треба. Далі визначаються контакти, підключені до висновків: RS, E, DB4, DB5, DB6, DB7 відповідно. Після цього задається розмірність екрану. Так як ми працюємо з версією, де 16 символів та 2 рядки, то пишемо такі значення. Встановлюємо курсор на початок першого рядка та виводимо наш перший текст Hello World. Далі ставимо курсор на другий рядок та виводимо назву сайту. От і все! Було розглянуте підключення lcd 1602 Arduino Uno.

Що таке I2C і навіщо він потрібний?

Як говорилося вище, підключення дисплея займає дуже багато контактів. Наприклад, при роботі з кількома датчиками та дисплеєм LCD 1602 контактів може просто не вистачити. Найчастіше радіоаматорами використовуються версії Uno чи Nano, де не так багато контактів. Тоді люди вигадали спеціальні шилди. Наприклад, I2C. Він дозволяє підключати дисплей лише у 4 контакти. Це вдвічі менше. Продається модуль I2C як окремо, де потрібно припаювати, так і вже припаяний до дисплея LCD 1602.

Підключення за допомогою I2C модуля

Підключення LCD 1602 до Arduino Nano з I2C займає мало місця, всього 4 контакти: земля, живлення та 2 виходи для передачі даних. Живлення та землю підключаємо на 5V та GND на Arduino відповідно. Два контакти, що залишилися: SCL і SDA підключаємо до будь-яких аналогових пін. На фотографії можна побачити приклад підключення lcd 1602 до arduino з I2C модулем:

Програмний код

Якщо для роботи з дисплеєм без модуля необхідно було скористатися лише однією бібліотекою, то для роботи з модулем потрібно дві бібліотеки. Одна з них вже є у складі Arduino IDE – Wire. Іншу бібліотеку, LiquidCrystal I2C, треба завантажувати окремо та встановлювати. Для встановлення бібліотеки в Arduino вміст завантаженого архіву необхідно завантажити до кореневої папки Libraries. Приклад програмного коду з використанням I2C:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); // Встановлюємо дисплей void setup() ( lcd.init(); lcd.backlight();// Включаємо підсвічування дисплея lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Встановлюємо курсор на другий рядок і нульовий символ. lcd.setCursor(0, 1); // Виводимо на екран кількість секунд з моменту запуску ардуїни lcd.print(millis()/1000); )

Як можна побачити, код майже не відрізняється.

Як додати символ?

Проблемою цих дисплеїв є те, що немає підтримки кирилиці та символів. Наприклад, вам необхідно якийсь символ завантажити в дисплей, щоб він міг його відображати. Для цього дисплей дозволяє створити до 7 символів. Подайте таблицю:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Якщо 0 – там нічого немає, якщо 1 – це зафарбована ділянка. У прикладі вище можна побачити створення символу "смайл, що посміхається". На прикладі програми в Arduino це буде виглядати так:

#include #include // Лобуємо необхідну бібліотеку // Бітова маска символу посмішки byte smile = (B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup()( lcd.begin(16, 2); // Задаємо розмірність екрану lcd.createChar(1, smile); // Створюємо символ під номером 1 lcd.setCursor(0, 0); // Встановлюємо курсор на початок 1 рядка lcd.print("\1"); // Виводимо смайлик (символ під номером 1) - "\1" ) void loop()( )

Як можна побачити, була створена бітова маска така сама, як і таблиця. Після створення її можна виводити як змінну на дисплей. Пам'ятайте, що в пам'яті можна зберігати лише сім символів. В принципі, цього буває достатньо. Наприклад, якщо необхідно показати символ градуса.

Проблеми, при яких дисплей може не працювати

Трапляються такі випадки, коли дисплей не працює. Наприклад, вмикається, але не показує символи. Або зовсім не включається. Спочатку подивіться, чи правильно ви підключили контакти. Якщо ви використовували підключення lcd 1202 Arduino без I2C, то дуже легко заплутатися в проводах, що може стати причиною некоректної роботи дисплея. Також слід переконатися в тому, що контрастність дисплея збільшена, оскільки при мінімальній контрастності навіть не видно, чи вмикається LCD 1602 чи ні. Якщо це нічого не допомагає, то, можливо, проблема може криється в пайці контактів, це під час використання модуля I2C. Також частою причиною, коли дисплей може не працювати, є неправильне встановлення I2C адреси. Справа в тому, що виробників багато, і вони можуть ставити різну адресу, потрібно виправляти тут:

LiquidCrystal_I2C lcd(0x27,16,2);

У дужках можна побачити два значення, 0x27 і 16,2 (16, 2 - є розміром дисплея, а 0x27 саме адреса I2C). Замість цих значень можна спробувати встановити 0x37 або 0x3F. Ну і ще однією причиною є просто несправний LCD 1602. З огляду на те, що практично все для Arduino виготовляється в Китаї, то не можна бути впевненим на 100%, що придбаний товар не є шлюбом.

Плюси та мінуси LCD 1602

Розглянемо плюси та мінуси дисплея LCD 1602.

  • Ціна. Цей модуль можна придбати за демократичною ціною в китайських магазинах. Ціна складає 200-300 рублів. Іноді продається навіть разом із I2C модулем.
  • Легко підключати. Мабуть, ніхто зараз не підключає LCD 1602 без I2C. А з цим модулем підключення займає всього 4 контакти, ніяких павутин з проводів не буде.
  • Програмування. Завдяки готовим бібліотекам працювати з цим модулем легко всі функції вже прописані. А при необхідності додати свій символ витрачається лише кілька хвилин.
  • За час використання тисячами радіоаматорами жодних великих мінусів виявлено не було, тільки трапляються випадки купівлі шлюбу, оскільки в основному використовуються китайські варіанти дисплеїв.

У цій статті було розглянуто підключення 1602 Arduino, а також були представлені приклади програм для роботи з цим дисплеєм. Він справді є у своїй категорії одним із найкращих, не просто так його обирають тисячі радіоаматори для своїх проектів!

Всі давно звикли, що кожен електронний пристрій має екран, за допомогою якого він дає людині будь-яку корисну інформацію. MP3-плеєр показує назву треку, що грається, пульт квадрокоптера відображає польотну телеметрію, навіть пральна машина виводить на дисплей час до кінця прання, а на смартфоні взагалі розміщується цілий робочий стіл персонального комп'ютера! Швидше за все, вашому черговому пристрою теж не завадить якийсь невеликий дисплейчик 🙂 Спробуємо зробити простий електронний годинник! А як табло використовуємо поширений і дешевий символьний рідкокристалічний дисплей 1602. Ось прямо такий, як на картинці: Крім 16х2, досить популярним вважається символьний дисплей 20х4 (чотири рядки по 20 символів), а також графічний дисплей з роздільною здатністю 128х64 пікселів. Ось вони на картинках:

1. Підключення символьного РК-дисплея 1602

дисплей 1602 має 16 висновків. Зазвичай вони нумеруються ліворуч, якщо дивитися на нього так як на картинці. Іноді висновки підписуються типу: DB0, DB1, EN і т.п. А іноді просто вказують номер виводу. У будь-якому випадку, список висновків завжди однаковий: 1 - "GND", земля (мінус харчування); "R/W", напрямок передачі (запис/читання); 6 - "EN", синхронізація; 7-14 - "DB0", . +5В); 16 - катод підсвічування (земля). Лінії VEE, RS та чотири лінії даних DB4, DB5, DB6, DB7 підключаємо до цифрових висновків контролера. Лінію «R/W» підключимо до «землі» контролера (оскільки нам потрібна лише функція запису в пам'ять дисплея). Підсвічування поки підключати не будемо, з цим, я вважаю, ви самі легко розберетеся 🙂 Принципова схема підключення дисплея до Ардуїно Уно
Зовнішній вигляд макету
Про всяк випадок ще й у вигляді таблички:
РК дисплей 1602 1 2 4 6 11 12 13 14 15 16
Ардуїно Уно GND +5V 4 5 6 7 8 9 +5V GND

2. Програмуємо "Hello, world!"

Для роботи з РК-дисплеями різних розмірів і типів, в редакторі Arduino IDE є спеціальна бібліотека LiquidCrystal. Щоб підключити бібліотеку, запишемо першим рядком нашої програми наступний вираз: #include Далі, нам потрібно вказати, які висновки Ардуїно ми використовували для підключення дисплея. Цю інформацію ми вкажемо при ініціалізації модуля: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Далі вкажемо розмір дисплея за допомогою команди «begin»: lcd.begin(16, 2); Нагадую, у нашому дисплеї є два рядки, по 16 символів у кожному. Нарешті, для виведення тексту нам знадобиться звичайна функція «print». Висновок за допомогою цієї функції всім відомої фрази буде виглядати наступним чином: lcd.print("Hello, world!"); LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); lcd.print("Hello, world!"); ) void loop()( ) Завантажуємо її на Ардуїно Уно, і дивимося що відбувається на дисплеї. Можливо три основні ситуації 🙂 1) На дисплеї з'явиться напис «Hello, world!». Отже, ви все правильно підключили, і контраст якимось чудовим чином виявився спочатку правильно налаштованим. Радіємо, і переходимо до наступного розділу. 2) На дисплеї з'явиться ціла низка чорних прямокутників – потрібно налаштувати контраст! Саме для цього ми додали до ланцюга потенціометр з ручкою. Крутимо його від одного краю до іншого, до моменту поки на дисплеї не з'явиться чіткий напис. 3) Два ряди чорних прямокутників. Швидше за все, ви щось наплутали при підключенні. Перевірте тричі всі дроти. Якщо не знайдете помилку – попросіть кота перевірити!

3. Програмуємо годинник

Тепер коли дисплей точно працює, спробуємо перетворити наш нехитрий пристрій на справжній електронний годинник. Увага!Для виведення часу нам знадобиться бібліотека «Time». Якщо вона ще не встановлена, можна завантажити архів за посиланням . Підключимо її: #include Потім встановимо поточні дату і час за допомогою функції setTime: setTime (23, 59, 59, 12, 31, 2015); Тут все зрозуміло: години, хвилини, секунди, місяць, число, рік. Для виведення дати використовуємо купу функції:
  • year() - поверне нам рік;
  • month() - Місяць;
  • day() - день;
  • hour() - година;
  • minute() - поверне хвилину;
  • second() – секунду.
Тепер звернемо увагу на який факт. Якщо порахувати кількість символів у типовому записі дати: «31.12.2015 23:59:59», отримаємо 19. А в нас лише 16! Не влазить, однак, в один рядок. Вирішити проблему можна ще однією корисною функцією - "setCursor". Ця функція встановлює курсор на потрібну позицію. Наприклад: lcd.setCursor(0,1); Встановить курсор на початок другого рядка. Курсор – це місце символу, з якого розпочнеться виведення тексту наступною командою «print». Скористайтеся цією функцією для виведення дати в першому рядку, а часу в другому. З виведенням дати та часу тепер все ясно. Залишилися рутинні речі. Наприклад, після кожного заповнення дисплея ми будемо його чистити функцією «clear()»: lcd.clear(); А ще нам немає сенсу виводити дані на дисплей частіше ніж раз на секунду, тому між двома ітераціями зробимо паузу 1000 мілісекунд. Отже, склавши всі разом, отримаємо таку програму: #include #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup()( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 ранку, десятого січня 2015 року ) void loop()( lcd.clear(); lcd.print(day()); lcd.print("."); lcd.print(":"); lcd.print(":"); (1000);) Завантажуємо скетч на Ардуїно Уно, і спостерігаємо за ходом годинників! 🙂 Для того щоб закріпити отримані знання, рекомендую прокачати наші годинники до повноцінного будильника. Всього на все потрібно додати пару кнопок і зумер 🙂