935|1

213

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【小华工控新品HC32F448】08.有工控显示需求?HC32F448帮你搞定! [复制链接]

 

1.概述

小华H32F448系列是基于ARM Cortex-M4 32-bit RISC CPU内核的MCU,最高工作频率可达到200MHz,内核集成了FPU和DSP,实现单精度浮点算术运算,支持所有ARM单精度数据处理指令和数据类型,支持完整的DSP指令集;在支持高算力的同时,还支持外部存储器控制EXMC,在有工控显示需要的应用领域,提供更优的解决方案。

 

外部存储器控制器 EXMC(External Memory Controller)是一个用来访问各种片外存储器,实现数据交换的独立模块。 EXMC 通过配置可以把内部的 AMBA 协议接口转换为各种类型的专用片外存储器通信协议接口,包括 SRAM、 PSRAM、 NOR Flash 等。

 

2.功能列表

EXMC 基本的功能列表如下所示:

 

3.原理图

 

4.例程功能

参考示例程序,我们在网上购买了一款4.3寸,带电容触摸的TFT显示屏,对EXMC功能进行学习,通过示例程序中的功能进行测试:LCD屏幕画出正方形,触摸正方形所在区域,平移正方形位置;LCD屏幕画出圆形和红、绿、蓝三色全屏

 

5.示例程序 

EXMC初始化配置:

/**
 * [url=home.php?mod=space&uid=159083]@brief[/url] Initializes LCD low level.
 * @param  None
 * @retval int32_t:
 *           - LL_OK:                   Initialize successfully.
 *           - LL_ERR:                  Initialize unsuccessfully.
 */
static int32_t LCD_SMC_Init(void)
{
    __IO uint32_t u32To = 0UL;
    int32_t i32Ret = LL_OK;
    stc_exmc_smc_init_t stcSmcInit;
    stc_exmc_smc_chip_config_t stcChipConfig;
    stc_exmc_smc_timing_config_t stcTimingConfig;
    en_flag_status_t enChipStatus = RESET;
    en_flag_status_t enTimingStatus = RESET;

    LCD_Port_Init();

    /* Enable SMC clock */
    FCG_Fcg3PeriphClockCmd(FCG3_PERIPH_SMC, ENABLE);

    /* Enable SMC. */
    EXMC_SMC_Cmd(ENABLE);

    EXMC_SMC_ExitLowPower();

    while (EXMC_SMC_READY != EXMC_SMC_GetStatus()) {
        if (u32To > SMC_MAX_TIMEOUT) {
            i32Ret = LL_ERR;
            break;
        }
        u32To++;
    }

    if (LL_OK == i32Ret) {
        /* Configure SMC width && CS &chip & timing. */
        (void)EXMC_SMC_StructInit(&stcSmcInit);
        stcSmcInit.stcChipConfig.u32AddrMatch = BSP_NT35510_MATCH_ADDR;
        stcSmcInit.stcChipConfig.u32AddrMask  = BSP_NT35510_MASK_ADDR;
        stcSmcInit.stcChipConfig.u32MemoryWidth  = EXMC_SMC_MEMORY_WIDTH_16BIT;
        stcSmcInit.stcChipConfig.u32BAA  = EXMC_SMC_BAA_PORT_DISABLE;
        stcSmcInit.stcChipConfig.u32ADV  = EXMC_SMC_ADV_PORT_DISABLE;
        stcSmcInit.stcChipConfig.u32BLS  = EXMC_SMC_BLS_SYNC_CS;
        stcSmcInit.stcChipConfig.u32ReadMode  = EXMC_SMC_READ_ASYNC;
        stcSmcInit.stcChipConfig.u32WriteMode  = EXMC_SMC_WRITE_ASYNC;

        /* EXCLK bus frequency@40MHz: 3.3V */
        stcSmcInit.stcTimingConfig.u8RC = 4U;
        stcSmcInit.stcTimingConfig.u8WC = 2U;
        stcSmcInit.stcTimingConfig.u8CEOE = 1U;
        stcSmcInit.stcTimingConfig.u8WP = 1U;
        stcSmcInit.stcTimingConfig.u8TR = 1U;
        (void)EXMC_SMC_Init(BSP_NT35510_CHIP, &stcSmcInit);

        /* Set command: updateregs */
        EXMC_SMC_SetCommand(BSP_NT35510_CHIP, EXMC_SMC_CMD_UPDATEREGS, 0UL, 0UL);

        /* Check timing status */
        u32To = 0UL;
        while ((enChipStatus != SET) || (enTimingStatus != SET)) {
            (void)EXMC_SMC_GetTimingConfig(BSP_NT35510_CHIP, &stcTimingConfig);
            if (0 == memcmp(&stcTimingConfig, &stcSmcInit.stcTimingConfig, sizeof(stcTimingConfig))) {
                enTimingStatus = SET;
            }

            (void)EXMC_SMC_GetChipConfig(BSP_NT35510_CHIP, &stcChipConfig);
            if (0 == memcmp(&stcChipConfig, &stcSmcInit.stcChipConfig, sizeof(stcChipConfig))) {
                enChipStatus = SET;
            }

            if (u32To > SMC_MAX_TIMEOUT) {
                i32Ret = LL_ERR;
                break;
            }
            u32To++;
        }
    }

    return i32Ret;
}

 

基于EXMC的显示屏驱动配置和基础函数实现:

/**
 * @brief  LCD delay
 * @param  [in] u32Delay:               Delay in ms
 * @retval None
 */
static void LCD_Delay(uint32_t u32Delay)
{
    volatile uint32_t i;
    const uint32_t u32Cyc = 24000UL;

    while (u32Delay-- > 0UL) {
        i = u32Cyc;
        while (i-- > 0UL) {
            ;
        }
    }
}

