Библиотека для работы с дисплеем 1602
Библиотека для работы с двухстрочным 16 символьным дисплеем.
Моя реализация библиотеки для дисплея 16х2
под управлением HD44780
.
Описывать протокол и особенности управления, пайки и настройки не буду.
Краткие возможности:
- управление отображением курсора;
- вкл/выкл дисплея;
- вывод текста в любое место;
- поддержка специальных символов
\n
и\t
; - вывод числа с преобразованием его в строку;
- и др.
Особенности:
- используется исключительно 4 битный режим;
- данные из дисплея не читаются, используются задержки силами
RTOS
или циклом; - все сигналы
DATA
расположены в одном порту.
Зависимости:
stm32f2xx.h
- определения макросовGPIO_Pin_8
,GPIOC
и тп, в зависимости от контроллера файл может бытьstm32f10x.h
,stm32f40x.h
и др;FreeRTOS.h
- опционально, если используется в проекте, то лучше включить;task.h
- обязательно если используется FreeRTOS.h;
Описание функций.
void LCD1602_Init( void );
Сама важная функция, должна быть запущена перед первым использование дисплея. Инициализирует дисплей для работы:
- 4-битный режим работы;
- инкремент курсора;
- курсор невидимый;
void LCD1602_WriteUserSymbol( const uint8_t number, const uint8_t *data );
Используется для записи пользовательского символа в память дисплея в ячейку указанную в аргументе number
.
Пример использования:
// Массив определяется следующим образом:
// 00001110 - 0x0E
// 00011111 - 0x1F
// 00010001 - 0x11
// 00010001 - 0x11
// 00011111 - 0x1F
// 00011111 - 0x1F
// 00011111 - 0x1F
// 00000000 - ОБЯЗАТЕЛЬНО должно быть 0x00
uint8_t symbol[] = {0x0E, 0x1F, 0x11, 0x11, 0x1F, 0x1F, 0x1F, 0x00};
LCD1602_WriteUserSymbol( 1, symbol);
Последний элемент массива обязательно должен быть нулем, так как эта строка отведена под курсор в виде подчеркивания.
void LCD1602_CursorToHome( void );
Устанавливает курсор в начальное положение координаты (0; 0)
.
0 1 2 3 4 5 6 7 8 9 A B C D E F
┌-----------------------------------------------┐
| | | | | | | | | | | | | | | | | 0
---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
| | | | | | | | | | | | | | | | | 1
└-----------------------------------------------┘
┌-----------------------------------------------┐
|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15|
---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
└-----------------------------------------------┘
void LCD1602_CursorToPosition( const uint8_t position );
Устанавливает курсор в позицию указанную в аргументе position
, который может принимать значения от 0
до 31
(от 0
до 1F
).
void LCD1602_CursorToPositionXY( const uint8_t X, const uint8_t Y );
Устанавливает курсор в строку Y
и ячейку X
.
void LCD1602_CursorMode( const CursoreMode cursor );
Устанавливает режим отображения курсора:
CURSOR_HIDE
- выключает вывод курсора;CURSOR_STATIC
- отображается статичным подчеркиванием;CURSOR_BLINK
- отображается мигающим прямоугольником
void LCD1602_ClearScreen( void );
Очищает дисплей.
void LCD1602_ScreenOnOff( const FunctionalState NewState );
Включает или отключает дисплей:
ENABLE
- дисплей включен;DISABLE
- дисплей выключен
void LCD1602_PrintCharOfPosition( const uint8_t position, const char symbol );
Печатает символ в выбранной позиции.
void LCD1602_PrintStringOfPosition( const uint8_t position, const char *str );
Печатает нультерминальную строку начиная с выбранной позиции. При достижении конца текущей строки текст переносится на новую. Поддерживаются символы:
\n
- Переносит текст на новую строку;\t
- Вставляет два пробела (пока так).
void LCD1602_PrintNumberOfPosition( const uint8_t position, const int32_t number );
Печатает число, переведенное в строку. Переводит с помощью функции sprintf
.
void LCD1602_PrintCharOfPositionXY( const uint8_t X, const uint8_t Y, const char symbol );
Аналогично функции LCD1602_PrintCharOfPosition
, только вместо позиции используются координаты.
void LCD1602_PrintStringOfPositionXY( const uint8_t X, const uint8_t Y, const char *str );
Аналогично функции LCD1602_PrintStringOfPosition
, только вместо позиции используются координаты.
void LCD1602_PrintNumberOfPositionXY( const uint8_t X, const uint8_t Y, const int32_t number );
Аналогично функции LCD1602_PrintNumberOfPosition
, только вместо позиции используются координаты.
void LCD1602_AppendChar( const char symbol );
Добавляет символ в конец последнего вывода.
void LCD1602_AppendString( const char *str );
Дописывает нультерминальную строку, не поддерживает \n
и \t
.
void LCD1602_AppendNumber( const int32_t number );
Дописывает число.
Настройка библиотеки
Перед использованием необходимо в файле lcd1602.h
определить макросы:
#define LCD1602_USE_FREERTOS 1 ///< Определяет будет ли использоваться FREERTOS
#define MCU_CLOCK_USECOND (1 << 4) ///< Количество тиков счетчика микроконтроллера в микросекунду
#define PORT_RE GPIOC ///< Порт сигнала RE, тип GPIO_TypeDef
#define PIN_RE GPIO_Pin_8 ///< Пин сигнала RE, GPIO_Pin_x где x равен 0..15
#define PORT_RS GPIOC ///< Порт сигнала RS, тип GPIO_TypeDef
#define PIN_RS GPIO_Pin_9 ///< Пин сигнала RS, GPIO_Pin_x где x равен 0..15
#define PORT_DATA GPIOB ///< Порт сигналов DATA, тип GPIO_TypeDef
#define DATA_PIN0 GPIO_Pin_15 ///< Вывод сигнала DATA0, GPIO_Pin_x где x равен 0..15
#define DATA_PIN1 GPIO_Pin_14 ///< Вывод сигнала DATA1, GPIO_Pin_x где x равен 0..15
#define DATA_PIN2 GPIO_Pin_13 ///< Вывод сигнала DATA2, GPIO_Pin_x где x равен 0..15
#define DATA_PIN3 GPIO_Pin_12 ///< Вывод сигнала DATA3, GPIO_Pin_x где x равен 0..15
Исходники можно посмотреть в моём gitlab.com