Информационный портал MSEVM






Главная > STM32 > Подключение индикатора LCD1602 к stm32 по четырем проводам




Алгоритм работы с дисплеем получается следующий:
  • Выставляем на выводе RS 1 или 0 в зависимости от того, что мы хотим передать (команду или сообщение)
  • Отправляем в дисплей старший полубайт
  • Дергаем вывод enable
  • Отправляем в дисплей младший полубайт
  • Дергаем вывод enable
Схема:



Для того чтобы начать что-то выводить на дисплей его нужно сначала инициализировать, иначе диплей просто не будет понимать, что мы от него хотим. В этом поможет даташит, в котором написаны все команды для дисплея.



Для инициализации нужны только 3 команды:

Выбор числа линий , ширина, шины и размера символа. Эта команда у будет выглядеть так - 00101000. после этой команды у дисплея ширина данных будет 4 бита, 2 строки и размер символа 5x8 точек.

Настройка режима отображения. 00001100. Отключается курсор и его мигание, включается дисплей.

Очистка экрана. 00000001. Просто очистка дисплея.

Работать это будет так. Ставим вывод RS в ноль, отправляем старший полубайт, дергаем вывод enable, отправляем младший полубайт, дергаем вывод enable. Со следующими командами тоже самое.

Код инициализации. Прежде чем его использовать, нужно для начала в настроить пины, которые использует дисплей выставить в режим gpio output. Этот кусочек кода должен находиться вне цикла и выполняться только один раз (в начале программы).

	HAL_Delay(40);							//Пауза, чтобы дисплей включился.
	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 0);			//Отправляем команду
									//Старший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 0);			//D7
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D6
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 1);			//D5
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 0);			//D4
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
									//Младший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 1);			//D3
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D2
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D1
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 0);			//D0
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);

	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 0);			//Отправляем команду
									//Старший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 0);			//D7
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D6
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D5
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 0);			//D4
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
									//Младший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 1);			//D3
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 1);			//D2
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D1
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 0);			//D0
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);

	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 0);			//Отправляем команду
									//Старший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 0);			//D7
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D6
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D5
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 0);			//D4
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
									//Младший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 0);			//D3
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D2
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D1
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 1);			//D0
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
А вот так выглядит отправка символа 'M' на дисплей:
	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 1);			//Отправляем символ
									//Старший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 0);			//D7
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 0);			//D6
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 1);			//D5
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 1);			//D4
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
									//Младший полубайт
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin, 1);			//D3
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin, 1);			//D2
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin, 0);			//D1
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin, 1);			//D0
									//Строб вывода enable
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1);
	HAL_Delay(1);
	HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
	HAL_Delay(1);
Таблица символов:



В конце статьи есть ссылка на библиотеку. В ней уже реализованы некотрые функции, для удобной работы с дисплеем, а именно:
  • LCD_init() - инициализация дисплея
  • LCD_print() - вывод символа
  • LCD_printStr() - вывод строки
  • lcd_printInt() - вывод числа типа Integer
  • LCD_clear() - очистка дисплея
  • Lcd_setCursor() - установка дисплея по нужным координатам
Чтобы использовать библиотеку необходимо файл lcd.h поместить в в ваш проект в папку Inc, а файл lcd.c в папку Src. После этого в файле main.c подключить библиотеку (#include "lcd.h"). теперь можно использовать функции библиотеки. После загрузки прошивки в STM необходимо перезагрузить контроллер, для корректного отображения информации на дисплее.

Библиотека

Обсуждение: http://msevm.com/forum/index.php?topic=9456





e-mail рассылки
Радиолюбитель
Подписаться письмом

















afb44aa5




Яндекс цитирования Rambler's Top100