ОТОБРАЖЕНИЕ СВОИХ СИМВОЛОВ И ПРОСТЫХ КАРТИНОК НА LCD 1602/LCD2004. ЧАСТЬ I.

Здравствуй, дорогой читатель! Сегодняшняя тема – отображение своих символов и простых картинок на символьном дисплее. Данная статья будет полезна, если вы не можете найти нужный символ в стандартном каталоге, доступном на дисплее, либо хотите отобразить простую графику.

В первой части будет рассмотрено простое отображение собственных символов.

СБОРКА СХЕМЫ

Про то, как подключить дисплей LCD1602/LCD2004 к Arduino было сказано уже много раз, в напоминание мы разместим небольшую схему. Если у вас нет потенциометра, то вы можете его исключить из схемы. В остальном – просто соедините требуемые контакты проводами.

СОЗДАНИЕ СИМВОЛОВ

Следующая задача, которая перед нами стоит – это создание собственного набора символов. Как вы могли заметить – символы на дисплее всё равно состоят из пикселей. И есть способ сделать так, чтобы можно было выводить свои наборы пикселей, вместо предустановленных.

Изображение, выводимое в каждой ячейке дисплея, кодируется как 7 (а в некоторых случаях 8) байтов. В каждом из байтов значение имеют только младшие 5 бит. Как вы уже смогли понять, каждый элемент массива – это строка, а каждый бит в нём – это отдельный пиксель.

А теперь порисуем! К счастью, есть сайт, где вы можете получить битовое представление требуемого изображения. (http://www.quinapalus.com/hd44780udg.html)

Просто щёлкая на изображение вы можете сформировать требуемый пиксель, к примеру:

Что позволит нам вывести вот такую жирненькую мордочку кошки:

Запомним эти данные и приступим к программированию.

ПРОГРАММИРОВАНИЕ

Дисплей 1602 позволят одновременно отображать не более 8 собственных символов (встроенных сколько-угодно).

Для того, чтобы создать символ, необходимо использовать команду createChar(num, data), где

  • num – номер собственного символа (от 0 до 7 включительно)
  • data – тот самый массив из 7(8) байтов.

Для того чтобы определить каждый символ достаточно записать.

<pre class="brush: cpp">Byte l[7] = {0, 2, 5, 24, 24, 0, 0};

Byte m[7] = {0, 0, 0, 14, 14, 0, 0};

Byte r[7] = {0, 8, 20, 3, 3, 0, 0};</pre>

А после инициализации дисплея следует написать:

lcd.createChar(0, l);

lcd.createChar(1, m);

lcd.createChar(2, r);

И, собственно, вывести символы командой:

lcd.write(byte(0));

lcd.write(byte(1));

lcd.write(byte(2));

Выражение byte(x) – преобразует число x к типу byte.

И в конце рассмотрим код для отображения символа Arduino на LCD1602 с размером символов (5x8).

// Подключаем библиотеку для работы с дисплеем

#include <LiquidCrystal.h

 

// Задаём пины, к которым подключен дисплей (по рисунку в начале статьи)

 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 

// Задаём наши символы. Здесь префикс «B» говорит о том, что далее записано

// число в двоичном коде, т.е. B00011 = 5

 

byte a3[8]= { B00011,

            B00111,

            B01100,

            B11000,

            B10000,

            B00000,

                      B00000

};

 

 

byte a2[8]= {B00000,

            B00000,

            B00000,

            B00000,

            B10001,

            B11111,

            B01110

};

 

byte a1[8]={B11000,

            B01100,

            B00110,

            B00011,

            B00001,

            B00000,

            B00000

};

 

byte a4[8]={ B00000,

            B00000,

            B00000,

            B00001,

            B00011,

            B00110,

            B01100,

            B11000

 

};

 

byte a5[8]={ B00000,

            B01110,

            B11111,

            B10001,

            B00000,

            B00000,

            B00000,

            B01110,

            B00000,

};

 

byte a6[8]={  B00000,

            B00000,

            B00000,

            B10000,

            B11000,

            B01100,

            B00110,

            B00011

};

 

byte a7[8]={ B00000,

            B01110,

            B11111,

            B10001,

            B00000,

            B00000,

            B00000,

            B00000,

 

};

 

byte a8[8]={B00100,

            B01110,

            B00100,

            B00000,

            B10001,

            B11111,

            B01110

};

 

// Процедура инициализации

void setup()

{

  lcd.begin(16, 2);       // Запуск дисплея.

 

lcd.print("Arduino&