显示屏的方向设置问题
此文基于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);}
}
显示屏的方向设置问题相关推荐
- 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )
文章目录 安卓直播推流专栏博客总结 一. Camera 传感器方向简介 二. Camera 图像传感器横向显示数据 三. Camera 图像传感器纵向显示数据 四. 设置 Camera 预览数据方向 ...
- win7如何用双显示屏,如何设置
确保把显示器与电脑连接,电源接通. 1.鼠标右击,选择<屏幕分辨率> 2.在<多显示器>选项里有扩展.复制等选项.选扩展的话,两个屏幕只有桌面背景一样,相当于扩大了1号显示器. ...
- STM32-IO方向设置
读取MPU6050时,在IIC.h中看到了如下的代码,比较疑惑是什么意思. #define MPU_SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB-> ...
- 【Android UI】Paint Gradient 渐变渲染 ① ( LinearGradient 线性渐变渲染 | 设置渲染方向 | 设置渲染颜色 | 设置渲染模式 | MIRROR )
文章目录 一.LinearGradient 线性渐变渲染 1.设置 2 个颜色的渐变 3.设置多个颜色的渐变 二.LinearGradient 线性渐变渲染重要参数分析 1.正常渲染 2.设置多个渐变 ...
- Matplotlib绘图中plt.xtricks()X轴文字方向设置方法
1.plt.xtricks()函数详解参数介绍 def xticks(ticks: Union[ndarray, Iterable, int, float, None] = None,labels: ...
- html 打印方向设置
1.横向打印 <style type="text/css" media="print">@page{size:A4 landscape;} < ...
- led显示屏服务器怎么设置,led显示屏怎么改字幕 led显示屏改字幕方法
下面三种方法可帮助你实现led显示屏改字. led显示屏改字方法一:通过手机(或遥控)来改字 这种方式是最简单的方式,我们可以编辑短信就可以发送和更改广告字幕了. led显示屏改字方法二:通过u盘改字 ...
- Android横竖屏屏幕方向设置
通常在代码里可以直接设置屏幕的方向,大致如下: 设置为横屏: private void setHorizontalScreen(Activity activity) {if (activity.get ...
- cocos creator 角色扮演RPG游戏 动态创建动画,附8方向设置
脚本是我根据官方的动态创建动画来的.因为我的素材是每个dong动作一个套图片,所以我是这样设置: 1,素材整理 一套素材包含:站立,跑步,攻击,技能,死亡,采集,每个动作都有8个方向的素材, 比较多少 ...
最新文章
- 现代密码学2.1--完美安全和完美不可区分/Perfectly secret, Perfectly indistinguishable
- linux创建crontab定时任务
- GitHub Universe 2021|MS Reactor 邀你共聚年度盛会
- Mybatisplus 自动生成字段 强制覆盖 null或者空字符串也覆盖
- 修改linux资源限制参数命令,linux passwd命令参数及用法详解--linux修改用户密码命令...
- python 不等于_python零基础(二)
- linux -- su和sudo命令的区别
- Gadget,又见Gadget - 浅尝Windows Live Contacts Gadget
- 机器学习算法基础2-机器学习大致了解
- CentOS 7配置Docker Storage
- iOS之01-基本语法
- latex 图片缩小指定比例
- .NET-3.Xamarin学习与总结
- 论坛介绍 | COSCon'22 开源文化
- 网站被移动运营方屏蔽怎么办?
- 使用jqery模拟网易严选购物车功能
- [原]极域电子教室3个没被发现的bug(V6 2007)
- schtasks /run 拒绝访问
- source-map
- 计算机安装win10系统还原,解决win10电脑一键还原教程