本以为我已经把手册上的坑排完了,直到我显示了这张图
这是取色器的图,使用RGB332显示效果太差了,我就又查了手册:
关于色彩格式这里,手册上标识的SPI就三种,感觉后三种真彩色不能使用似的,但实际这就是个坑,SPI是可以使用后三种色彩格式的,以下是使用16bit的色彩格式,这才叫真彩色。
前面的显示屏驱动都只是基于输出显示的,最近要做UI系统在上面,当然需要的函数接口就要有一定要求,遇到一个麻烦解决一个麻烦。
比如现在的读颜色,从手册中找的读取指令:
指令没有错,但指令下面的说明太简陋,读取的时候也不知道读取出来的颜色格式是什么,默认以为,读取的颜色和在0x3A设置的颜色格式一样,但事实却并不是,输出的点是RGB888格式,需要将读取出来的颜色转换格式。
正确的软件执行为:
u16 lcd_read_color(void)
{
u8 r,g,b;
u16 RxData;
SPI_CS_RESET();
LCD_DCX_RESET();
SPI_ReadWriteByte(0x2E);
LCD_DCX_SET();
SPI_ReadWriteByte(0xFF);
r = SPI_ReadWriteByte(0xFF);
g = SPI_ReadWriteByte(0xFF);
b = SPI_ReadWriteByte(0xFF);
SPI_CS_SET();
RxData = (((u16)r>>3)<<11)|(((u16)g>>2)<<5)|(((u16)b>>3)<<0);
printf("color: 0x%04X", RxData);
return RxData;
}
不仅如此,软件执行顺序中,片选不可以关闭,开始会有一个空读。
下一步使用UI系统就可以使用16位色了,最近开始使用STemWin来测试这个屏,看看效果如何了