Рисуем свой символ на LCD дисплее 1602А.

Рисуем свой символ на LCD дисплее 1602А.

В прошлых статьях мы рассмотрели как инициализировать и выводить символы на LCD дисплей, пользуясь таблицей знакогенератора(CGROM). Также в прошлых статьях упоминалось про такой вид памяти, как CGRAM, в которой можно хранить собственные символы. Надо сказать, что размер её ограничен и может вмещать до 8 символов.

Один из символов, который может пригодиться и которого нет в стандартной таблице знакогенератора(CGROM) - обратный слеш. Давайте нарисуем его.

Первым делом мы берём листок в клеточку, обводим на нём прямоугольник 5 на 8 клеточек, и рисуем наш символ.
Рисуем свой символ на LCD дисплее 1602А.

Запись в 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 байт, как показано на картинке ниже.
Рисуем свой символ на LCD дисплее 1602А.

Таким образом, начав запись с адреса 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 можно развернуть ниже.

Рисуем свой символ на LCD дисплее 1602А.

На этом всё.
комментарии
2