Подключение дисплея 16х2 к микроконтроллеруИндикаторы ЖКИ являются неотъемлемой частью радиоэлектронной аппаратуры для вывода различной информации. В этой статье поговорим о некоторых, наиболее применимых функциях библиотеки LCD.h
Заголовочный файл LCD.h имеет в своем наборе функции для работы с ЖКИ дисплеем, которые связаны с библиотекой LCD.lib, написанной на ассемблере. Поэтому записывая одну функцию, выполняется целый ассемблерный код. Библиотеки облегчают труд программиста от написания постоянного, повторяющегося кода.
LCD.h библиотека позволяет работать с ЖКИ дисплеями до 40х2. Для работы с ЖКИ 40х4 используется библиотека LCD4x40.h т.к. она поддерживает работу на вторую управляющую линию Е2 (LCD display dual controllers). Таковым ЖКИ индикатором является модель фирмы Winstar WH4004A.

Ниже программный код позволяет выводить текст на ЖКИ дисплей 16х2. Испытывался на макетной плате с индикатором WH1602D-YYB-CTK и Atmega8535:

/****************************************************************/

/********************  LCD тест ЖКИ 16х02  **********************/

/****************************************************************/

#include <mega8.h>

#include <lcd.h>

#asm

.equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D*/

#endasm

 

void main(void)    /* Основная функция "main", с которой начинается выполнение всей программой процедуры */

{

lcd_init(16); /* инициализация на 16 символов */

lcd_clear();        /* очистка дисплея */

lcd_gotoxy(4,0);        /* верхняя строка, 4 позиция */

lcd_putsf("LCD 16x02");/* выводим надпись в указанных координатах */

lcd_gotoxy(0,1);      /* нижняя строка, 0 позиция */

lcd_putsf("CodeVision1.25.3");

while(1){};         /* бесконечный цикл */

}
Пример работы программы в симуляторе Proteus 7.5 SP3:
Симуляция работы программы в Proteus 7.5 SP3

Перед тем, как выводить строку на ЖКИ дисплей его нужно инициализировать. Для этого используемфункцию lcd_init:

lcd_init(unsigned char lcd_columns);

 

В скобках указываем, на сколько символов подключили ЖКИ индикатор:

lcd_init(8);    /* инициализация на 8 символов */

lcd_init(16);   /* инициализация на 16 символов */

lcd_init(20);   /* инициализация на 20 символов */

lcd_init(40);   /* инициализация на 40 символов */

Выполняем очистку дисплея. Используем функцию lcd_clear();

 

Ну вот, выполнили инициализацию, очистили предварительно индикатор, теперь можно и выводить. Хотя, lcd_gotoxy: пока еще нельзя. Перед тем, как выводить текст нужно указать, в какой строке выводить и с какой позиции, поэтому используем функцию:

lcd_gotoxy(unsigned char x, unsigned char y);

х – с какой позиции выводить первый символ (зависит от типа индикатора)

y – в какой строке (зависит от типа индикатора)

 

По данным заголовочного файла LCD.h имеем возможность выводить текст от 0 до 39 символов, и от 0 до 3 строк. Но в процессе использования выяснилось, что работает с ЖКИ индикаторами до 40х2 (Тип Winstar WH4002A). Использовать на индикатор WH4004A как правило, не получится.

Если, например, взяли индикатор 20х4 (Тип Winstar WH2004A/B), то для вывода текста с 10 позиции и 2-ой строке указываем в функции:

Нумерация позиций и строк дисплея типа HD44780

lcd_gotoxy(10,2);

Пример вывода информации на дисплей


Текст более 10 символов переведется на следующую строку. Текст выводим при помощи функции lcd_putsf():

lcd_putsf(char flash *str);

 

Текст, являющийся аргументом функции можно записывать непосредственно:

Lcd_putsf(Hello World!”);

 

Если использовать переменную для хранения текста и последующей записи в функцию, то компилятор CodeVisionAVR определит как ошибку - параметр #1 типа 'unsigned char' несовместим с типом 'flash unsigned char*' указанный в объявлении функции 'lcd_putsf':

 

Unsigned char *txt=”Hello World!”;

Lcd_putsf(txt);

 

Функция для вывода текста на ЖКИ индикатор требующая определения текста в переменной –  функция lcd_puts:

lcd_puts(char *str);

 

Тип переменой

Название

Размер, байт

значение

char

символ

1

-128127

Unsigned char

ASCII символ

1

0…255

 

В виде кода, функция записывается следующим образом:

Unsigned char *dt=”Hello World!”;

/*или char *dt=”Hello World!”; */

Lcd_puts(dt);

 

Функция lcd_putchar(char c); позволяет выводить символы из Таблицы кодов символов:

lcd_putchar(0x41); /* символ английской буквы А */

lcd_putchar(0x5b); /* символ квадратная скобка [ */

lcd_putchar(0xff); /* символ заполненного знакоместа */

 

Ниже приведен програмный код, который заполняет нижнюю строку с позицией от 0 до 15  символов заполненного знакоместа из таблицы кодов (код символа 0xFF).

 

/************************ LCDprogresBar *****************************/

#include <mega8.h>

#include <lcd.h>

#include <delay.h>

#asm

.equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D */

#endasm

unsigned char j=0; /* определяем переменную для хранения положительного числа от 0 до 255 */

 

void main(void)    /* Основная функция "main", с которой начинается выполнение всей программой процедуры */

{

lcd_init(16);

lcd_clear();

lcd_gotoxy(1,0);

lcd_putsf("Initialization");

while(1) /* выполняем цикл пока оператор iF не выполнит условие j==16 */

{

delay_ms(500);

j++;

lcd_gotoxy(j-1,1); /* заполняем символом  2-ую строку от 0 до 15 */

lcd_putchar(0xff); /* Символ заполненного знакоместа из таблицы кодов символов */

if (j==16) {break;} /* если условие if выполнилось, то прерываем выполнение цикла while */

}

while(1){/* бесконечный цикл */};

}

инициализация дисплея

Для того, чтобы выводить на ЖКИ индикатор русские буквы, применяется директива #pragma rl+/rl-:

 

/***********************************************************************/

#include <mega8.h>

#include <lcd.h>

#asm

.equ __lcd_port=0x12; PORTD

#endasm

 

void main(void)

{

lcd_init(16);

lcd_clear();

#pragma rl+

lcd_gotoxy(0,0);

lcd_putsf("Индикатор 16х02");

lcd_gotoxy(0,1);

lcd_putsf("Тестирование ЖКИ");

#pragma rl-

while(1){};

}

 

По сути, директива работает по переключению кодировки и собственно позволяет выводить русские буквы. В ходе практической работы выяснилось, что без этой директивы русский текст отображается как набор непонятных «казябликов». Что касается программы – симулятора Proteus (по крайней мере, проверенно в версии 7.2 и 7.5), то отсутствует поддержка вывода русского текста и большинства табличных символов.

Файлы к статье:

Проект LCD16x2 CodeVision 1.25.3 и Proteus 7.5

Проект LCD16x4 CodeVision 1.25.3 и Proteus 7.5

Проект LCD20x4 CodeVision 1.25.3 и Proteus 7.5

Проект LCD40x2 CodeVision 1.25.3 и Proteus 7.5

Проект LCDprogresBar CodeVision 1.25.3 и Proteus 7.5

 

Автор: Skiff

 

Добавить комментарий


Защитный код
Обновить