天天看點

emWin在STM32上移植OLED驅動問題(3)edit顯示,數字顯示為被光标覆寫光标為全黑色

**

這兩天困擾我的問題,emWin調用小工具edit顯示,得到焦點後,文本顯示被光标覆寫,光标為全黑色。

**

*

emWin在STM32上移植OLED驅動問題(3)edit顯示,數字顯示為被光标覆寫光标為全黑色

後來發現是驅動的問題,每次顯示光标的時候,會調用_FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1)函數,這個函數用的是正點原子的代碼,一直沒有懷疑是這塊的問題,以為是emwin系統的問題,

static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
	LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);
}
           

後來打開emwin的源碼一看,不是這樣的,前面還有一個異或操作_XorPixel,這個函數對目前像素與黑框異或,就可以反色顯示文本了。

static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
	 LCD_PIXELINDEX PixelIndex;
	  int x;

	  PixelIndex = LCD__GetColorIndex();
	  if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
	    for (; y0 <= y1; y0++) {
	      for (x = x0; x <= x1; x++) {
	        _XorPixel(pDevice, x, y0);
	      }
	    }
	  } else {
	    for (; y0 <= y1; y0++) {
	      for (x = x0; x <= x1; x++) {
	        _SetPixelIndex(pDevice, x, y0, PixelIndex);
	      }
	    }
	  }
           
emWin在STM32上移植OLED驅動問題(3)edit顯示,數字顯示為被光标覆寫光标為全黑色

吓得我趕緊檢查了一下其他底層驅動有沒有問題。。。

2019.05.21更新

OLED上使用emwin還是存在很大的問題,比如用廠家給的驅動會重新整理慢啊。。。

_FillRect這個區域重新整理的函數,還是重新整理太慢了,後來把後面的打點函數改了一下,在區域顯示,采用晶片的位址自增功能,對螢幕進行批量重新整理。簡直快的我懷疑人生。。。。。。。

繼續閱讀