/**
 * @brief  Configure LCD NT35310
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
static void LCD_NT35310_Config(stc_lcd_controller_t *pstcLCD)
{
    NT35510_WriteReg(pstcLCD, 0xED);
    NT35510_WriteData(pstcLCD, 0x01);
    NT35510_WriteData(pstcLCD, 0xFE);

    NT35510_WriteReg(pstcLCD, 0xEE);
    NT35510_WriteData(pstcLCD, 0xDE);
    NT35510_WriteData(pstcLCD, 0x21);

    NT35510_WriteReg(pstcLCD, 0xF1);
    NT35510_WriteData(pstcLCD, 0x01);
    NT35510_WriteReg(pstcLCD, 0xDF);
    NT35510_WriteData(pstcLCD, 0x10);

    //VCOMvoltage//
    NT35510_WriteReg(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x8F);

    NT35510_WriteReg(pstcLCD, 0xC6);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xE2);
    NT35510_WriteData(pstcLCD, 0xE2);
    NT35510_WriteData(pstcLCD, 0xE2);
    NT35510_WriteReg(pstcLCD, 0xBF);
    NT35510_WriteData(pstcLCD, 0xAA);

    NT35510_WriteReg(pstcLCD, 0xB0);
    NT35510_WriteData(pstcLCD, 0x0D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x0D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x11);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x19);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x21);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x5D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x5D);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB1);
    NT35510_WriteData(pstcLCD, 0x80);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x8B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x96);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x02);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x03);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB4);
    NT35510_WriteData(pstcLCD, 0x8B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x96);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA1);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB5);
    NT35510_WriteData(pstcLCD, 0x02);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x03);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x04);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB6);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3F);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x5E);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x64);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x8C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xAC);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDC);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x70);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x90);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xEB);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDC);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xB8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xBA);
    NT35510_WriteData(pstcLCD, 0x24);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC1);
    NT35510_WriteData(pstcLCD, 0x20);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x54);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xFF);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC2);
    NT35510_WriteData(pstcLCD, 0x0A);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x04);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC3);
    NT35510_WriteData(pstcLCD, 0x3C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3A);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x39);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x37);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x36);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x32);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2F);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x29);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x26);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x24);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x24);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x23);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x36);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x32);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2F);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x29);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x26);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x24);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x24);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x23);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x62);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x05);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x84);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF0);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x18);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA4);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x18);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x50);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x0C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x17);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x95);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xE6);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC5);
    NT35510_WriteData(pstcLCD, 0x32);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x65);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x76);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC6);
    NT35510_WriteData(pstcLCD, 0x20);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x17);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x01);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xC9);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE0);
    NT35510_WriteData(pstcLCD, 0x16);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x1C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x21);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x36);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x46);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x52);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x64);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x7A);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x8B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB9);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xCA);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD9);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xE0);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE1);
    NT35510_WriteData(pstcLCD, 0x16);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x1C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x22);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x36);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x45);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x52);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x64);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x7A);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x8B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB9);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xCA);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xE0);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE2);
    NT35510_WriteData(pstcLCD, 0x05);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x0B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x1B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x34);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x4F);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x61);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x79);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x97);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA6);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD1);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD6);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDD);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteReg(pstcLCD, 0xE3);
    NT35510_WriteData(pstcLCD, 0x05);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x1C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x33);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x50);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x62);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x78);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x97);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA6);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC7);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD1);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD5);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDD);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE4);
    NT35510_WriteData(pstcLCD, 0x01);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x01);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x02);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x2A);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x4B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x5D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x74);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x84);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x93);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xBE);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xCD);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDD);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteReg(pstcLCD, 0xE5);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x02);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x29);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x3C);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x4B);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x5D);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x74);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x84);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x93);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xA2);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xB3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xBE);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xC4);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xCD);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xD3);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xDC);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE6);
    NT35510_WriteData(pstcLCD, 0x11);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x34);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x56);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x76);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x77);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x66);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xBB);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x66);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x45);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x43);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE7);
    NT35510_WriteData(pstcLCD, 0x32);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x76);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x66);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x67);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x67);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x87);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xBB);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x77);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x56);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x23);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x33);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x45);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE8);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x87);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x77);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x66);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x88);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xAA);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xBB);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x99);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x66);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x44);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xE9);
    NT35510_WriteData(pstcLCD, 0xAA);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0xAA);

    NT35510_WriteReg(pstcLCD, 0xCF);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xF0);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x50);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xF3);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0xF9);
    NT35510_WriteData(pstcLCD, 0x06);
    NT35510_WriteData(pstcLCD, 0x10);
    NT35510_WriteData(pstcLCD, 0x29);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0x3A);
    NT35510_WriteData(pstcLCD, 0x55);

    NT35510_WriteReg(pstcLCD, 0x11);
    LCD_Delay(100);
    NT35510_WriteReg(pstcLCD, 0x29);
    NT35510_WriteReg(pstcLCD, 0x35);
    NT35510_WriteData(pstcLCD, 0x00);

    NT35510_WriteReg(pstcLCD, 0x51);
    NT35510_WriteData(pstcLCD, 0xFF);
    NT35510_WriteReg(pstcLCD, 0x53);
    NT35510_WriteData(pstcLCD, 0x2C);
    NT35510_WriteReg(pstcLCD, 0x55);
    NT35510_WriteData(pstcLCD, 0x82);
    NT35510_WriteReg(pstcLCD, 0x2c);
}

/**
 * @brief  Configure LCD NT35510
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
static void LCD_NT35510_Config(stc_lcd_controller_t *pstcLCD)
{
    /* Config LCD */
    NT35510_WriteRegData(pstcLCD, 0xF000U, 0x55U);
    NT35510_WriteRegData(pstcLCD, 0xF001U, 0xAAU);
    NT35510_WriteRegData(pstcLCD, 0xF002U, 0x52U);
    NT35510_WriteRegData(pstcLCD, 0xF003U, 0x08U);
    NT35510_WriteRegData(pstcLCD, 0xF004U, 0x01U);
    /* AVDD Set AVDD 5.2V */
    NT35510_WriteRegData(pstcLCD, 0xB000U, 0x0DU);
    NT35510_WriteRegData(pstcLCD, 0xB001U, 0x0DU);
    NT35510_WriteRegData(pstcLCD, 0xB002U, 0x0DU);
    /* AVDD ratio */
    NT35510_WriteRegData(pstcLCD, 0xB600U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB601U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB602U, 0x34U);
    /* AVEE -5.2V */
    NT35510_WriteRegData(pstcLCD, 0xB100U, 0x0DU);
    NT35510_WriteRegData(pstcLCD, 0xB101U, 0x0DU);
    NT35510_WriteRegData(pstcLCD, 0xB102U, 0x0DU);
    /* AVEE ratio */
    NT35510_WriteRegData(pstcLCD, 0xB700U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB701U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB702U, 0x34U);
    /* VCL -2.5V */
    NT35510_WriteRegData(pstcLCD, 0xB200U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xB201U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xB202U, 0x00U);
    /* VCL ratio */
    NT35510_WriteRegData(pstcLCD, 0xB800U, 0x24U);
    NT35510_WriteRegData(pstcLCD, 0xB801U, 0x24U);
    NT35510_WriteRegData(pstcLCD, 0xB802U, 0x24U);
    /* VGH 15V (Free pump) */
    NT35510_WriteRegData(pstcLCD, 0xBF00U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xB300U, 0x0FU);
    NT35510_WriteRegData(pstcLCD, 0xB301U, 0x0FU);
    NT35510_WriteRegData(pstcLCD, 0xB302U, 0x0FU);
    /* VGH ratio */
    NT35510_WriteRegData(pstcLCD, 0xB900U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB901U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xB902U, 0x34U);
    /* VGL_REG -10V */
    NT35510_WriteRegData(pstcLCD, 0xB500U, 0x08U);
    NT35510_WriteRegData(pstcLCD, 0xB501U, 0x08U);
    NT35510_WriteRegData(pstcLCD, 0xB502U, 0x08U);
    NT35510_WriteRegData(pstcLCD, 0xC200U, 0x03U);
    /* VGLX ratio */
    NT35510_WriteRegData(pstcLCD, 0xBA00U, 0x24U);
    NT35510_WriteRegData(pstcLCD, 0xBA01U, 0x24U);
    NT35510_WriteRegData(pstcLCD, 0xBA02U, 0x24U);
    /* VGMP/VGSP 4.5V/0V */
    NT35510_WriteRegData(pstcLCD, 0xBC00U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xBC01U, 0x78U);
    NT35510_WriteRegData(pstcLCD, 0xBC02U, 0x00U);
    /* VGMN/VGSN -4.5V/0V */
    NT35510_WriteRegData(pstcLCD, 0xBD00U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xBD01U, 0x78U);
    NT35510_WriteRegData(pstcLCD, 0xBD02U, 0x00U);
    /* VCOM */
    NT35510_WriteRegData(pstcLCD, 0xBE00U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xBE01U, 0x64U);
    /* Gamma Setting */
    NT35510_WriteRegData(pstcLCD, 0xD100U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD101U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD102U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD103U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD104U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD105U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD106U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD107U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD108U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD109U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD10AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD10BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD10CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD10DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD10EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD10FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD110U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD111U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD112U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD113U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD114U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD115U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD116U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD117U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD118U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD119U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD11AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD11BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD11CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD11DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD11EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD11FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD120U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD121U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD122U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD123U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD124U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD125U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD126U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD127U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD128U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD129U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD12AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD12BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD12CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD12DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD12EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD12FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD130U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD131U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD132U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD133U, 0x6DU);
    NT35510_WriteRegData(pstcLCD, 0xD200U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD201U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD202U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD203U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD204U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD205U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD206U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD207U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD208U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD209U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD20AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD20BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD20CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD20DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD20EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD20FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD210U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD211U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD212U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD213U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD214U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD215U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD216U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD217U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD218U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD219U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD21AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD21BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD21CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD21DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD21EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD21FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD220U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD221U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD222U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD223U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD224U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD225U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD226U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD227U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD228U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD229U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD22AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD22BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD22CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD22DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD22EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD22FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD230U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD231U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD232U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD233U, 0x6DU);
    NT35510_WriteRegData(pstcLCD, 0xD300U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD301U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD302U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD303U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD304U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD305U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD306U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD307U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD308U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD309U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD30AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD30BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD30CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD30DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD30EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD30FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD310U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD311U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD312U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD313U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD314U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD315U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD316U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD317U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD318U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD319U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD31AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD31BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD31CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD31DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD31EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD31FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD320U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD321U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD322U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD323U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD324U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD325U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD326U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD327U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD328U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD329U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD32AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD32BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD32CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD32DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD32EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD32FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD330U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD331U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD332U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD333U, 0x6DU);
    NT35510_WriteRegData(pstcLCD, 0xD400U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD401U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD402U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD403U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD404U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD405U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD406U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD407U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD408U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD409U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD40AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD40BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD40CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD40DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD40EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD40FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD410U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD411U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD412U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD413U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD414U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD415U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD416U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD417U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD418U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD419U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD41AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD41BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD41CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD41DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD41EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD41FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD420U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD421U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD422U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD423U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD424U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD425U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD426U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD427U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD428U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD429U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD42AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD42BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD42CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD42DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD42EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD42FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD430U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD431U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD432U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD433U, 0x6DU);
    NT35510_WriteRegData(pstcLCD, 0xD500U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD501U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD502U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD503U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD504U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD505U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD506U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD507U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD508U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD509U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD50AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD50BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD50CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD50DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD50EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD50FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD510U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD511U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD512U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD513U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD514U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD515U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD516U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD517U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD518U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD519U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD51AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD51BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD51CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD51DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD51EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD51FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD520U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD521U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD522U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD523U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD524U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD525U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD526U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD527U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD528U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD529U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD52AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD52BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD52CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD52DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD52EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD52FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD530U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD531U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD532U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD533U, 0x6DU);
    NT35510_WriteRegData(pstcLCD, 0xD600U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD601U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD602U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD603U, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD604U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD605U, 0x3AU);
    NT35510_WriteRegData(pstcLCD, 0xD606U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD607U, 0x4AU);
    NT35510_WriteRegData(pstcLCD, 0xD608U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD609U, 0x5CU);
    NT35510_WriteRegData(pstcLCD, 0xD60AU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD60BU, 0x81U);
    NT35510_WriteRegData(pstcLCD, 0xD60CU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD60DU, 0xA6U);
    NT35510_WriteRegData(pstcLCD, 0xD60EU, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD60FU, 0xE5U);
    NT35510_WriteRegData(pstcLCD, 0xD610U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD611U, 0x13U);
    NT35510_WriteRegData(pstcLCD, 0xD612U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD613U, 0x54U);
    NT35510_WriteRegData(pstcLCD, 0xD614U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD615U, 0x82U);
    NT35510_WriteRegData(pstcLCD, 0xD616U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD617U, 0xCAU);
    NT35510_WriteRegData(pstcLCD, 0xD618U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD619U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xD61AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD61BU, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xD61CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD61DU, 0x34U);
    NT35510_WriteRegData(pstcLCD, 0xD61EU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD61FU, 0x67U);
    NT35510_WriteRegData(pstcLCD, 0xD620U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD621U, 0x84U);
    NT35510_WriteRegData(pstcLCD, 0xD622U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD623U, 0xA4U);
    NT35510_WriteRegData(pstcLCD, 0xD624U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD625U, 0xB7U);
    NT35510_WriteRegData(pstcLCD, 0xD626U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD627U, 0xCFU);
    NT35510_WriteRegData(pstcLCD, 0xD628U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD629U, 0xDEU);
    NT35510_WriteRegData(pstcLCD, 0xD62AU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD62BU, 0xF2U);
    NT35510_WriteRegData(pstcLCD, 0xD62CU, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xD62DU, 0xFEU);
    NT35510_WriteRegData(pstcLCD, 0xD62EU, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD62FU, 0x10U);
    NT35510_WriteRegData(pstcLCD, 0xD630U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD631U, 0x33U);
    NT35510_WriteRegData(pstcLCD, 0xD632U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xD633U, 0x6DU);
    /* LV2 Page 0 enable */
    NT35510_WriteRegData(pstcLCD, 0xF000U, 0x55U);
    NT35510_WriteRegData(pstcLCD, 0xF001U, 0xAAU);
    NT35510_WriteRegData(pstcLCD, 0xF002U, 0x52U);
    NT35510_WriteRegData(pstcLCD, 0xF003U, 0x08U);
    NT35510_WriteRegData(pstcLCD, 0xF004U, 0x00U);
    /* Display control */
    NT35510_WriteRegData(pstcLCD, 0xB100U, 0xCCU);
    NT35510_WriteRegData(pstcLCD, 0xB101U, 0x00U);
    /* Source hold time */
    NT35510_WriteRegData(pstcLCD, 0xB600U, 0x05U);
    /* Gate EQ control */
    NT35510_WriteRegData(pstcLCD, 0xB700U, 0x70U);
    NT35510_WriteRegData(pstcLCD, 0xB701U, 0x70U);
    /* Source EQ control (Mode 2) */
    NT35510_WriteRegData(pstcLCD, 0xB800U, 0x01U);
    NT35510_WriteRegData(pstcLCD, 0xB801U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xB802U, 0x03U);
    NT35510_WriteRegData(pstcLCD, 0xB803U, 0x03U);
    /* Inversion mode (2-dot) */
    NT35510_WriteRegData(pstcLCD, 0xBC00U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xBC01U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0xBC02U, 0x00U);
    /* Timing control 4H w/ 4-delay */
    NT35510_WriteRegData(pstcLCD, 0xC900U, 0xD0U);
    NT35510_WriteRegData(pstcLCD, 0xC901U, 0x02U);
    NT35510_WriteRegData(pstcLCD, 0xC902U, 0x50U);
    NT35510_WriteRegData(pstcLCD, 0xC903U, 0x50U);
    NT35510_WriteRegData(pstcLCD, 0xC904U, 0x50U);
    NT35510_WriteRegData(pstcLCD, 0x3500U, 0x00U);
    NT35510_WriteRegData(pstcLCD, 0x3A00U, 0x55U);  /* 16-bit/pixel */
    NT35510_WriteReg(pstcLCD, 0x1100U);
    LCD_Delay(120UL);
    NT35510_WriteReg(pstcLCD, 0x2900U);
}

