欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

显示屏的方向设置问题

发布时间:2024/10/14 编程问答 74 豆豆
生活随笔 收集整理的这篇文章主要介绍了 显示屏的方向设置问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

此文基于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)

//画点函数 //x,y:坐标 //color:颜色值 void LTDC_Draw_Point(u16 x,u16 y,u32 color) { #if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888if(lcdltdc.dir) //横屏{*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x))=color;}else //竖屏{*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x)+y))=color; } #elseif(lcdltdc.dir) //横屏{*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*y+x))=color;}else //竖屏{*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1)+y))=color; } #endif }

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);} }

总结

以上是生活随笔为你收集整理的显示屏的方向设置问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。