在很多人使用OLED屏幕画图时,会遇到一个问题:画出来的图是倒着的。其实这个问题根源可以追溯到OLED屏幕的发明和制造过程。
在OLED屏幕制造过程中,一般采用的是“逐行扫描”的方式,即从上到下一行一行的扫描,并按照从左到右的次序依次点亮像素点。这样做的原因是可以减少信号传输所需的线路数量,从而减小了制造成本。
但是,在PC机的显卡或者单片机的OLED驱动库中,程序员/工程师通常使用的是“按页填充”的方式。也就是说,先把一整页的像素点数据都写入缓存中,再把整页数据一次性通过SPI或者I2C总线写到OLED屏幕的对应页中。这样做虽然方便了编程,但是也带来了一个问题,就是页面倒置。
上面提到了,如果采用“逐行扫描”的方式,应该是从上到下依次点亮像素点,而采用“按页填充”的方式,实际是把整页数据发送到OLED屏幕。这个时候,如果先写入的页的地址是最上面一页,那么它所对应的显示效果,就是最下面的一行像素。因此,在采用“按页填充”的方式时,所画出来的图形,就会反着显示。
举个例子,如果你想在OLED屏幕上画一条从左上角到右下角的直线,你的程序会按照逐个像素点的形式来写入缓存,然后再通过“按页填充”的方式,把这些点一起发给OLED屏幕。但是,由于OLED屏幕所显示的像素顺序和你寄给它的顺序不同,所以最后呈现出来的结果就是从右下角到左上角的一条直线。
既然我们知道了为什么OLED画点函数页会倒置,那么如何解决这个问题呢?
一种简单的方法是在实际使用时,将OLED屏幕上下翻转。这种方法虽然方便,但是天生适用于需要显示的图形上下完全对称的情况下,否则还是会存在问题。
更好的解决方案是通过修改源代码,在OLED驱动程序中增加一个翻转参数。这个参数的作用是说明,是否需要将填充数据的顺序倒过来。这样,即使采用了“按页填充”的方式,也可以通过调整这个参数来实现正常显示。
通过上述分析,我们对OLED画点函数页为什么是反着有了更加深刻的认识。我们了解到,OLED屏幕的制造过程和驱动库中的设计并不一致,所以导致了画出来的图形是倒着的。为了解决这个问题,我们可以通过屏幕翻转或修改驱动程序的方式来实现正常显示。