Рисуем свои символы в 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/
Свои

Leave a comment

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