Рисуем свои символы в LCD

В этой статье мы рассмотрим тему, которую уже мусолили очень много. А именно как сделать для LCD1602 свои символы для отображения.

Была у меня задумка, автоматически наблюдать за температурой в парной бани, когда она нагревается.
Я её реализовал, но была она на Arduino Uno. Понятно, захотелось её поместить в корпус, однако засовывать целую плату не было никакого желания, с этого и началось изучение AVR.

К ATMEGA16 был подключен экран LCD1602, программирование осуществляется в CVAVR (CodeVision AVR), моделирование в Proteus.

При подключении LCD1602 часто бывает отсутствие русского языка и дополнительных символов. Мне для моего проекта нужны были значок градуса и некоторые символы русского алфавита.

Для этого для начала нужно за пределами функций, после объявления констант и подключения библиотек, объявить свой тип данных и создать переменную этого типа соответствующую одному символу экрана (обычно это 7х5 пикселей).

typedef unsigned char byte;
flash byte smile[8] = 
{
	B00010,
	B00001,
	B11001,
	B00001,
	B11001,
	B00001,
	B00010,
	B00000,
};

для экономии места символы можно писать в 16-ричном виде

flash byte smile[8]={0x2,0x1,0x19,0x1,0x19,0x1,0x2,0x0,};

Далее необходимо описать функцию, которая сохранит наш символ в память экранчика

void define_char(byte flash *pc, byte char_code) {
    byte i,a;
    a=(char_code<<3)|0x40;
    for (i=0;i<8;i++){
        lcd_write_byte(a++,*pc++);
        }
}

заключительным этапом нужно определить символ. Это необходимо делать строго после инициализации lcd, т.е. строго после lcd_init(); вставить define_char(gradus,0); для всех символов. Символы будут храниться по адресу 0x00, 0x01 и т.д. Надо сказать, что количество символов ограничено.

Для отображения символов на экране необходимо в цикле подставлять с помощью команды

lcd_putchar(0);

где 0 ничто иное как адрес, который был указан при определении символа.

Чтобы нарисовать символ, можно воспользоваться кодом, написанным одним энтузиастом
http://codepen.io/nardist01/pen/RPPvMg?editors=101
в своей версии добавил отображение hex
https://jsfiddle.net/Ristee/gxbgfLc6/3/

Свои символы в LCD1602

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.