В этой статье я хочу рассказать и показать Как подключить и использовать символьный жидко-кристаллический индикатор совместно с контроллером STM32F103.
На днях у меня появился такой вот индикатор:
Это символьный жидко-кристаллический индикатор QC2004A на 4 строки и 20 символов в строке, о чем явно свидетельствует модель. К тому же индикатор имеет подсветку и является контрастным, т.е. символы светятся белым, а фон синий.
Управляется матрица установленным на плате контроллером KS0066, это аналог HD44780. Плата имеет 16 контактов: 2 для питания индикатора (1 и 2 пин), 1 для выставления контрастности (3 пин), 3 для управления шиной данных и режимом контроллера (4 – RS – данные или инструкции; 5 – R/W – запись или чтение с ЖКИ; 6 – E – отправка данных по шине), 8 контактов шины данных (т.е. шина восьми битная) и 2 контакта для питания подсветки.
Размеры и немного больше информации по ЖКИ вот тут.
Стоит сказать о шине данных и подключении. Если вам требуется только выводить информацию на индикатор, то потребуется подключить питание, подключить RS и E, при это пин R/W запаять на минус, подключить 4 (D4…D7) или 8 (D0…D7) контактов данных, т.е. использовать 8ми или 4х битную шину. Хочется отметить, что контроллер позволяет передавать данные по четырем проводам, вместо восьми, хотя данные все равно передаются восьми битные, только тетрадами (по 4 бита 2 раза).
R/W пин используется для того, чтобы выбрать направление передачи данных в ЖКИ или из ЖКИ. Это может быть нужно, чтобы считывать данные с индикатора, положение курсора и т.п. Используется крайне редко.
Теперь стоит подключить индикатор к STM32F103, для этого я использовать буду отладочную плату и подключаем следующим образом:
- 1 пин ЖКИ к GND
- 2 пин ЖКИ к +5V
- 3 пин ЖКИ к GND
- 4 пин ЖКИ к PA0
- 5 пин ЖКИ к GND
- 6 пин ЖКИ к PA1
- 11 пин ЖКИ к PA2
- 12 пин ЖКИ к PA3
- 13 пин ЖКИ к PA4
- 14 пин ЖКИ к PA5
- 15 пин ЖКИ к +5V
- 16 пин ЖКИ к GND
Все функции по работе с ЖКИ для STM32 вынесены в отдельную библиотеку, т.е. ее просто необходимо подключить будет настроить и заголовочном файле (*.h) порты и пины и можно использовать. Настройка пинов в hd44780_driver.h:
1 2 3 4 5 6 7 |
#define LCD_PORT GPIOA #define LCD_CD 0 // RS #define LCD_EN 1 // E #define LCD_DB4 2 #define LCD_DB5 3 #define LCD_DB6 4 #define LCD_DB7 5 |
После этого добавляем библиотеку в проект:
1 |
#include "hd44780_driver\hd44780_driver.h" |
И можно пользоваться. В конце статьи прикреплен архив проектом в IDE CooCox.
Кратко рассмотрим функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Инициализирует индикатор, запускаем один раз перед началом работы void lcd_init(); // Отправляет байт как команду (COMMAND) или как данные (DATA) void lcd_send(uint8_t byte, dat_or_comm dc); // Устанавливает режим обмена данными по 4м проводам void lcd_set_4bit_mode(void); // Устанавливает состояние индикатора: вкл/выкл ЖКИ, вкл/выкл курсор, вкл/выкл мигание курсора void lcd_set_state(lcd_state state, cursor_state cur_state, cursor_mode cur_mode); // Очищает ЖКИ void lcd_clear(void); // Выводит строку void lcd_out(char * txt); // Задает позицию курсора. С того места будет вывод на ЖКИ void lcd_set_xy(uint8_t x, uint8_t y); // Задает пользовательский символ void lcd_set_user_char(uint8_t char_num, uint8_t * char_data); |
Немного подробнее теперь. Функция
1 |
void lcd_set_state(lcd_state state, cursor_state cur_state, cursor_mode cur_mode); |
- lcd_state: LCD_ENABLE или LCD_DISABLE
- cursor_state: CURSOR_ENABLE или CURSOR_DISABLE
- cursor_mode: BLINK (мигать) или NO_BLINK (не мигать)
1 |
void lcd_set_xy(uint8_t x, uint8_t y); |
X – это номер символа в строке, счет от 0. Y – номер строки, счет от 0.
Применение пользовательского символа бывает полезно, если нет кириллицы, как в моем случае (с Китая индикатор), либо если нужен спец символ типа значка батарейки и т.п.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
uint8_t user_char[8]; user_char[0]=0b01110; user_char[1]=0b10001; user_char[2]=0b10001; user_char[3]=0b10001; user_char[4]=0b11111; user_char[5]=0b11111; user_char[6]=0b11111; user_char[7]=0b00000; // Первый параметр - номер символа в памяти ЖКИ, второй параметр - массив с символом lcd_set_user_char(0, user_char); // Применение: lcd_send(0, DATA); |
Стоит отметить, что символ записывается в память ЖКИ не навсегда, а только пока питание есть. Т.е. после выключения этого символа уже не будет в памяти. Поэтому все свои символы пишем в ЖКИ при инициализации, а потом основная работа уже.
Вот собственно и все, что может пригодиться для использования индикаторов на HD44780. Стоит лишь смотреть в даташитах на адресацию памяти ЖКИ, чтобы подправить функцию перехода lcd_set_xy. И конечно, библиотеку не составит труда переделать под другие семейства STM32.
Прикрепления:
Вопросы пишите в комментарии.
Di, извини за тупые вопросы, но из мелочей и складывается картина. А при чем тут оптимизатор? Я же в симуляторе смотрю текст на Си, а не скомпилированый код. Это же, если я не ошибаюсь, как смотреть ассемблерный код до компиляции чисто исходный текст.
Здравствуйте. Помогите опознать жк и его подключение. На лицевой стороне дисплей 86 / 24 мм в металлической прижимном креплении, Плата 95 / 30 мм и 15 припаянных отводов. На обратной стороне надписи “97-24288-0″ ,” LM311L” на наклейке, а под ней “LM105L”, и “JAPAN”. микрухи – M5259( OKI JAPAN ) – 2 шт. HD44780A00 (JAPAN) – 1 шт. ???
Здравствуйте, Александр. Это похоже что, знакосимвольный дисплей и, судя по размерам, это 20 знаков в 2 строки. Проследите как идут дорожки от тех 15 выводов. Найдите общий и питание. С какой они стороны будут. Так сможете определить от куда начинается счет выводов и далее уже стандартно подключить дисплей, ведь это готовый модуль.
Спасибо за ответ. 1-й там (-) 2-й (+), счет с права налево с лицевой стороны , 16-го нет, он вроде как на подсветку, меня интересует с какими контроллерами он совместим? Как это узнать? У них точно стандартное подключение? т.к. покупался он около 8 лет назад, все микрухи в корпусах , оригинальный JAPAN
Подключение стандартное, т.к. у Вас там контроллер HD44780 стоит. Отличия могут быть обычно в части подсветки, т.к. это независимая цепь. Для управления ЖКИ нужно 14 ножек, а 16я у Вас – это наверное питание на подсветку. В любом случае справа налево выходит следующее:
Сам модуль можете подключать к чему угодно, к любым контроллерам.