/**
 * @}
 */

/**
 * @defgroup NT35510_Global_Functions NT35510 Global Functions
 * @{
 */

/**
 * @brief  Initialize LCD device.
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
void NT35510_Init(stc_lcd_controller_t *pstcLCD)
{
    uint16_t u16ID;

    if (NULL != pstcLCD) {
        /* NOP */
        NT35510_WriteRegData(pstcLCD, 0x0000U, 0x00U);

        /* Read ID */
        u16ID = NT35510_ReadID(pstcLCD);

        if (0x5310U == u16ID) {
            LCD_NT35310_Config(pstcLCD);
            m_stcLcdDevice.u16Width   = 320U;
            m_stcLcdDevice.u16Height  = 480U;
            m_stcLcdDevice.u16WRamCmd = 0x2CU;
            m_stcLcdDevice.u16SetXCmd = 0x2AU;
            m_stcLcdDevice.u16SetYCmd = 0x2BU;
        } else if (0x5510U == u16ID) {
            LCD_NT35510_Config(pstcLCD);
            m_stcLcdDevice.u16Width   = 480U;
            m_stcLcdDevice.u16Height  = 800U;
            m_stcLcdDevice.u16WRamCmd = 0x2C00U;
            m_stcLcdDevice.u16SetXCmd = 0x2A00U;
            m_stcLcdDevice.u16SetYCmd = 0x2B00U;
        } else {
            /* Unsupported LCD */
        }

        m_stcLcdDevice.u16ID = u16ID;

        NT35510_SetDisplayDir(pstcLCD, LCD_DISPLAY_VERTICAL);

        /* Set cursor */
        NT35510_SetCursor(pstcLCD, 0U, 0U);

        /* Prepare to write to LCD RAM */
        NT35510_PrepareWriteRAM(pstcLCD);
    }
}

/**
 * @brief  Write data on LCD data register.
 * @param  [in] pstcLCD:                LCD controller [url=home.php?mod=space&uid=1064992]@ref[/url] stc_lcd_controller_t structure.
 * @param  [in] u16Data:                Data to be written
 * @retval None
 */
void NT35510_WriteData(stc_lcd_controller_t *pstcLCD, uint16_t u16Data)
{
    if (NULL != pstcLCD) {
        pstcLCD->u16RAM = u16Data;
    }
}

/**
 * @brief  Write register on LCD register.
 * @param  [in] pstcLCD:                LCD controller @ref stc_lcd_controller_t structure.
 * @param  [in] u16Reg:                 Address of the selected register.
 * @retval None
 */
void NT35510_WriteReg(stc_lcd_controller_t *pstcLCD, uint16_t u16Reg)
{
    if (NULL != pstcLCD) {
        pstcLCD->u16REG = u16Reg;
    }
}

/**
 * @brief  Read data from LCD data register.
 * @param  [in] pstcLCD:                LCD controller @ref stc_lcd_controller_t structure.
 * @retval Read data.
 */
uint16_t NT35510_ReadData(stc_lcd_controller_t *pstcLCD)
{
    uint16_t u16Val = 0U;

    if (NULL != pstcLCD) {
        u16Val = pstcLCD->u16RAM;
    }

    return u16Val;
}

/**
 * @brief  Write to the selected LCD register.
 * @param  [in] pstcLCD:                LCD controller @ref stc_lcd_controller_t structure.
 * @param  [in] u16Reg:                 Address of the selected register.
 * @param  [in] u16Data:                Data to be written
 * @retval None
 */
