OpenEdv-开源电子网

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

f429的ltdc的demo一直搞不明白是如何切换横屏和竖屏的

[复制链接]

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2023-8-10 09:53:48 | 显示全部楼层 |阅读模式
1金钱
f429的ltdc的demo一直搞不明白是如何切换横屏和竖屏的

实验14 LTDC LCD(RGB屏)实验.zip

13.43 MB, 下载次数: 30

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3370

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8583
金钱
8583
注册时间
2020-5-11
在线时间
4002 小时
发表于 2023-8-10 10:14:32 | 显示全部楼层
这问题有点大,不好回答。
虽然没看代码,但是TFT一般是可以设置扫描方向的,程序中再限制一下X、Y座标范围,或在某些时候交换一下X、Y就行了。
专治疑难杂症
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 08:33:40 | 显示全部楼层
LcwSwust 发表于 2023-8-10 10:14
这问题有点大,不好回答。
虽然没看代码,但是TFT一般是可以设置扫描方向的,程序中再限制一下X、Y座标范 ...

这个是RGB屏幕,我看他转方向的函数并没有重新设置扫描方向
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 08:39:32 | 显示全部楼层
LcwSwust 发表于 2023-8-10 10:14
这问题有点大,不好回答。
虽然没看代码,但是TFT一般是可以设置扫描方向的,程序中再限制一下X、Y座标范 ...

//设置LCD显示方向
//dir:0,竖屏;1,横屏
void LTDC_Display_Dir(u8 dir)
{
    lcdltdc.dir=dir;         //显示方向
        if(dir==0)                        //竖屏
        {
                lcdltdc.width=lcdltdc.pheight;
                lcdltdc.height=lcdltdc.pwidth;       
        }else if(dir==1)        //横屏
        {
                lcdltdc.width=lcdltdc.pwidth;
                lcdltdc.height=lcdltdc.pheight;
        }
}
回复

使用道具 举报

12

主题

3370

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8583
金钱
8583
注册时间
2020-5-11
在线时间
4002 小时
发表于 2023-8-11 13:59:48 | 显示全部楼层
ssssssssssss 发表于 2023-8-11 08:39
//设置LCD显示方向
//dir:0,竖屏;1,横屏
void LTDC_Display_Dir(u8 dir)

RGB屏?
似乎是定义了一个数组用来存放显示数据,把它当成二维数组,切换方向就是交换XY座标.
傲游截图20230811135405.jpg
专治疑难杂症
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 14:02:33 | 显示全部楼层
本帖最后由 ssssssssssss 于 2023-8-11 14:03 编辑
LcwSwust 发表于 2023-8-11 13:59
RGB屏?
似乎是定义了一个数组用来存放显示数据,把它当成二维数组,切换方向就是交换XY座标.

RGB屏幕是不是内部没有配置刷新方向之类的寄存器,我看所有的配置都是配置LTDC的。RGB屏幕默认刷新方向是Z字形刷新方式吗?
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 14:22:47 | 显示全部楼层
LcwSwust 发表于 2023-8-11 13:59
RGB屏?
似乎是定义了一个数组用来存放显示数据,把它当成二维数组,切换方向就是交换XY座标.

(lcdltdc.pheight-x-1)减一是什么原因,不是很清楚
//画点函数
//x,y:写入坐标
//color:颜色值
void LTDC_Draw_Point(u16 x,u16 y,u32 color)
{
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
        if(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;
        }
#else
        if(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
}





回复

使用道具 举报

12

主题

3370

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8583
金钱
8583
注册时间
2020-5-11
在线时间
4002 小时
发表于 2023-8-11 14:52:48 | 显示全部楼层
ssssssssssss 发表于 2023-8-11 14:22
(lcdltdc.pheight-x-1)减一是什么原因,不是很清楚
//画点函数
//x,y:写入坐标

lcdltdc.pheight-x-1,就是进行翻转,就是=lcdltdc.pheight-1-x;
假如高度320,就是=319-x;
代入x=0,结果为319,
代入x=319,结果为0,



就是左边变到了右边.

至于为什么有的要减一,有的不减一,可能程序员搞忘了,可能座标范围不一样,
总之,即然发现了,就要小心数组是否会越界.
专治疑难杂症
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 15:21:06 | 显示全部楼层
本帖最后由 ssssssssssss 于 2023-8-11 15:23 编辑
LcwSwust 发表于 2023-8-11 14:52
lcdltdc.pheight-x-1,就是进行翻转,就是=lcdltdc.pheight-1-x;
假如高度320,就是=319-x;
代入x=0,结果 ...

是不是上面的没减一错了
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 15:38:05 | 显示全部楼层
LcwSwust 发表于 2023-8-11 14:52
lcdltdc.pheight-x-1,就是进行翻转,就是=lcdltdc.pheight-1-x;
假如高度320,就是=319-x;
代入x=0,结果 ...

我理解了,如果是480*272的屏幕,如果是竖屏坐标(x,y),转到横屏坐标转为(272-x-1,y);
回复

使用道具 举报

12

主题

3370

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8583
金钱
8583
注册时间
2020-5-11
在线时间
4002 小时
发表于 2023-8-11 15:43:51 | 显示全部楼层
ssssssssssss 发表于 2023-8-11 15:38
我理解了,如果是480*272的屏幕,如果是竖屏坐标(x,y),转到横屏坐标转为(272-x-1,y);

很可能没减一错了,但也要看pheight的值是否本身就减了一,或者缓冲区刚好有余能保证不越界.
专治疑难杂症
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
 楼主| 发表于 2023-8-11 15:53:12 | 显示全部楼层
LcwSwust 发表于 2023-8-11 15:43
很可能没减一错了,但也要看pheight的值是否本身就减了一,或者缓冲区刚好有余能保证不越界.

数组不可能越界1280*800的二维数组是不可能越界的,如果屏幕小的话,越不了界
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-10 00:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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