esp-open-rtos/extras/hd44780/hd44780.h
Ruslan V. Uss 574f944fbb Driver for HD44780 LCDs (#246)
Driver for HD44780 LCDs connected directly to GPIO / to I2C by PCF8574-like GPIO expanders (#246)
2016-10-26 16:21:55 +03:00

115 lines
2.9 KiB
C

/*
* Driver for LCD text displays on LCD connected to I2C by PCF8574
*
* Part of esp-open-rtos
* Copyright (C) 2016 Ruslan V. Uss <unclerus@gmail.com>
* BSD Licensed as described in the file LICENSE
*/
#ifndef _EXTRAS_HD44780_H_
#define _EXTRAS_HD44780_H_
#include <stdint.h>
#include <stdbool.h>
#ifndef HD44780_I2C
#define HD44780_I2C 0
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define HD44780_NOT_USED 0xff
/**
* LCD font type. Please refer to the datasheet
* of your module.
*/
typedef enum
{
HD44780_FONT_5X8 = 0,
HD44780_FONT_5X10
} hd44780_font_t;
/**
* LCD descriptor. Fill it before use.
*/
typedef struct
{
uint8_t addr; //!< PCF8574 address (0b0100<A2><A1><A0>)
struct
{
uint8_t rs; //!< gpio/register bit used for RS pin
uint8_t e; //!< register bit used for E pin
uint8_t d4; //!< register bit used for D4 pin
uint8_t d5; //!< register bit used for D5 pin
uint8_t d6; //!< register bit used for D5 pin
uint8_t d7; //!< register bit used for D5 pin
uint8_t bl; //!< register bit used for backlight, 0xFF if not used
} pins;
hd44780_font_t font; //!< LCD Font type
uint8_t lines; //!< Number of lines for LCD. Many 16x1 LCD has two lines (like 8x2)
bool backlight; //!< Current backlight state
} hd44780_t;
/**
* Init LCD. Set poition to (0, 0)
* \param lcd Pointer to the LCD descriptor
*/
void hd44780_init(const hd44780_t *lcd);
/**
* On/off LCD, show/hide cursor, set cursor blink
* \param lcd Pointer to the LCD descriptor
*/
void hd44780_control(const hd44780_t *lcd, bool on, bool cursor, bool cursor_blink);
/**
* Clear LCD memory and move char position to (0, 0)
* \param lcd Pointer to the LCD descriptor
*/
void hd44780_clear(const hd44780_t *lcd);
/**
* Set current char position
* \param lcd Pointer to the LCD descriptor
* \param col Column
* \param line Line
*/
void hd44780_gotoxy(const hd44780_t *lcd, uint8_t col, uint8_t line);
/**
* Print character
* \param lcd Pointer to the LCD descriptor
* \param c Character
*/
void hd44780_putc(const hd44780_t *lcd, char c);
/**
* Print string
* \param lcd Pointer to the LCD descriptor
* \param s String
*/
void hd44780_puts(const hd44780_t *lcd, const char *s);
/**
* Switch backlight
* \param lcd Pointer to the LCD descriptor
* \param on Turn backlight on if true
*/
void hd44780_set_backlight(hd44780_t *lcd, bool on);
/**
* Upload character data to the CGRAM.
* Current position will be set to (0, 0) after uploading
* \param lcd Pointer to the LCD descriptor
* \param num Character number (0..7)
* \param data Character data: 8 or 10 bytes depending on the font
*/
void hd44780_upload_character(const hd44780_t *lcd, uint8_t num, const uint8_t *data);
#ifdef __cplusplus
}
#endif
#endif /* _EXTRAS_HD44780_H_ */