void NT35510_WriteRegData(stc_lcd_controller_t *pstcLCD, uint16_t u16Reg, uint16_t u16Data)
{
    if (NULL != pstcLCD) {
        /* Write 16-bit index */
        pstcLCD->u16REG = u16Reg;
        /* Write 16-bit Reg */
        pstcLCD->u16RAM = u16Data;
    }
}

/**
 * @brief  Read the selected LCD register.
 * @param  [in] pstcLCD:                LCD controller @ref stc_lcd_controller_t structure.
 * @param  [in] u16Reg:                 Address of the selected register.
 * @retval Register value
 */
uint16_t NT35510_ReadRegData(stc_lcd_controller_t *pstcLCD, uint16_t u16Reg)
{
    uint16_t u16Val = 0U;

    if (NULL != pstcLCD) {
        /* Write 16-bit index*/
        pstcLCD->u16REG = u16Reg;
        u16Val = pstcLCD->u16RAM;
    }

    return u16Val;
}

/**
 * @brief  Read LCD ID.
 * @param  [in] pstcLCD:                LCD controller @ref stc_lcd_controller_t structure.
 * @retval LCD Register Value.
 */
uint16_t NT35510_ReadID(stc_lcd_controller_t *pstcLCD)
{
    uint16_t u16ID = 0U;

    if (NULL != pstcLCD) {
        /* Try to read ID: 0x9341 */
        NT35510_WriteReg(pstcLCD, 0xD3U);
        (void)NT35510_ReadData(pstcLCD);                /* dummy read */
        (void)NT35510_ReadData(pstcLCD);                /* read: 0x00 */
        u16ID  = NT35510_ReadData(pstcLCD) << 8;        /* read: 0x93 */
        u16ID |= NT35510_ReadData(pstcLCD);             /* read: 0x41 */
        if (u16ID != 0x9341U) {
            /* Try to read ID: 0x8552 */
            NT35510_WriteReg(pstcLCD, 0x04U);
            (void)NT35510_ReadData(pstcLCD);            /* dummy read */
            (void)NT35510_ReadData(pstcLCD);            /* read: 0x85 */
            u16ID  = NT35510_ReadData(pstcLCD) << 8;    /* read: 0x85 */
            u16ID |= NT35510_ReadData(pstcLCD);         /* read: 0x41 */
            if (u16ID == 0x8552U) {
                u16ID = 0x7789U;                        /* ID convert to: 0x7789 */
            } else {
                /* Try to read ID: 0x5310 (NT35310) */
                NT35510_WriteReg(pstcLCD, 0xD4U);
                (void)NT35510_ReadData(pstcLCD);            /* dummy read */
                (void)NT35510_ReadData(pstcLCD);            /* read: 0x01 */
                u16ID  = NT35510_ReadData(pstcLCD) << 8;    /* read: 0x53 */
                u16ID |= NT35510_ReadData(pstcLCD);         /* read: 0x10 */
                if (u16ID != 0x5310U) {
                    /* Try to read ID: 0x008000 (NT35510) */
                    NT35510_WriteReg(pstcLCD, 0xDA00);
                    (void)NT35510_ReadData(pstcLCD);        /* read 0xDA00: 0x0000 */
                    NT35510_WriteReg(pstcLCD, 0xDB00U);
                    u16ID = NT35510_ReadData(pstcLCD) << 8; /* read 0xDB00: 0x0080 */
                    NT35510_WriteReg(pstcLCD, 0xDC00U);
                    u16ID |= NT35510_ReadData(pstcLCD);     /* read 0xDC00: 0x0000 */
                    /* Read ID: ID=008000H (5510H) */
                    if (u16ID == 0x008000UL) {
                        u16ID = 0x5510U;                    /* ID convert to: 0x5510 */
                    } else {
                        u16ID = 0U;                         /* Unsupported LCD */
                    }
                }
            }
        }
    }

    return u16ID;
}

/**
 * @brief  Enable the Display.
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
void NT35510_DisplayOn(stc_lcd_controller_t *pstcLCD)
{
    if (NULL != pstcLCD) {
        if (m_stcLcdDevice.u16ID == 0x5510U) {
            NT35510_WriteReg(pstcLCD, 0x2900U);     /* 5510 */
        } else {
            NT35510_WriteReg(pstcLCD, 0x29U);       /* 9341/5310/1963/7789 */
        }
    }
}

/**
 * @brief  Disable the Display.
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
void NT35510_DisplayOff(stc_lcd_controller_t *pstcLCD)
{
    if (NULL != pstcLCD) {
        if (m_stcLcdDevice.u16ID == 0x5510U) {
            NT35510_WriteReg(pstcLCD, 0x2800U);     /* 5510 */
        } else {
            NT35510_WriteReg(pstcLCD, 0x28U);       /* 9341/5310/1963/7789 */
        }
    }
}

/**
 * @brief  Get LCD PIXEL WIDTH.
 * @param  None
 * @retval LCD PIXEL WIDTH.
 */
uint16_t NT35510_GetPixelWidth(void)
{
    return m_stcLcdDevice.u16Width;
}

/**
 * @brief  Get LCD PIXEL HEIGHT.
 * @param  None
 * @retval LCD PIXEL HEIGHT.
 */
uint16_t NT35510_GetPixelHeight(void)
{
    return m_stcLcdDevice.u16Height;
}

/**
 * @brief  Set scan direction.
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in] u16Dir:                 Scan direction
 *         This parameter can be one of the following values:
 *           [url=home.php?mod=space&uid=1238002]@arg[/url] LCD_SCAN_DIR_L2R_U2D: From left to right && from up to down
 *           @arg LCD_SCAN_DIR_L2R_D2U: From left to right && from down to up
 *           @arg LCD_SCAN_DIR_R2L_U2D: From right to left && from up to down
 *           @arg LCD_SCAN_DIR_R2L_D2U: From right to left && from down to up
 *           @arg LCD_SCAN_DIR_U2D_L2R: From up to down && from left to right
 *           @arg LCD_SCAN_DIR_U2D_R2L: From up to down && from right to left
 *           @arg LCD_SCAN_DIR_D2U_L2R: From down to up && from left to right
 *           @arg LCD_SCAN_DIR_D2U_R2L: From down to up && from right to left
 * @retval None
 */
