Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

struct HD44780_GPIO_Interface_Struct;
typedef struct HD44780_GPIO_Interface_Struct HD44780_GPIO_Interface;
struct HD44780_GPIO_Interface_Struct
{
HD44780_Result (*configure)(HD44780_GPIO_Interface *interface, HD44780_Pin pin, HD44780_PinMode mode);
HD44780_Result (*write)(HD44780_GPIO_Interface *interface, HD44780_Pin pin, HD44780_PinState value);
HD44780_Result (*read)(HD44780_GPIO_Interface *interface, HD44780_Pin pin, HD44780_PinState *value);
};
HD44780_STM32F10x_GPIO_Driver lcd_pindriver;
void init_lcd(void)
{
/* Распиновка дисплея */
const HD44780_STM32F10x_Pinout lcd_pinout =
{
{
/* RS */ { GPIOA, GPIO_Pin_6 },
/* ENABLE */ { GPIOA, GPIO_Pin_5 },
/* RW */ { GPIOA, GPIO_Pin_4 },
/* Backlight */ { NULL, 0 },
/* DP0 */ { NULL, 0 },
/* DP1 */ { NULL, 0 },
/* DP2 */ { NULL, 0 },
/* DP3 */ { NULL, 0 },
/* DP4 */ { GPIOA, GPIO_Pin_3 },
/* DP5 */ { GPIOA, GPIO_Pin_2 },
/* DP6 */ { GPIOA, GPIO_Pin_1 },
/* DP7 */ { GPIOA, GPIO_Pin_0 },
}
};
/* Настраиваем драйвер: указываем интерфейс драйвера (стандартный),
указанную выше распиновку и обработчик ошибок GPIO (необязателен). */
lcd_pindriver.interface = HD44780_STM32F10X_PINDRIVER_INTERFACE;
/* Если вдруг захотите сами вручную настраивать GPIO для дисплея
(зачем бы вдруг), напишите здесь ещё (библиотека учтёт это):
lcd_pindriver.interface.configure = NULL; */
lcd_pindriver.pinout = lcd_pinout;
lcd_pindriver.assert_failure_handler = hd44780_assert_failure_handler;
/* И, наконец, создаём конфигурацию дисплея: указываем наш драйвер,
функцию задержки, обработчик ошибок дисплея (необязателен) и опции.
На данный момент доступны две опции - использовать или нет
вывод RW дисплея (в последнем случае его нужно прижать к GND),
и то же для управления подсветкой. */
const HD44780_Config lcd_config =
{
(HD44780_GPIO_Interface*)&lcd_pindriver,
delay_microseconds,
hd44780_assert_failure_handler,
HD44780_OPT_USE_RW
};
/* Ну, а теперь всё стандартно: подаём тактирование на GPIO,
инициализируем дисплей: 16x2, 4-битный интерфейс, символы 5x8 точек. */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
hd44780_init(&lcd, HD44780_MODE_4BIT, &lcd_config, 16, 2, HD44780_CHARSIZE_5x8);
}
Слон и Моська, или подключение LCD к Attiny13A