STM32驱动友达1.2寸圆形显示器(三)

圆形显示器驱动持续排坑中:

前面已经讲过如何排除硬件和初始化的坑了,现在要排除的基本都是BUG。

第二章里已经实现了刷屏,但刷屏时发现屏的两侧有留白,这个时候就需要找窗口设置,或者输出图像的设置了。

STM32驱动友达1.2寸圆形显示器(三)

查看屏幕手册,这个手册真的是不仅仅是简单,是简陋到无法形容了,直接一张图,就好像说你能驱动,像素就制动对齐了一样。

STM32驱动友达1.2寸圆形显示器(三)

接下来就是调整程序,我直接在窗口设置函数中添加了偏移,经过测试图像在水平方向上需要右移4个像素,垂直方向上需要下移2个像素点。

注意:在结束点上还要减1,否则图像会被对角切开。这个减1需要认真看手册,这个地方和其他屏有区别,一般都是设置像素最大值,他是需要减一的,这个要在驱动IC的手册上才有。这个我也是在输出图片时才发现。

STM32驱动友达1.2寸圆形显示器(三)

STM32驱动友达1.2寸圆形显示器(三)

#define START_H_ADD 4
#define START_V_ADD 2

#define MAX_COLUMN     390
#define MAX_ROW         390

void set_window_xy(uint16_t xstart, uint16_t ystart, uint16_t xend, uint16_t yend)
{
    uint8_t add[4];  
        xstart += START_H_ADD;
        ystart += START_V_ADD;
        xend += START_H_ADD-1;
        yend += MAX_COLUMN-1;
    
    add[0] = (uint8_t)(xstart>>8);
    add[1] = (uint8_t)xstart;
    add[2] = (uint8_t)(xend>>8);
    add[3] = (uint8_t)xend;
    lcd_write_cmd_data(0x2A, add, 4);

    add[0] = (uint8_t)(ystart>>8);
    add[1] = (uint8_t)ystart;
    add[2] = (uint8_t)(yend>>8);
    add[3] = (uint8_t)yend;
    lcd_write_cmd_data(0x2B, add, 4);

    lcd_write_cmd(0x2C);
}

当设置正确以后,显示图片没有偏差。

STM32驱动友达1.2寸圆形显示器(三)

显示图片使用的函数如下

void lcd_show_pic(const uint8_t *color, uint16_t sx, uint16_t sy, uint16_t xpix, uint16_t ypix)
{
    uint32_t i,j;
    set_window_xy(sx, sy, xpix, ypix);
    for(i=0; i<xpix; i++)
    {
        for(j=0; j<ypix; j++)
        {
            lcd_write_data(*color++);
        }
    }
    lcd_write_cmd(0x2C);
}

这里的图像需要使用一个图片转像素点的工具,在百度上搜索下载Img2Lcd工具 ,按照下图设置,进行保存,并把生成的数据放到程序中即可。

STM32驱动友达1.2寸圆形显示器(三)

 下一步实现其他ui都可以脱离手册了,如果还会出现问题,基本都是BUG,不是坑了