void NT35510_SetScanDir(stc_lcd_controller_t *pstcLCD, uint16_t u16Dir)
{
    uint16_t u16Temp;
    uint16_t dirreg;
    uint16_t regval = 0U;

    if (NULL != pstcLCD) {
        /* when display dir is VERTICAL, 1963 IC change scan-direction, other IC don't change
           when display dir is HORIZONTAL, 1963 IC don't change scan-direction, other IC change */
        if (((0U == m_stcLcdDevice.u16Dir) && (m_stcLcdDevice.u16ID == 0x1963U)) || \
            ((1U == m_stcLcdDevice.u16Dir) && (m_stcLcdDevice.u16ID != 0x1963U))) {
            if (0U == u16Dir) {
                u16Dir = 6U;
            } else if (1U == u16Dir) {
                u16Dir = 7U;
            } else if (2U == u16Dir) {
                u16Dir = 4U;
            } else if (3UL == u16Dir) {
                u16Dir = 5U;
            } else if (4U == u16Dir) {
                u16Dir = 1U;
            } else if (5U == u16Dir) {
                u16Dir = 0U;
            } else if (6U == u16Dir) {
                u16Dir = 3U;
            } else if (7U == u16Dir) {
                u16Dir = 2U;
            } else {
                u16Dir = 6U;
            }
        }

        switch (u16Dir) {
            case LCD_SCAN_DIR_L2R_U2D:
                regval |= ((0U << 7) | (0U << 6) | (0U << 5));
                break;
            case LCD_SCAN_DIR_L2R_D2U:
                regval |= ((1U << 7) | (0U << 6) | (0U << 5));
                break;
            case LCD_SCAN_DIR_R2L_U2D:
                regval |= ((0U << 7) | (1U << 6) | (0U << 5));
                break;
            case LCD_SCAN_DIR_R2L_D2U:
                regval |= ((1U << 7) | (1U << 6) | (0U << 5));
                break;
            case LCD_SCAN_DIR_U2D_L2R:
                regval |= ((0U << 7) | (0U << 6) | (1U << 5));
                break;
            case LCD_SCAN_DIR_U2D_R2L:
                regval |= ((0U << 7) | (1U << 6) | (1U << 5));
                break;
            case LCD_SCAN_DIR_D2U_L2R:
                regval |= ((1U << 7) | (0U << 6) | (1U << 5));
                break;
            case LCD_SCAN_DIR_D2U_R2L:
                regval |= ((1U << 7) | (1U << 6) | (1U << 5));
                break;
            default:
                break;
        }

        if (0x5510U == m_stcLcdDevice.u16ID) {
            dirreg = 0x3600U;
        } else {
            dirreg = 0x36U;
        }

        /* 0x9341 & 0x7789 set BGR bit */
        if ((0x9341U == m_stcLcdDevice.u16ID) || (0x7789U == m_stcLcdDevice.u16ID)) {
            regval |= 0x08U;
        }

        NT35510_WriteRegData(pstcLCD, dirreg, regval);

        /* 1963 don't handle coordinate */
        if (m_stcLcdDevice.u16ID != 0x1963U) {
            if ((regval & 0x20U) > 0U) {
                /* swap X,Y */
                if (m_stcLcdDevice.u16Width < m_stcLcdDevice.u16Height) {
                    u16Temp = m_stcLcdDevice.u16Width;
                    m_stcLcdDevice.u16Width = m_stcLcdDevice.u16Height;
                    m_stcLcdDevice.u16Height = u16Temp;
                }
            } else {
                /* swap X,Y */
                if (m_stcLcdDevice.u16Width > m_stcLcdDevice.u16Height) {
                    u16Temp = m_stcLcdDevice.u16Width;
                    m_stcLcdDevice.u16Width = m_stcLcdDevice.u16Height;
                    m_stcLcdDevice.u16Height = u16Temp;
                }
            }
        }

        /* Set display window size */
        if (0x5510U == m_stcLcdDevice.u16ID) {
            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd);
            NT35510_WriteData(pstcLCD, 0U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd + 1U);
            NT35510_WriteData(pstcLCD, 0U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd + 2U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) >> 8U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd + 3U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) & 0xFFU);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd);
            NT35510_WriteData(pstcLCD, 0U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd + 1U);
            NT35510_WriteData(pstcLCD, 0U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd + 2U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) >> 8U);

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd + 3U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) & 0xFFU);
        } else {
            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd);
            NT35510_WriteData(pstcLCD, 0U);
            NT35510_WriteData(pstcLCD, 0U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) >> 8);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) & 0xFFU);
            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd);
            NT35510_WriteData(pstcLCD, 0U);
            NT35510_WriteData(pstcLCD, 0U);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) >> 8);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) & 0xFFU);
        }
    }
}

/**
 * @brief  Set screen direction.
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in] u16Dir:                 Screen direction
 *         This parameter can be one of the following values:
 *           @arg LCD_DISPLAY_VERTICAL:   LCD vertical display
 *           @arg LCD_DISPLAY_HORIZONTAL: LCD horizontal display
 * @retval None
 */
void NT35510_SetDisplayDir(stc_lcd_controller_t *pstcLCD, uint16_t u16Dir)
{
    if (NULL != pstcLCD) {
        if (LCD_DISPLAY_VERTICAL == u16Dir) { /* Vertical */
            if (0x1963U == m_stcLcdDevice.u16ID) {
                m_stcLcdDevice.u16WRamCmd = 0x2CU;
                m_stcLcdDevice.u16SetXCmd = 0x2BU;
                m_stcLcdDevice.u16SetYCmd = 0x2AU;
                m_stcLcdDevice.u16Width  = 480U;
                m_stcLcdDevice.u16Height = 800U;
            } else if (0x5510U == m_stcLcdDevice.u16ID) {
                /* NT35510 */
                m_stcLcdDevice.u16WRamCmd = 0x2C00U;
                m_stcLcdDevice.u16SetXCmd = 0x2A00U;
                m_stcLcdDevice.u16SetYCmd = 0x2B00U;
                m_stcLcdDevice.u16Width  = 480U;
                m_stcLcdDevice.u16Height = 800U;
            } else {
                /* NT35310 / 9341 / 5310 / 7789 etc */
                m_stcLcdDevice.u16WRamCmd = 0x2CU;
                m_stcLcdDevice.u16SetXCmd = 0x2AU;
                m_stcLcdDevice.u16SetYCmd = 0x2BU;
                if (0x5310U == m_stcLcdDevice.u16ID) {
                    /* NT35310 */
                    m_stcLcdDevice.u16Width  = 320U;
                    m_stcLcdDevice.u16Height = 480U;
                } else {
                    m_stcLcdDevice.u16Width  = 240U;
                    m_stcLcdDevice.u16Height = 320U;
                }
            }
        } else { /* Horizontal */
            if (0x1963U == m_stcLcdDevice.u16ID) {
                m_stcLcdDevice.u16WRamCmd = 0x2CU;
                m_stcLcdDevice.u16SetXCmd = 0x2AU;
                m_stcLcdDevice.u16SetYCmd = 0x2BU;
                m_stcLcdDevice.u16Width  = 800U;
                m_stcLcdDevice.u16Height = 480U;
            } else if (0x5510U == m_stcLcdDevice.u16ID) {
                /* NT35510 */
                m_stcLcdDevice.u16WRamCmd = 0x2C00U;
                m_stcLcdDevice.u16SetXCmd = 0x2A00U;
                m_stcLcdDevice.u16SetYCmd = 0x2B00U;
                m_stcLcdDevice.u16Width  = 800U;
                m_stcLcdDevice.u16Height = 480U;
            } else {
                /* NT35310 / 9341 / 5310 / 7789 etc */
                m_stcLcdDevice.u16WRamCmd = 0x2CU;
                m_stcLcdDevice.u16SetXCmd = 0x2AU;
                m_stcLcdDevice.u16SetYCmd = 0x2BU;
                if (0x5310U == m_stcLcdDevice.u16ID) {
                    /* NT35310 */
                    m_stcLcdDevice.u16Width  = 480U;
                    m_stcLcdDevice.u16Height = 320U;
                } else {
                    m_stcLcdDevice.u16Width  = 320U;
                    m_stcLcdDevice.u16Height = 240U;
                }
            }
        }

        m_stcLcdDevice.u16Dir = u16Dir;
        NT35510_SetScanDir(pstcLCD, LCD_SCAN_DIR);
    }
}

/**
 * @brief  Prepare to write LCD RAM.
 * @param  [in] pstcLCD:                LCD controller
 * @retval None
 */
void NT35510_PrepareWriteRAM(stc_lcd_controller_t *pstcLCD)
{
    if (NULL != pstcLCD) {
        NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16WRamCmd);
    }
}

/**
 * @brief  Set screen backlight.
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in] u8PWM:                  PWM level
           This parameter can be a value between Min_Data = 0 and Max_Data = 100
 * @retval None
 */
void NT35510_SetBackLight(stc_lcd_controller_t *pstcLCD, uint8_t u8PWM)
{
    float32_t f32PWM = ((float32_t)u8PWM * 2.55F);

    if (NULL != pstcLCD) {
        NT35510_WriteReg(pstcLCD, 0xBEU);
        NT35510_WriteData(pstcLCD, 0x05U);
        NT35510_WriteData(pstcLCD, (uint16_t)f32PWM);
        NT35510_WriteData(pstcLCD, 0x01U);
        NT35510_WriteData(pstcLCD, 0xFFU);
        NT35510_WriteData(pstcLCD, 0x00U);
        NT35510_WriteData(pstcLCD, 0x00U);
    }
}

/**
 * @brief  Set Cursor position.
 * @param  [in] pstcLCD:                LCD controller
 * @param  u16Xpos:                     Specifies the X position.
 * @param  u16Ypos:                     Specifies the Y position.
 * @retval None
 */
