Avr бібліотека для lcd з довільним підключенням висновків

Деякий час назад я написав макроси для реалізації віртуальних портів. За допомогою цих макросів можна переробити практично будь-яку бібліотеку для роботи з довільними висновками мікроконтролера. Перша бібліотека, яка потрапила під це зміна, стала бібліотека для символьного LCD. У цьому пості я розповім, як її застосувати в своєму проекті.

- працює з компіляторами IAR AVR, CodeVision AVR, GNU GCC,
- підтримує lcd контролери HD44780 і ​​KS0066,
- підтримує підключення lcd до довільним висновком мікроконтролера,
- підтримує 4-х і 8-ми розрядний інтерфейс,
- має функції виведення рядків з ОЗУ і флеш,
- має функції додавання призначених для користувача символів.

compilers_4.h - файл для підтримки трьох компіляторів
port_macros.h - макроси віртуальних портів
lcd_lib_2.h - заголовки LCD бібліотеки з прототипами функцій і настройками
lcd_lib_2.c - файл реалізації функцій LCD бібліотеки

1. Переписуємо всі файли бібліотеки в папку проекту.
2. Підключаємо lcd_lib_2.c до проекту всередині середовища розробки.
3. інклюд заголовки lcd_lib_2.h до сішному файлу, в якому будуть використовуватися lcd функції.
4. Налаштовуємо конфігурацію lcd бібліотеки в заголовки lcd_lib_2.h
5. Прописуємо в код виклик функцій lcd бібліотеки.

Налаштування конфігурації у файлі lcd_lib_2.h включає в себе наступні кроки.

Avr бібліотека для lcd з довільним підключенням висновків

Рамками виділені ті частини коду, які потрібно налаштовувати під свій проект.


2. Глобальні налаштування драйвера

LCD_CHECK_FL_BF - перевіряти прапор BF або використовувати програмну затримку. 0 - затримка, 1 - перевірка прапора.

LCD_BUS_4_8_BIT - використовувана шина даних. 0 - 4 розрядна шина, 1 - 8-ми розрядна

3. Налаштування ініціалізації дисплея

Ці установки визначають стан дисплей після виклику функції LCD_Init ().

LCD_ONE_TWO_LINE - кількість відображуваних рядків. 0 - 1 рядок; 1 - 2 рядки.

LCD_FONT58_FONT511 - тип шрифту. 0 - 5х8 точок; 1 - 5х11 точок.

LCD_SHIFT_RIGHT_LEFT - зсув всього дисплея. 0 - при читанні ОЗУ зрушення не виконується, 1 - під час запису в ОЗУ зрушення дисплея виконується згідно з настановою LCD_DEC_INC_DDRAM (0 - зсув вправо, 1 - зрушення вліво)

LCD_DISPLAY_OFF_ON - включення / вимикання дисплея. 0 - дисплей вимкнений, але дані в ОЗУ залишаються; 1 - дисплей включений.

LCD_CURSOR_OFF_ON - відображення підкреслює курсору. 0 - курсор не відображається, 1 - курсор відображається.

LCD_CURSOR_BLINK_OFF_ON - відображення миготливого курсору. 0 - миготливий курсор не відображається; 1 - миготливий курсор відображається.

LCD_CURSOR_DISPLAY_SHIFT - команда зсуву вправо / вліво курсора або дисплея без запису на дисплей. В бібліотеці не використовується і ні на що не впливає. Затесалася сюди випадково)

LCD_Clear () - очищення дисплея.
LCD_ReturnHome () - повернення курсору в початкове положення.
LCD_Goto (x, y) - позиціонування курсору. x - номер знакоместа, y - номер рядка.
void LCD_Init (void) - ініціалізація дисплея.
void LCD_WriteCom (uint8_t data) - запис команди
void LCD_WriteData (char data) - висновок одного символу
void LCD_SendStr (char * str) - висновок рядка з ОЗУ.
void LCD_SendStrFl (char __flash * str) - висновок рядка з флеш пам'яті.
void LCD_SetUserChar (uint8_t __flash * sym, uint8_t adr) - завантаження споживацького символу в ОЗУ дисплея.

LCD_VP_iar.rar - тестовий проект для IAR AVR
LCD_VP_as6.rar - тестовий проект для AtmelStudio
LCD_VP_cv.rar - тестовий проект для CodeVision AVR
LCD_VP_winavr.rar - тестовий проект для WinAvr
LCD_VP_proteus.rar - тестовий проект для Proteus
lcd_lib_2.rar - lcd бібліотека з довільним підключенням висновків

Спасибі Вам велике за бібліотеку. Але що то не можу я змусити хоч як то її працювати. Дисплей WH0802A-NGG-CT взагалі не реагує ніяк.
Компілятор WINAVR, МК ATmega8A

#define VIRT_PORT
#ifdef VIRT_PORT

// тут я визначив віртуальний порт

// шина даних LCD
#define LCD_PORT LCD_DATA, F, _VIRT

#define LCD_DATA_0 D, 0, _HI
#define LCD_DATA_1 D, 1, _HI
#define LCD_DATA_2 D, 2, _HI
#define LCD_DATA_3 C, 5, _HI
#define LCD_DATA_4 C, 4, _HI
#define LCD_DATA_5 C, 3, _HI
#define LCD_DATA_6 B, 0, _HI
#define LCD_DATA_7 B, 1, _HI

// керуючі висновки LCD
#define LCD_RS C, 0, _HI
#define LCD_RW C, 1, _HI
#define LCD_EN C, 2, _HI


// глобальні настройки драйвера
#define LCD_CHECK_FL_BF 1
#define LCD_BUS_4_8_BIT 1

// настройки ініціалізації дисплея
#define LCD_ONE_TWO_LIN E 1
#define LCD_FONT58_FONT 511 0
#define LCD_DEC_INC_DDR AM 1
#define LCD_SHIFT_RIGHT _LEFT 0
#define LCD_DISPLAY_OFF _ON 1
#define LCD_CURSOR_OFF_ ON 1
#define LCD_CURSOR_BLIN K_OFF_ON 1
#define LCD_CURSOR_DISP LAY_SHIFT 0

інші
висновок 1 - земля
висновок 2 - +5
висновок 3 - +5

Схожі статті