STM32驱动友达1.2寸圆形显示器(三)
圆形显示器驱动持续排坑中:
前面已经讲过如何排除硬件和初始化的坑了,现在要排除的基本都是BUG。
第二章里已经实现了刷屏,但刷屏时发现屏的两侧有留白,这个时候就需要找窗口设置,或者输出图像的设置了。
查看屏幕手册,这个手册真的是不仅仅是简单,是简陋到无法形容了,直接一张图,就好像说你能驱动,像素就制动对齐了一样。
接下来就是调整程序,我直接在窗口设置函数中添加了偏移,经过测试图像在水平方向上需要右移4个像素,垂直方向上需要下移2个像素点。
注意:在结束点上还要减1,否则图像会被对角切开。这个减1需要认真看手册,这个地方和其他屏有区别,一般都是设置像素最大值,他是需要减一的,这个要在驱动IC的手册上才有。这个我也是在输出图片时才发现。
#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);
}
当设置正确以后,显示图片没有偏差。
显示图片使用的函数如下
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工具 ,按照下图设置,进行保存,并把生成的数据放到程序中即可。
下一步实现其他ui都可以脱离手册了,如果还会出现问题,基本都是BUG,不是坑了