void NT35510_SetCursor(stc_lcd_controller_t *pstcLCD, uint16_t u16Xpos, uint16_t u16Ypos)
{
    if (NULL != pstcLCD) {
        if (0x1963U == m_stcLcdDevice.u16ID) {
            /* Convert X coordinate */
            if (m_stcLcdDevice.u16Dir == 0U) {
                u16Xpos = m_stcLcdDevice.u16Width - 1U - u16Xpos;
                NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd);
                NT35510_WriteData(pstcLCD, 0U);
                NT35510_WriteData(pstcLCD, 0U);
                NT35510_WriteData(pstcLCD, u16Xpos >> 8);
                NT35510_WriteData(pstcLCD, u16Xpos & 0xFFU);
            } else {
                NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd);
                NT35510_WriteData(pstcLCD, u16Xpos >> 8);
                NT35510_WriteData(pstcLCD, u16Xpos & 0xFFU);
                NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) >> 8);
                NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Width - 1U) & 0xFFU);
            }

            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd);
            NT35510_WriteData(pstcLCD, u16Ypos >> 8);
            NT35510_WriteData(pstcLCD, u16Ypos & 0xFFU);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) >> 8);
            NT35510_WriteData(pstcLCD, (m_stcLcdDevice.u16Height - 1U) & 0xFFU);
        } else if (0x5510U == m_stcLcdDevice.u16ID) {
            NT35510_WriteRegData(pstcLCD, m_stcLcdDevice.u16SetXCmd, (u16Xpos >> 8U));
            NT35510_WriteRegData(pstcLCD, (m_stcLcdDevice.u16SetXCmd + 1U), (u16Xpos & 0xFFU));
            NT35510_WriteRegData(pstcLCD, m_stcLcdDevice.u16SetYCmd, (u16Ypos >> 8U));
            NT35510_WriteRegData(pstcLCD, (m_stcLcdDevice.u16SetYCmd + 1U), (u16Ypos & 0xFFU));
        } else {    /* NT35310 / 9341 / 5310 / 7789 etc */
            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetXCmd);
            NT35510_WriteData(pstcLCD, (u16Xpos >> 8));
            NT35510_WriteData(pstcLCD, (u16Xpos & 0xFFU));
            NT35510_WriteReg(pstcLCD, m_stcLcdDevice.u16SetYCmd);
            NT35510_WriteData(pstcLCD, (u16Ypos >> 8));
            NT35510_WriteData(pstcLCD, (u16Ypos & 0xFFU));
        }
    }
}

/**
 * @brief  Write pixel.
 * @param  [in] pstcLCD:                LCD controller
 * @param  u16Xpos:                     Specifies the X position.
 * @param  u16Ypos:                     Specifies the Y position.
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_WritePixel(stc_lcd_controller_t *pstcLCD, uint16_t u16Xpos, uint16_t u16Ypos, uint16_t u16RGBCode)
{
    if (NULL != pstcLCD) {
        /* Set cursor */
        NT35510_SetCursor(pstcLCD, u16Xpos, u16Ypos);

        /* Prepare to write to LCD RAM */
        NT35510_PrepareWriteRAM(pstcLCD);

        NT35510_WriteData(pstcLCD, u16RGBCode);
    }
}

/**
 * @brief  Draw line.
 * @param  [in] pstcLCD:                LCD controller
 * @param  u16X1:                       Specifies the X position 1.
 * @param  u16X2:                       Specifies the X position 2.
 * @param  u16Y1:                       Specifies the Y position 1.
 * @param  u16Y2:                       Specifies the Y position 2.
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_DrawLine(stc_lcd_controller_t *pstcLCD, uint16_t u16X1, uint16_t u16Y1,
                      uint16_t u16X2, uint16_t u16Y2, uint16_t u16RGBCode)
{
    int16_t t;
    int16_t xerr = 0;
    int16_t yerr = 0;
    int16_t delta_x;
    int16_t delta_y;
    int16_t distance;
    int16_t incx;
    int16_t incy;
    int16_t Row;
    int16_t Col;

    if (NULL != pstcLCD) {
        Row = (int16_t)u16X1;
        Col = (int16_t)u16Y1;
        delta_x = ((int16_t)u16X2 - (int16_t)u16X1);      /* calc delta X, Y*/
        delta_y = ((int16_t)u16Y2 - (int16_t)u16Y1);

        if (delta_x > 0) {
            incx = 1;           /* forward u8Direction */
        } else if (delta_x == 0) {
            incx = 0;           /* vertical line */
        } else {
            incx = -1;          /* reverse direction */
            delta_x = -delta_x;
        }

        if (delta_y > 0) {
            incy = 1;             /* downward direction */
        } else if (delta_y == 0) {
            incy = 0;             /* horizontal line */
        } else {
            incy = -1;            /* upward direction */
            delta_y = -delta_y;
        }

        if (delta_x > delta_y) {
            distance = delta_x; /* set axis */
        } else {
            distance = delta_y;
        }

        for (t = 0; t <= (distance + 1); t++) {
            NT35510_WritePixel(pstcLCD, (uint16_t)Row, (uint16_t)Col, u16RGBCode);   /* draw pixel */

            xerr += delta_x ;
            yerr += delta_y ;

            if (xerr > distance) {
                xerr -= distance;
                Row += incx;
            }

            if (yerr > distance) {
                yerr -= distance;
                Col += incy;
            }
        }
    }
}

/**
 * @brief  Draw a circle.
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in]                         u16Xpos: X position
 * @param  [in]                         u16Ypos: Y position
 * @param  [in]                         u16Radius: Circle radius
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_DrawCircle(stc_lcd_controller_t *pstcLCD, uint16_t u16Xpos, uint16_t u16Ypos,
                        uint16_t u16Radius, uint16_t u16RGBCode)
{
    int32_t  decision;       /* Decision Variable */
    uint32_t current_x;      /* Current X Value */
    uint32_t current_y;      /* Current Y Value */

    if (NULL != pstcLCD) {
        decision = 3 - ((int32_t)u16Radius * 2);
        current_x = 0U;
        current_y = u16Radius;

        while (current_x <= current_y) {
            NT35510_WritePixel(pstcLCD, (u16Xpos + (uint16_t)current_x), (u16Ypos - (uint16_t)current_y), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos + (uint16_t)current_y), (u16Ypos - (uint16_t)current_x), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos + (uint16_t)current_y), (u16Ypos + (uint16_t)current_x), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos + (uint16_t)current_x), (u16Ypos + (uint16_t)current_y), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos - (uint16_t)current_x), (u16Ypos + (uint16_t)current_y), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos - (uint16_t)current_y), (u16Ypos + (uint16_t)current_x), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos - (uint16_t)current_x), (u16Ypos - (uint16_t)current_y), u16RGBCode);
            NT35510_WritePixel(pstcLCD, (u16Xpos - (uint16_t)current_y), (u16Ypos - (uint16_t)current_x), u16RGBCode);
            current_x++;
            /* Bresenham algorithm */
            if (decision < 0) {
                decision += ((4 * (int32_t)current_x) + 6);
            } else {
                decision += (10 + (4 * ((int32_t)current_x - (int32_t)current_y)));
                current_y--;
            }
        }
    }
}

/**
 * @brief  Fill a triangle (between 3 points).
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in] u16X1:                  Point 1 X position
 * @param  [in] u16Y1:                  Point 1 Y position
 * @param  [in] u16X2:                  Point 2 X position
 * @param  [in] u16Y2:                  Point 2 Y position
 * @param  [in] u16X3:                  Point 3 X position
 * @param  [in] u16Y3:                  Point 3 Y position
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_FillTriangle(stc_lcd_controller_t *pstcLCD, uint16_t u16X1, uint16_t u16Y1,
                          uint16_t u16X2, uint16_t u16Y2, uint16_t u16X3, uint16_t u16Y3, uint16_t u16RGBCode)
{
    uint16_t deltax;
    uint16_t deltay;
    int16_t xoff;
    int16_t yoff;
    int16_t xinc1;
    int16_t xinc2;
    int16_t yinc1;
    int16_t yinc2;
    uint16_t den;
    uint16_t num;
    uint16_t numadd;
    uint16_t numpixels;
    uint16_t curpixel;

    if (NULL != pstcLCD) {
        xoff = (int16_t)u16X1;                  /* Start x off at the first pixel */
        yoff = (int16_t)u16Y1;                  /* Start y off at the first pixel */

        /* The difference between the x's */
        if (u16X2 > u16X1) {
            deltax = (u16X2 - u16X1);
        } else {
            deltax = (u16X1 - u16X2);
        }

        /* The difference between the y's */
        if (u16Y2 > u16Y1) {
            deltay = (u16Y2 - u16Y1);
        } else {
            deltay = (u16Y1 - u16Y2);
        }

        if (u16X2 >= u16X1) {
            /* The x-values are increasing */
            xinc1 = 1;
            xinc2 = 1;
        } else {
            /* The x-values are decreasing */
            xinc1 = -1;
            xinc2 = -1;
        }

        if (u16Y2 >= u16Y1) {
            /* The y-values are increasing */
            yinc1 = 1;
            yinc2 = 1;
        } else {
            /* The y-values are decreasing */
            yinc1 = -1;
            yinc2 = -1;
        }

        /* There is at least one x-value for every y-value */
        if (deltax >= deltay) {
            xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
            yinc2 = 0;                  /* Don't change the y for every iteration */
            den = deltax;
            num = (deltax / 2U);
            numadd = deltay;
            numpixels = deltax;         /* There are more x-values than y-values */
        } else {
            /* There is at least one y-value for every x-value */
            xinc2 = 0;                  /* Don't change the x for every iteration */
            yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
            den = deltay;
            num = (deltay / 2U);
            numadd = deltax;
            numpixels = deltay;         /* There are more y-values than x-values */
        }

        for (curpixel = 0U; curpixel <= numpixels; curpixel++) {
            NT35510_DrawLine(pstcLCD, (uint16_t)xoff, (uint16_t)yoff, u16X3, u16Y3, u16RGBCode);

            num += numadd;              /* Increase the numerator by the top of the fraction */

            /* Check if numerator >= denominator */
            if (num >= den) {
                num -= den;             /* Calculate the new numerator value */
                xoff += xinc1;          /* Change the x as appropriate */
                yoff += yinc1;          /* Change the y as appropriate */
            }
            xoff += xinc2;              /* Change the x as appropriate */
            yoff += yinc2;              /* Change the y as appropriate */
        }
    }
}

