OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1969|回复: 6

LCD显示反转关闭/打开时的x,y交换问题

[复制链接]

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2023-7-8
在线时间
14 小时
发表于 2023-7-26 21:48:48 | 显示全部楼层 |阅读模式
本帖最后由 frz 于 2023-7-26 21:53 编辑

if (lcddev.id != 0X1963)   //1963不做坐标处理
    {
        if (regval & 0X20)
        {
            if (lcddev.width < lcddev.height)   //交换X,Y
            {
                temp = lcddev.width;
                lcddev.width = lcddev.height;
                lcddev.height = temp;
            }
        }
        else
        {
            if (lcddev.width > lcddev.height)   //交换X,Y
            {
                temp = lcddev.width;
                lcddev.width = lcddev.height;
                lcddev.height = temp;
            }
        }
    }请问,在关闭反转(0x20h)时width<height的x,y交换该如何理解?另一种应该是打开反转时,width>height的交换又该如何理解呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2023-7-8
在线时间
14 小时
 楼主| 发表于 2023-7-27 15:58:43 | 显示全部楼层
本帖最后由 frz 于 2023-7-27 16:10 编辑

原子哥!我的理解是关闭反转只适合横屏,如果是竖屏,就要交换X,Y 不知道理解的对不对。但后面的else,是不是退出关闭反转模式,此时,变为竖屏?
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2023-7-29 15:05:03 | 显示全部楼层

回帖奖励 +3 金钱

横屏和竖屏的XY 是相对理解的
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2023-7-8
在线时间
14 小时
 楼主| 发表于 2023-7-30 07:15:35 | 显示全部楼层
远命 发表于 2023-7-29 15:05
横屏和竖屏的XY 是相对理解的

大哥说详细点
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2023-7-8
在线时间
14 小时
 楼主| 发表于 2023-7-31 12:35:21 | 显示全部楼层
远命 发表于 2023-7-29 15:05
横屏和竖屏的XY 是相对理解的

哥们能说具体点吗?我
不太理解
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2023-8-1 08:48:37 | 显示全部楼层
frz 发表于 2023-7-31 12:35
哥们能说具体点吗?我
不太理解

就是横屏的X是竖屏的Y,它那个分别是因为它的宽度和高度要跟你横屏界面 竖屏界面符合才这样写的 不是很通用
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-6-20
在线时间
44 小时
发表于 2023-11-30 09:36:36 | 显示全部楼层
我的理解是,这段代码在改变了默认扫描顺序的时候才会起作用,如果只是在初始化时设置横屏用不到这一段代码。以35510为例,比如lcd初始化的时候设置为竖屏LCD_Display_Dir(0);那么直接就设置了:
lcddev.width = 480;
lcddev.height = 800;
但是如果改变了屏了默认扫描顺序为先上下后左右(4~7),那么XY的坐标轴就互换了,也就是横屏,那么这里必须交换屏宽和高,这是if (regval & 0X20)的情况。
反之,如果初始化设置横屏了,就同时设置了屏宽800高480,但是如果默认扫描方式改到了先上下后左右(4~7)那么实际的扫描方向就换算为了(0~3),实际上是竖屏的,
所以也要交换屏宽和屏高,这是else的情况。
如果不做这个交换,那么清屏还有其他用到屏宽和屏高的函数的范围都会是错的。(其实这个默认扫描方式改了之后,几乎所有的显示字符、数字的函数显示都会出问题)
/***********************************************************************************************************************************************/
归根究底,我们得理解清楚横屏是怎么回事。
对使用者而言,横屏是竖屏顺时针旋转90度。而对屏幕而言,这一点是通过把扫描顺序从0改为6实现的,也就是从下到上,从左到右实现的。扫描顺序的改变,会使屏幕的原点和坐标系相应变化,这是改变横/竖屏的唯一方法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表