Примечание. Выборки исходного кода, размещенные в тексте описания, использовать в своих проектах не рекомендуется. В конце описания имеется ссылка на архив с полным исходным кодом к проекту.
В первой части мы рассмотрели конфигурирование библиотеки AVR-GCC для работы с символьными ЖК индикаторами в 4-битном режиме при подключении к выводам различных портов микроконтроллера. Чтобы убедиться, что библиотека функционирует правильно, рассмотрим пример с подключением индикатора по 8-битной шине. Подключение индикатора осуществим согласно схемы.
Итак, в программе микроконтроллера сперва, как вы помните, нужно установить режим работы:
//используется 4-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
//#define LCD_4BIT //используется 8-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
//#define LCD_8BIT //используется 4-битный режмим работы ЖК индикатора (при использовании разных выводов МК)
//#define LCD_4BIT_M //используется 8-битный режмим работы ЖК индикатора (при использовании разных выводов МК)
#define LCD_8BIT_M
Далее, нам необходимо связать выводы индикатора с линиями ввода/вывода микроконтроллера:
#define LCD_RS 5 //вывод порта МК 5 подключен к LCD RS #define LCD_RW 1 //вывод порта МК 1 подключен к LCD R/W #define LCD_E 2 //вывод порта МК 2 подключен к LCD E #define LCD_D0 0 //вывод порта МК 0 подключен к LCD D0 #define LCD_D1 7 //вывод порта МК 7 подключен к LCD D1 #define LCD_D2 1 //вывод порта МК 1 подключен к LCD D2 #define LCD_D3 2 //вывод порта МК 2 подключен к LCD D3 #define LCD_D4 4 //вывод порта МК 4 подключен к LCD D4 #define LCD_D5 2 //вывод порта МК 2 подключен к LCD D5 #define LCD_D6 6 //вывод порта МК 6 подключен к LCD D6 #define LCD_D7 0 //вывод порта МК 0 подключен к LCD D7
И теперь мы должны определить порт и регистр направления данных для каждого вывода микроконтроллера. Так как выводы индикатора могут быть подключены к разным портам, нам нужно работать с индивидуальными выводами. Редактируем следующую часть:
#ifdef LCD_4BIT_M || LCD_8BIT_M //8-битный или 4-битный режим работы (при использовании разных выводов МК)
#define LDPRS PORTB //назначаем порт для линии RS и регистр направления данных
#define LDDRS DDRB
#define LDPRW PORTD //назначаем порт для линии RW и регистр направления данных
#define LDDRW DDRD
#define LDPE PORTD //назначаем порт для линии E и регистр направления данных
#define LDDE DDRD
#define LDPD0 PORTС //назначаем порт для линии D0 и регистр направления данных
#define LDDD0 DDRС
#define LDPD1 PORTD //назначаем порт для линии D1 и регистр направления данных
#define LDDD1 DDRD
#define LDPD2 PORTС //назначаем порт для линии D2 и регистр направления данных
#define LDDD2 DDRС
#define LDPD3 PORTB //назначаем порт для линии D3 и регистр направления данных
#define LDDD3 DDRB
#define LDPD4 PORTD //назначаем порт для линии D4 и регистр направления данных
#define LDDD4 DDRD
#define LDPD5 PORTC //назначаем порт для линии D5 и регистр направления данных
#define LDDD5 DDRC
#define LDPD6 PORTD //назначаем порт для линии D6 и регистр направления данных
#define LDDD6 DDRD
#define LDPD7 PORTB //назначаем порт для линии D7 и регистр направления данных
#define LDDD7 DDRB
#endif
Конфигурирование библиотеки AVR-GCC для 4-битного режима при стандартном подключении индикатора
В случае стандартного включения ЖК индикатора по 4-битной шине (байт-синхронизированное включение) конфигурирование осуществляется как и в прошлой версии библиотеки. Нужно будет только указать, что мы используем данный режим.
//используется 4-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
#define LCD_4BIT
Далее необходимо указать номера выводов микроконтроллера для сигналов управления и данных индикатора.
#define LCD_RS 0 //вывод порта МК 5 подключен к LCD RS
#define LCD_RW 1 //вывод порта МК 5 подключен к LCD R/W
#define LCD_E 2 //вывод порта МК 5 подключен к LCD E
#define LCD_D0 0 //вывод порта МК 5 подключен к LCD D0
#define LCD_D1 1 //вывод порта МК 5 подключен к LCDD1
#define LCD_D2 2 //вывод порта МК 5 подключен к LCD D2
#define LCD_D3 3 //вывод порта МК 5 подключен к LCD D3
#define LCD_D4 4 //вывод порта МК 5 подключен к LCDD4
#define LCD_D5 5 //вывод порта МК 5 подключен к LCD D5
#define LCD_D6 6 //вывод порта МК 5 подключен к LCD D6
#define LCD_D7 7 //вывод порта МК 5 подключен к LCD D7
Затем определяем порты и регистры управления, как указано ниже.
#if defined (LCD_4BIT)||defined (LCD_8BIT)
#define LDP PORTD //определяем порт микроконтроллера, подключенного к шине данных LCD
#define LCP PORTD //определяем порт микроконтроллера, подключенного к шине управления LCD
#define LDDR DDRD //определяем регистр управления портом микроконтроллера, подключенного к шине данных LCD
#define LCDR DDRD //определяем регистр управления портом микроконтроллера, подключенного к шине управления LCD
#endif
Эти же операции необходимо выполнить при стандартном подключении индикатора по 8-битной шине.
Следует заметить, что при байт-синхронизированном подключении индикатора обновление индикатора происходит быстрее, т .к. в 4-битном или 8-битном режиме данные принимаются быстрее – операции с целыми байтами или полубайтами. В смешанном режиме состояние каждого отдельного вывода микроконтроллера устанавливается отдельно. Это увеличивает число команд, используемых для передачи одного байта. Например, для передачи одного байта с помощью данной библиотеки, при подключении индикатора к различным выводам микроконтроллера, можно использовать данную функцию:
static void LCDMix_8Bit(uint8_t data)
{
if((data)&(0b10000000)) LDPD7 |=1
LCD_D7;
else LDPD7 &=~(1
LCD_D7);
if((data)&(0b01000000)) LDPD6 |=1
LCD_D6;
else LDPD6 &=~(1
LCD_D6);
if((data)&(0b00100000)) LDPD5 |=1
LCD_D5;
else LDPD5&=~(1
LCD_D5);
if((data)&(0b00010000)) LDPD4 |=1
LCD_D4;
else LDPD4 &=~(1
LCD_D4);
if((data)&(0b00001000)) LDPD3 |=1
LCD_D3;
else LDPD3 &=~(1
LCD_D3);
if((data)&(0b00000100)) LDPD2 |=1
LCD_D2;
else LDPD2 &=~(1
LCD_D2);
if((data)&(0b00000010)) LDPD1 |=1
LCD_D1;
else LDPD1&=~(1
LCD_D1);
if((data)&(0b00000001)) LDPD0 |=1
LCD_D0;
else LDPD0 &=~(1
LCD_D0);
}
В функции проверяется каждый бит байта и устанавливается или сбрасывается соответствующий вывод порта. Другими словами, если ваше приложение отображает на индикаторе медленно меняющиеся данные, то подойдет любой режим работы. Но если вы используете ЖК индикатор/дисплей для динамического отображения данных или анимации, лучше всего выбирать стандартный способ подключения индикатора в 8- или 4-битном режиме.
Загрузки
Библиотека AVR-GCC с поддержкой смешанного подключения ЖК индикатора – скачать
Пример программы для управления индикатором (смешанное подключение, 4-битный режим) – скачать
Пример программы для управления индикатором (смешанное подключение, 8-битный режим) – скачать