/**
 * @brief  Draw rectangle.
 * @param  [in] pstcLCD:                LCD controller
 * @param  [in] u16X1:                  Point 1 X position
 * @param  [in] u16Y1:                  Point 1 Y position
 * @param  [in] u16X2:                  Point 2 X position
 * @param  [in] u16Y2:                  Point 2 Y position
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_DrawRectangle(stc_lcd_controller_t *pstcLCD, uint16_t u16X1, uint16_t u16Y1,
                           uint16_t u16X2, uint16_t u16Y2, uint16_t u16RGBCode)
{
    if (NULL != pstcLCD) {
        NT35510_DrawLine(pstcLCD, u16X1, u16Y1, u16X2, u16Y1, u16RGBCode);
        NT35510_DrawLine(pstcLCD, u16X1, u16Y1, u16X1, u16Y2, u16RGBCode);
        NT35510_DrawLine(pstcLCD, u16X1, u16Y2, u16X2, u16Y2, u16RGBCode);
        NT35510_DrawLine(pstcLCD, u16X2, u16Y1, u16X2, u16Y2, u16RGBCode);
    }
}

/**
 * @brief  Clear screen.
 * @param  [in] pstcLCD:                LCD controller
 * @param  u16RGBCode:                  The RGB pixel color in RGB565 format
 * @retval None
 */
void NT35510_Clear(stc_lcd_controller_t *pstcLCD, uint16_t u16RGBCode)
{
    uint32_t i;
    uint32_t u32TotalPoint;

    if (NULL != pstcLCD) {
        /* Set cursor */
        NT35510_SetCursor(pstcLCD, 0U, 0U);
        /* Prepare to write to LCD RAM */
        NT35510_PrepareWriteRAM(pstcLCD);

        u32TotalPoint = (uint32_t)m_stcLcdDevice.u16Width * (uint32_t)m_stcLcdDevice.u16Height;
        for (i = 0UL; i < u32TotalPoint; i++) {
            NT35510_WriteData(pstcLCD, u16RGBCode);
        }
    }
}

 

基于硬件I2C的触摸驱动实现:

/**
 * @brief  Read register on touch pad register.
 * @param  [in]  pstcGt9xxLL            Pointer to a @ref stc_gt9xx_ll_t structure
 * @param  [in]  u16Reg                 Register to be read
 * @param  [out] pu8RegValue            The buffer for reading
 * @param  [in]  u32Len                 The buffer size for bytes
 * @retval None
 */
void GT9XX_REG_Read(const stc_gt9xx_ll_t *pstcGt9xxLL, uint16_t u16Reg, uint8_t *pu8RegValue, uint32_t u32Len)
{
    uint8_t au8RegAddr[2];

    if ((NULL != pstcGt9xxLL) && (NULL != pstcGt9xxLL->Read) && (NULL != pu8RegValue)) {
        au8RegAddr[0] = (uint8_t)((u16Reg & 0xFF00U) >> 8);
        au8RegAddr[1] = (uint8_t)(u16Reg & 0x00FFU);
        (void)pstcGt9xxLL->Read(au8RegAddr, ARRAY_SZ(au8RegAddr), pu8RegValue, u32Len);
    }
}

/**
 * @brief  Write register on touch pad register.
 * @param  [in]  pstcGt9xxLL            Pointer to a @ref stc_gt9xx_ll_t structure
 * @param  [in]  u16Reg                 Register to be write
 * @param  [in]  pu8RegValue            The buffer for writing
 * @param  [in]  u32Len                 The buffer size for bytes
 * @retval None
 */
void GT9XX_REG_Write(const stc_gt9xx_ll_t *pstcGt9xxLL, uint16_t u16Reg, const uint8_t *pu8RegValue, uint32_t u32Len)
{
    uint8_t au8RegAddr[2];

    if ((NULL != pstcGt9xxLL) && (NULL != pstcGt9xxLL->Write) && (NULL != pu8RegValue)) {
        au8RegAddr[0] = (uint8_t)((u16Reg & 0xFF00U) >> 8);
        au8RegAddr[1] = (uint8_t)(u16Reg & 0x00FFU);
        (void)pstcGt9xxLL->Write(au8RegAddr, ARRAY_SZ(au8RegAddr), pu8RegValue, u32Len);
    }
}

/**
 * @brief  Reset GT9XX.
 * @param  [in] pstcGt9xxLL             Pointer to a @ref stc_gt9xx_ll_t structure.
 * @retval None
 */
void GT9XX_SoftReset(const stc_gt9xx_ll_t *pstcGt9xxLL)
{
    uint8_t u8RegValue = 0x02U;

    GT9XX_REG_Write(pstcGt9xxLL, GT9XX_COMMAND, &u8RegValue, 1UL);
}

/**
 * @brief  Read GT9XX touch status.
 * @param  [in] pstcGt9xxLL             Pointer to a @ref stc_gt9xx_ll_t structure.
 * @retval Touch status
 */
uint8_t GT9XX_ReadTouchStatus(const stc_gt9xx_ll_t *pstcGt9xxLL)
{
    uint8_t u8Status = 0U;

    GT9XX_REG_Read(pstcGt9xxLL, GT9XX_TOUCH_STATUS, &u8Status, 1UL);
    return u8Status;
}

/**
 * @brief  Read GT9XX ID.
 * @param  [in] pstcGt9xxLL             Pointer to a @ref stc_gt9xx_ll_t structure.
 * @param  [out] pu8IDValue             The buffer for reading ID
 * @param  [in]  u32Len                 The buffer size for bytes
 * @retval None
 */
void GT9XX_ReadProductID(const stc_gt9xx_ll_t *pstcGt9xxLL, uint8_t *pu8IDValue, uint32_t u32Len)
{
    GT9XX_REG_Read(pstcGt9xxLL, GT9XX_PRODUCT_ID, pu8IDValue, u32Len);
}

/**
 * @brief  Read GT9XX point.
 * @param  [in]  pstcGt9xxLL            Pointer to a @ref stc_gt9xx_ll_t structure.
 * @param  [in]  u16Point               Touch pad point
 * @param  [out] pu16X                  Point x coordinate
 * @param  [out] pu16Y                  Point y coordinate
 * @retval None
 */
void GT9XX_GetXY(const stc_gt9xx_ll_t *pstcGt9xxLL, uint16_t u16Point, uint16_t *pu16X, uint16_t *pu16Y)
{
    uint8_t au8Tmp[4];

    if ((pu16X != NULL) && (pu16Y != NULL)) {
        GT9XX_REG_Read(pstcGt9xxLL, u16Point, au8Tmp, 4UL);
        (*pu16X) = (uint16_t)au8Tmp[0] | ((uint16_t)au8Tmp[1] << 8);
        (*pu16Y) = (uint16_t)au8Tmp[2] | ((uint16_t)au8Tmp[3] << 8);
    }
}

 

主程序:

/**
 * @brief  BSP clock initialize.
 *         SET board system clock to PLLH@160MHz
 *         Flash: 3 wait
 *         SRAM_H: 0 wait
 *         SRAM_B: 1 wait
 *         PCLK0: 160MHz
 *         PCLK1: 80MHz
 *         PCLK2: 40MHz
 *         PCLK3: 40MHz
 *         PCLK4: 80MHz
 *         EXCLK: 40MHz
 *         HCLK:  160MHz
 * @param  None
 * @retval None
 */
