Рисуем свой символ на LCD дисплее 1602А.
В прошлых статьях мы рассмотрели как инициализировать и выводить символы на LCD дисплей, пользуясь таблицей знакогенератора(CGROM). Также в прошлых статьях упоминалось про такой вид памяти, как CGRAM, в которой можно хранить собственные символы. Надо сказать, что размер её ограничен и может вмещать до 8 символов.
Один из символов, который может пригодиться и которого нет в стандартной таблице знакогенератора(CGROM) - обратный слеш. Давайте нарисуем его.
Первым делом мы берём листок в клеточку, обводим на нём прямоугольник 5 на 8 клеточек, и рисуем наш символ.
Запись в CGRAM производится построчно, начиная с верхней строки. Под каждый символ отводится 8 байт, а в каждом байте используются только первые пять бит. Тогда наш символ можно представить в виде массива, состоящего из восьми элементов.
Первым делом надо указать позицию в CGRAM, с которой начнём писать, далее значение адреса автоматически будет инкрементироваться(увеличиваться). Таким образом, записать символ в CGRAM можно следующим образом.
Давайте разберемся почему адрес CGRAM равен 0х08. Как уже писалось выше, на каждый символ отводится по 8 байт, как показано на картинке ниже.
Таким образом, начав запись с адреса 0х08, мы записали наш символ в первый столбец(отсчет столбцов начинается с нуля).
Отлично, символ в памяти, осталось его вывести на экран, для этого надо указать позицию на экране, куда хотим его вывести и записать в эту позицию данные, хранящиеся в CGRAM.
Код всего проекта для Atmega16 можно развернуть ниже.
На этом всё.
Один из символов, который может пригодиться и которого нет в стандартной таблице знакогенератора(CGROM) - обратный слеш. Давайте нарисуем его.
Первым делом мы берём листок в клеточку, обводим на нём прямоугольник 5 на 8 клеточек, и рисуем наш символ.
Запись в CGRAM производится построчно, начиная с верхней строки. Под каждый символ отводится 8 байт, а в каждом байте используются только первые пять бит. Тогда наш символ можно представить в виде массива, состоящего из восьми элементов.
const char backslash[8] = {0x00 , 0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00};
Первым делом надо указать позицию в CGRAM, с которой начнём писать, далее значение адреса автоматически будет инкрементироваться(увеличиваться). Таким образом, записать символ в CGRAM можно следующим образом.
const char backslash[8] = {0x00 , 0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00};
Set_Cgram_Addres(0X08);
for (uint8_t i = 0; i < 8; i++)
{
Write_Data(backslash[i]);
}
Давайте разберемся почему адрес CGRAM равен 0х08. Как уже писалось выше, на каждый символ отводится по 8 байт, как показано на картинке ниже.
Таким образом, начав запись с адреса 0х08, мы записали наш символ в первый столбец(отсчет столбцов начинается с нуля).
Отлично, символ в памяти, осталось его вывести на экран, для этого надо указать позицию на экране, куда хотим его вывести и записать в эту позицию данные, хранящиеся в CGRAM.
Set_Cgram_Addres(0X08);
for (uint8_t i = 0; i < 8; i++)
{
Write_Data(backslash[i]);
}
//указываем позицию на экране
Set_Ddram_Address(0X00);
//указываем тот самый столбец, который хотим вывести
Write_Data(0X01);
Код всего проекта для Atmega16 можно развернуть ниже.
На этом всё.
Похожие статьи