Display um set_display und userdefined charachter erweiter

This commit is contained in:
Carsten Keller 2024-06-09 17:58:23 +02:00
parent 3d9322c7f3
commit 2613c16a3d
Signed by: carsten
GPG Key ID: DF06343A3A9B8868
2 changed files with 51 additions and 0 deletions

View File

@ -10,6 +10,8 @@
#include "STM32G071KBT6.hpp"
#include "Display.hpp"
/// address for character generator ram
#define CMD_CGRAM_ADDR 0x40u
#define pulse_delay() for(uint32_t i = 0UL; i < 1UL; i++);
#define PIN_RS LL_GPIO_PIN_4
#define PIN_RW LL_GPIO_PIN_5
@ -147,6 +149,32 @@ namespace ElektronischeLast
lcd_cmd(0x80u | line | (position & 0x7F));
}
/// \brief switch display on/off and set cursor mode
/// \param[in] display \ref eDisplay_t
/// \param[in] cursor \ref eCursor_t
/// \param[in] blink \ref eCursorBlink_t
void Display::lcd_set_display(eDisplay_t display, eCursor_t cursor, eCursorBlink_t blink)
{
lcd_cmd(0x08u | display | cursor | blink);
}
/// \brief set user defined character in display ram
/// \details e.g. https://maxpromer.github.io/LCD-Character-Creator/ to generate character data
/// \param[in] character \ref eUserDefinedCharakter_t
/// \param[in] character_data pixel-data of character (8-Byte)
void Display::lcd_set_user_chars(Display::UserDefinedCharakter_t character, const uint8_t character_data[])
{
lcd_cmd((uint8_t)character | CMD_CGRAM_ADDR);
for(uint8_t idx = 0u; idx < 8u; idx++)
{
while(!ready_for_data())
{
run();
}
lcd_data(character_data[idx]);
}
}
void Display::print(const char* const string)
{
strncpy(this->string, string, sizeof(this->string));

View File

@ -70,6 +70,27 @@ namespace ElektronischeLast
Line2 = 0x40, //!< Select second display line
} Line_t;
/// \brief Display State
typedef enum
{
eDisplayOff = 0, //!< Display off
eDispalyOn = 4 //!< Display on
} eDisplay_t;
/// \brief Cursor State
typedef enum
{
eCursorOff = 0, //!< Cursor off
eCursorOn = 2 //!< Cursor on
} eCursor_t;
/// \brief Cursor blink mode
typedef enum
{
eCursorBlinkOff = 0, //!< no Cursor blink
eCursorBlinkOn = 1 //!< Cursor blink
} eCursorBlink_t;
typedef enum
{
StateIdle,
@ -92,8 +113,10 @@ namespace ElektronischeLast
void run(void);
void set_backlight(bool on);
void set_cursor(Line_t line, std::uint32_t position);
void lcd_set_display(eDisplay_t display, eCursor_t cursor, eCursorBlink_t blink);
void print(const char* const string);
bool ready_for_data(void);
void lcd_set_user_chars(Display::UserDefinedCharakter_t character, const uint8_t character_data[]);
private:
State_t current_state;
State_t next_state;