DISCO_H747I_LCD_demo

Dependencies:   BSP_DISCO_H747I

main.cpp

Committer:
Jerome Coutant
Date:
2019-09-25
Revision:
1:305555b58102
Parent:
0:f1f3c583cf1e

File content as of revision 1:305555b58102:

#include "mbed.h"
#include "stm32h747i_discovery.h"
#include "stm32h747i_discovery_lcd.h"
#include "stlogo.h"

static void DISCO_LCD_INIT(void)
{
    BSP_LCD_Init();
    BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS);
    BSP_LCD_SelectLayer(1);
    BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
    BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
    BSP_LCD_Clear(LCD_COLOR_WHITE);
}

static void LCD_Demo_Setup(void)
{
    /* Set LCD Demo description */
    BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
    BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
    BSP_LCD_SetFont(&Font24);
    BSP_LCD_DisplayStringAt(0, 10, (uint8_t *)"LCD", CENTER_MODE);
    BSP_LCD_SetFont(&Font12);
    BSP_LCD_DisplayStringAt(0, 45, (uint8_t *)"This example shows different feature", CENTER_MODE);

    /* Set the LCD Text Color */
    BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
    BSP_LCD_DrawRect(10, 90, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 100);
    BSP_LCD_DrawRect(11, 91, BSP_LCD_GetXSize() - 22, BSP_LCD_GetYSize() - 102);
}

/**
  * @brief  Show LCD Features
  * @param  feature : feature index
  * @retval None
  */
static void LCD_Demo_Feature(uint8_t feature)
{
    int32_t i = 0;

    Point Points[] = {{20, 150}, {80, 150}, {80, 200}};
    Point Points2[3];
    uint8_t text[50];

    BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
    BSP_LCD_FillRect(12, 92, BSP_LCD_GetXSize() - 24, BSP_LCD_GetYSize() - 104);
    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
    BSP_LCD_SetFont(&Font16);

    switch (feature) {
        case 0:
            /* Text Feature */
            BSP_LCD_SetFont(&Font16);
            BSP_LCD_DisplayStringAt(14, 100, (uint8_t *)"Left aligned Text", LEFT_MODE);
            BSP_LCD_DisplayStringAt(14, 115, (uint8_t *)"Center aligned Text", CENTER_MODE);
            BSP_LCD_DisplayStringAt(14, 130, (uint8_t *)"Right aligned Text", RIGHT_MODE);
            BSP_LCD_SetFont(&Font24);
            BSP_LCD_DisplayStringAt(14, 180, (uint8_t *)"Font24", LEFT_MODE);
            BSP_LCD_SetFont(&Font20);
            BSP_LCD_DisplayStringAt(BSP_LCD_GetXSize() / 2 - 20, 180, (uint8_t *)"Font20", LEFT_MODE);
            BSP_LCD_SetFont(&Font16);
            BSP_LCD_DisplayStringAt(BSP_LCD_GetXSize() - 80, 184, (uint8_t *)"Font16", LEFT_MODE);
            break;

        case 1:
            /* Draw misc. Shapes */
            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
            BSP_LCD_DrawRect(20, 100, 60, 40);
            BSP_LCD_FillRect(100, 100, 60, 40);

            BSP_LCD_SetTextColor(LCD_COLOR_GRAY);
            BSP_LCD_DrawCircle(BSP_LCD_GetXSize() - 120, 120, 20);
            BSP_LCD_FillCircle(BSP_LCD_GetXSize() - 40, 120, 20);

            BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
            BSP_LCD_DrawPolygon(Points, 3);

            BSP_LCD_SetTextColor(LCD_COLOR_RED);
            BSP_LCD_DrawEllipse(130, 170, 30, 20);
            BSP_LCD_FillEllipse(200, 170, 30, 20);

            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
            BSP_LCD_DrawHLine(20, BSP_LCD_GetYSize() - 30, BSP_LCD_GetXSize() / 5);
            BSP_LCD_DrawLine(100, BSP_LCD_GetYSize() - 20, 230, BSP_LCD_GetYSize() - 50);
            BSP_LCD_DrawLine(100, BSP_LCD_GetYSize() - 50, 230, BSP_LCD_GetYSize() - 20);

            Points2[0].X = BSP_LCD_GetXSize() - 80;
            Points2[0].Y = 150;
            Points2[1].X = BSP_LCD_GetXSize() - 20;
            Points2[1].Y = 150;
            Points2[2].X = BSP_LCD_GetXSize() - 20;
            Points2[2].Y = 200;

            BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
            BSP_LCD_FillPolygon(Points2, 3);
            break;

        case 2:
            /* Draw Bitmap */
            BSP_LCD_DrawBitmap(20, 100, (uint8_t *)stlogo);
            HAL_Delay(500);

            BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() / 2 - 40, 100, (uint8_t *)stlogo);
            HAL_Delay(500);

            BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() - 100, 100, (uint8_t *)stlogo);
            HAL_Delay(500);

            BSP_LCD_DrawBitmap(20, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo);
            HAL_Delay(500);

            BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() / 2 - 40, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo);
            HAL_Delay(500);

            BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() - 100, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo);
            HAL_Delay(500);
            break;

        case 3:
            /* Set the LCD Back Color and Text Color*/
            BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
            BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
            BSP_LCD_SetFont(&Font24);

            /*  Set the brightness */
            for (i = 100; i >= 0; i -= 10) {
                sprintf((char *)text, " Brightness  =  %d ", (int)i);
                BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() / 2 + 45, (uint8_t *)text, CENTER_MODE);
                BSP_LCD_SetBrightness(i);
                HAL_Delay(300);
            }

            for (i = 0; i <= 100; i += 10) {
                sprintf((char *)text, " Brightness  =  %d ", (int)i);
                BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() / 2 + 45, (uint8_t *)text, CENTER_MODE);
                BSP_LCD_SetBrightness(i);
                HAL_Delay(300);
            }
            break;
    }
}


int main()
{
    printf("\nSTART\n");

    DISCO_LCD_INIT();
    LCD_Demo_Setup();

    while (1) {
        for (int LCD_Feature = 0; LCD_Feature < 4; ++LCD_Feature) {
            printf("Demo LCD feature %d\n", LCD_Feature);
            LCD_Demo_Feature(LCD_Feature);
            HAL_Delay(10000);
        }
    }
}