显示屏的方向设置问题
生活随笔
收集整理的這篇文章主要介紹了
显示屏的方向设置问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此文基于stm32F429原子的例程,stm32F429自帶LTDC液晶控制器,底層驅動在"ltdc.c"中配置。
1. 在不用emwin顯示的情況下,如果想任意設置屏幕的顯示方向,則應該更改文件"ltdc.c"中的打點函數,想怎么顯示修改代碼
lcdltdc.pixsize*(lcdltdc.pwidth*y+x)
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x)+y)
lcdltdc.pixsize*(lcdltdc.pwidth*(272-y)+(480-x))
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1)+y)
2.使用emwin時,應該在emwin的相應的LCD配置文件LCDConf_中修改LCD_X_Config()函數,參考emwin5手冊中的“顯示驅動”一章節中的“通過函數配置顯示方向”這一節,大概在800多頁。
修改代碼
? GUI_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y);
?GUI_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y);? ? ? ? ? ?
//配置程序,用于創建顯示驅動器件,設置顏色轉換程序和顯示尺寸 void LCD_X_Config(void) {uint32_t i;LCD_LL_Init (); //LCD底層驅動(LTDC中斷設置和DMA2D初始化) #if (NUM_BUFFERS>1) //多緩沖for (i=0;i<GUI_NUM_LAYERS; i++) {GUI_MULTIBUF_ConfigEx(i, NUM_BUFFERS);} #endif//設置第一層GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER_0,COLOR_CONVERSION_0,0,0);//創建顯示驅動器件GUI_SelectLayer(0); //選中第0層if(lcddev.dir==0)//豎屏{LCD_SetSizeEx(0,lcddev.height,lcddev.width); //設置可見區尺寸LCD_SetVSizeEx(0,lcddev.height,lcddev.width*NUM_VSCREENS); //設置虛擬顯示區尺寸 GUI_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); //設置為豎屏}else //橫屏{LCD_SetSizeEx(0,lcddev.width,lcddev.height); //設置可見區尺寸LCD_SetVSizeEx(0,lcddev.width,lcddev.height*NUM_VSCREENS); //設置虛擬顯示區尺寸GUI_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y); //設置為反向//屏幕方向設置}GUI_TOUCH_Calibrate(GUI_COORD_X,0,lcddev.width,0,lcddev.width-1); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,0,lcddev.height-1); #if (GUI_NUM_LAYERS>1)//設置第二層GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER_1,COLOR_CONVERSION_1,0,1);GUI_SelectLayer(1); //選中第1層if(lcddev.dir==0)//豎屏{LCD_SetSizeEx(1,lcddev.height,lcddev.width); //設置可見區尺寸LCD_SetVSizeEx(1,lcddev.height,lcddev.width*NUM_VSCREENS); //設置虛擬顯示區尺寸 GUI_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y); //設置為豎屏}else //橫屏{LCD_SetSizeEx(1,lcddev.width,lcddev.height); //設置可見區尺寸LCD_SetVSizeEx(1,lcddev.width,lcddev.height*NUM_VSCREENS); //設置虛擬顯示區尺寸GUI_SetOrientation(GUI_MIRROR_X|GUI_MIRROR_Y); //設置為反向//屏幕方向設置}GUI_TOUCH_Calibrate(GUI_COORD_X,0,lcddev.width,0,lcddev.width-1); GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,0,lcddev.height-1); #endiflayer_prop[0].address=LCD_LAYER0_FRAME_BUFFER; //緩沖區 #if (GUI_NUM_LAYERS>1)layer_prop[1].address=LCD_LAYER1_FRAME_BUFFER; #endiffor (i=0;i<GUI_NUM_LAYERS;i++) {layer_prop[i].pColorConvAPI=(LCD_API_COLOR_CONV *)apColorConvAPI[i];layer_prop[i].pending_buffer=-1;LCD_SetVRAMAddrEx(i,(void *)(layer_prop[i].address));layer_prop[i].BytesPerPixel=LCD_GetBitsPerPixelEx(i) >> 3;LCD_SetDevFunc(i,LCD_DEVFUNC_COPYBUFFER,(void(*)(void))CUSTOM_CopyBuffer);LCD_SetDevFunc(i,LCD_DEVFUNC_COPYRECT,(void(*)(void))CUSTOM_CopyRect);if (LCD_LL_GetPixelformat(i)<=LTDC_PIXEL_FORMAT_ARGB4444) {LCD_SetDevFunc(i,LCD_DEVFUNC_FILLRECT,(void(*)(void))CUSTOM_FillRect);LCD_SetDevFunc(i,LCD_DEVFUNC_DRAWBMP_8BPP,(void(*)(void))LCD_DrawBitmap8bpp);}if(LCD_LL_GetPixelformat(i)==LTDC_PIXEL_FORMAT_RGB565) {LCD_SetDevFunc(i,LCD_DEVFUNC_DRAWBMP_16BPP,(void(*)(void))LCD_DrawBitmap16bpp); }GUICC_M1555I_SetCustColorConv(Color2IndexBulk_M1555IDMA2D,Index2ColorBulk_M1555IDMA2D); //GUICC_M565_SetCustColorConv(Color2IndexBulk_M565DMA2D,Index2ColorBulk_M565DMA2D); GUICC_M4444I_SetCustColorConv(Color2IndexBulk_M4444IDMA2D,Index2ColorBulk_M4444IDMA2D); GUICC_M888_SetCustColorConv(Color2IndexBulk_M888DMA2D,Index2ColorBulk_M888DMA2D); GUICC_M8888I_SetCustColorConv(Color2IndexBulk_M8888IDMA2D,Index2ColorBulk_M8888IDMA2D);GUI_SetFuncAlphaBlending(DMA2D_AlphaBlending); GUI_SetFuncGetpPalConvTable(_LCD_GetpPalConvTable);GUI_SetFuncMixColors(DMA2D_MixColors);GUI_SetFuncMixColorsBulk(LCD_MixColorsBulk);} }
總結
以上是生活随笔為你收集整理的显示屏的方向设置问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数指针——typedef函数指针
- 下一篇: emwin自定义消息问题