void BSP_CLK_Init(void)
{
    stc_clock_xtal_init_t stcXtalInit;
    stc_clock_pll_init_t stcPLLHInit;

    /* PCLK0, HCLK Max 200MHz */
    /* PCLK1, PCLK4 Max 100MHz */
    /* PCLK2, EXCLK Max 60MHz */
    /* PCLK3 Max 50MHz */
    CLK_SetClockDiv(CLK_BUS_CLK_ALL,
                    (CLK_PCLK0_DIV1 | CLK_PCLK1_DIV2 | CLK_PCLK2_DIV4 |
                     CLK_PCLK3_DIV4 | CLK_PCLK4_DIV2 | CLK_EXCLK_DIV4 |
                     CLK_HCLK_DIV1));

    GPIO_AnalogCmd(BSP_XTAL_PORT, BSP_XTAL_IN_PIN | BSP_XTAL_OUT_PIN, ENABLE);
    (void)CLK_XtalStructInit(&stcXtalInit);
    /* Config Xtal and enable Xtal */
    stcXtalInit.u8Mode   = CLK_XTAL_MD_OSC;
    stcXtalInit.u8Drv    = CLK_XTAL_DRV_ULOW;
    stcXtalInit.u8State  = CLK_XTAL_ON;
    stcXtalInit.u8StableTime = CLK_XTAL_STB_2MS;
    (void)CLK_XtalInit(&stcXtalInit);

    (void)CLK_PLLStructInit(&stcPLLHInit);
    /* VCO = (8/1)*800 = 640MHz*/
    stcPLLHInit.u8PLLState = CLK_PLL_ON;
    stcPLLHInit.PLLCFGR = 0UL;
    stcPLLHInit.PLLCFGR_f.PLLM = 1UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLN = 80UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLP = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLQ = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLR = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLSRC = CLK_PLL_SRC_XTAL;
    (void)CLK_PLLInit(&stcPLLHInit);

    /* 3 cycles for 150 ~ 200MHz */
    (void)EFM_SetWaitCycle(EFM_WAIT_CYCLE3);
    /* 3 cycles for 150 ~ 200MHz */
    GPIO_SetReadWaitCycle(GPIO_RD_WAIT3);
    CLK_SetSysClockSrc(CLK_SYSCLK_SRC_PLL);
}

/**
 * @brief  Return true is the touchpad is pressed
 * @param  None
 * @retval Press state
 */
static bool TOUCHPAD_IsPressed(void)
{
    uint8_t u8Tmp;
    uint8_t u8Status;
    bool bPressed = false;

    BSP_GT9XX_REG_Read(GT9XX_TOUCH_STATUS, &u8Status, 1UL);
    if ((u8Status & 0x80U) != 0U) {
        u8Tmp = 0U;
        BSP_GT9XX_REG_Write(GT9XX_TOUCH_STATUS, &u8Tmp, 1U);

        if ((0U < (u8Status & 0x0FU)) && ((u8Status & 0x0FU) < 6U)) {
            bPressed = true;
        }
    }

    return bPressed;
}

/**
 * @brief  Get touch data.
 * @param  [out] pstcData               Pointer to a @ref stc_touchpad_data_t structure.
 * @retval None
 */
static void TOUCHPAD_Read(stc_touchpad_data_t *pstcData)
{
    static uint16_t u16LastX = 0U;
    static uint16_t u16LastY = 0U;

    /*Save the pressed coordinates and the state*/
    if (TOUCHPAD_IsPressed()) {
        BSP_GT9XX_GetXY(GT9XX_POINT1, &u16LastX, &u16LastY);
        pstcData->enPointPress = SET;
    } else {
        pstcData->enPointPress = RESET;
    }

    /*Set the last pressed coordinates*/
    pstcData->stcPoint.u16X = u16LastX;
    pstcData->stcPoint.u16Y = u16LastY;
}

/**
 * @brief  Check if a point is on an window
 * @param  [in] pstcWin                 Pointer to a @ref stc_touchpad_window_t structure.
 * @param  [in] pstcPoint               Pointer to a @ref stc_touchpad_point_t structure.
 * @retval bool:
 *           - true:                    The point is in the area.
 *           - false:                   The point is out the area.
 */
bool TOUCHPAD_IsPointOn(const stc_touchpad_window_t *pstcWin, const stc_touchpad_point_t *pstcPoint)
{
    bool bIsPointOnWin = false;

    if ((pstcPoint->u16X >= pstcWin->u16X1 && pstcPoint->u16X <= pstcWin->u16X2) && \
        (pstcPoint->u16Y >= pstcWin->u16Y1 && pstcPoint->u16Y <= pstcWin->u16Y2)) {
        bIsPointOnWin = true;
    }

    return bIsPointOnWin;
}

/**
 * @brief  Main function of LCD project
 * @param  None
 * @retval int32_t return value, if needed
 */
int32_t main(void)
{
    uint8_t i;
    uint16_t u16Width;
    uint16_t u16Height;
    bool bIsPointOnWin;
    const uint8_t u8RectangleCount = 3U;
    uint16_t u16WinSize;
    stc_touchpad_window_t stcWin;

    /* MCU Peripheral registers write unprotected */
    LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM);

    /* Initialize system clock: */
    BSP_CLK_Init();

    BSP_IO_Init();
    BSP_LCD_IO_Init();

    /* Initialize LCD touch pad */
    BSP_GT9XX_Init();

    /* HW Reset LCD */
    BSP_LCD_RSTCmd(EIO_PIN_RESET); /* RST# to low */
    DDL_DelayMS(50UL);
    BSP_LCD_RSTCmd(EIO_PIN_SET);   /* RST# to high */
    DDL_DelayMS(50UL);

    /* Initialize NT35510 LCD */
    BSP_NT35510_Init();

    /* Clear LCD screen */
    BSP_NT35510_Clear(LCD_COLOR_BLACK);

    /* Turn on LCD backlight */
    BSP_LCD_BKLCmd(EIO_PIN_SET);

    /* Set LCD cursor */
    BSP_NT35510_SetCursor(0U, 0U);

    /* MCU Peripheral registers write protected */
    LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM);

    u16Width = BSP_NT35510_GetPixelWidth();
    u16Height = BSP_NT35510_GetPixelHeight();

    for (;;) {
        for (i = 0U; i < u8RectangleCount; i++) {
            bIsPointOnWin = false;
            u16WinSize = u16Width / u8RectangleCount;

            stcWin.u16X1 = (i * u16WinSize);
            stcWin.u16Y1 = (u16Height / 2U) - (u16WinSize / 2U);
            stcWin.u16X2 = stcWin.u16X1 + u16WinSize - 1U;
            stcWin.u16Y2 = (u16Height / 2U) + (u16WinSize / 2U) - 1U;
            BSP_NT35510_DrawRectangle(stcWin.u16X1, stcWin.u16Y1, stcWin.u16X2, stcWin.u16Y2, LCD_COLOR_GREEN);

            do {
                (void)memset(&m_stcTouchData, 0, sizeof(m_stcTouchData));
                TOUCHPAD_Read(&m_stcTouchData);
                if (m_stcTouchData.enPointPress == SET) {
                    bIsPointOnWin = TOUCHPAD_IsPointOn(&stcWin, &m_stcTouchData.stcPoint);
                }
            } while (false == bIsPointOnWin);

            BSP_NT35510_Clear(LCD_COLOR_BLACK);
        }

        BSP_NT35510_DrawCircle(u16Width / 2U, u16Height / 2U, u16Width / 4U, LCD_COLOR_RED);
        DDL_DelayMS(1000UL);

        BSP_NT35510_Clear(LCD_COLOR_RED);
        DDL_DelayMS(1000UL);

        BSP_NT35510_Clear(LCD_COLOR_GREEN);
        DDL_DelayMS(1000UL);

        BSP_NT35510_Clear(LCD_COLOR_BLUE);
        DDL_DelayMS(1000UL);

        /* Clear LCD screen */
        BSP_NT35510_Clear(LCD_COLOR_BLACK);
    }
}

 

6.运行效果

注意事项:拨码开关SW2选择EXMC功能 & 码开关SW4选择LCD功!

3

 

最新回复

看上去这个还是不错的,等下次有机会的时候,拿来试一试功能能不能满足要求   详情 回复 发表于 2024-2-26 10:14
点赞 关注(1)
个人签名We are a team and we work as a team !
 
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

看上去这个还是不错的,等下次有机会的时候,拿来试一试功能能不能满足要求

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表