打印
[单片机芯片]

CH32F205R_DIY测试板3_emwin6.16移植

[复制链接]
966|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LCD硬件规格:1.3寸,分辨率:240*240,接口:单线SPI,显示IC:ST7789;EMwin移植版本为6.16,在自带的显示驱动文件"LCDConf_FlexColor_Template.c"中更改LCD的水平分辨率和垂直分辨率.

1.更改显示分辨率
#define XSIZE_PHYS  240 // To be adapted to x-screen size
#define YSIZE_PHYS  240 // To be adapted to y-screen size

2.添加写寄存器
static void LcdWriteReg(U8 Data)
{
    // ... TBD by user
    LCD_Write_Cmd(Data);
}

3.添加写数据
static void LcdWriteData(U8 Data)
{
    // ... TBD by user
    LCD_Write_Data(Data);
}

4.添加写多个数据
static void LcdWriteDataMultiple(U8 * pData, int NumItems)
{
    while (NumItems--)
    {
        // ... TBD by user
        LCD_Write_Data(*pData++);
    }
}

5.LCD配置
void LCD_X_Config(void)
{
    GUI_DEVICE * pDevice;
    CONFIG_FLEXCOLOR Config = {0};
    GUI_PORT_API PortAPI = {0};
    // Set display driver and color conversion
    pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
    // Display driver configuration, required for Lin-driver
    LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
    LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
    // Orientation
    //Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
    Config.Orientation = 0 ;
    Config.NumDummyReads = 2;
    GUIDRV_FlexColor_Config(pDevice, &Config);
    // Set controller and operation mode
    PortAPI.pfWrite8_A0  = LcdWriteReg;
    PortAPI.pfWrite8_A1  = LcdWriteData;
    PortAPI.pfWriteM8_A1 = LcdWriteDataMultiple;
    PortAPI.pfReadM8_A1  = LcdReadDataMultiple;
    //ST7789ΪGUIDRV_FLEXCOLOR_F66709
    GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B8);
}

6.LCD初始化
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
{
    int r;
    (void) LayerIndex;
    (void) pData;

    switch (Cmd)
    {
        case LCD_X_INITCONTROLLER:
        {
            //
            // Called during the initialization process in order to set up the
            // display controller and put it into operation. If the display
            // controller is not initialized by any external routine this needs
            // to be adapted by the customer...
            //
            // ...
            //调用LCD初始化
            Lcd_Init();
            return 0;
        }

        default:
            r = -1;
    }

    return r;
}

7.在systemtick中添加GUI 1毫秒时基
void SysTick_Handler( void )
{
        #include "GUI.h"
    extern volatile GUI_TIMER_TIME OS_TimeMS;
    ++OS_TimeMS ;
}

8.main主程序中添加
GUI_Init();
WM_SetCreateFlags(WM_CF_MEMDEV);        //使用内存设备进行重绘
GUI_UC_SetEncodeUTF8();
CreateWindow();
while( 1 )
{
        GUI_Delay(10);
}

最终画面

中景园电子1.3LCD显示屏技术资料.zip

6.18 MB

CH32F205R_DIY测试板(emwin616).zip

3.42 MB

使用特权

评论回复
沙发
qcliu| | 2023-5-5 16:11 | 只看该作者
如果更改显示分辨率了的话 那么实际显示的时候会自适应吗

使用特权

评论回复
板凳
drer| | 2023-5-5 16:33 | 只看该作者
qcliu 发表于 2023-5-5 16:11
如果更改显示分辨率了的话 那么实际显示的时候会自适应吗

感觉没有那么智能的 pc端还得适应一下呢

使用特权

评论回复
地板
coshi| | 2023-5-5 17:14 | 只看该作者
一般我们在配置LCD的时候都需要配置哪些参数呢

使用特权

评论回复
5
tpgf| | 2023-5-5 17:23 | 只看该作者
coshi 发表于 2023-5-5 17:14
一般我们在配置LCD的时候都需要配置哪些参数呢

垂直同步信号的后肩
垂直同步信号的前肩
垂直同步信号的脉宽
水平同步信号的后肩
水平同步信号的前肩
水平同步信号的脉宽
等等吧

使用特权

评论回复
6
kxsi| | 2023-5-6 08:13 | 只看该作者
水平分辨率和垂直分辨率可以随意更改的吗

使用特权

评论回复
7
wiba| | 2023-5-6 12:09 | 只看该作者
kxsi 发表于 2023-5-6 08:13
水平分辨率和垂直分辨率可以随意更改的吗

感觉不能改成任意数值 得看屏幕支持不支持的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

106

帖子

4

粉丝