OpenEdv-开源电子网

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

TFT横屏竖屏变换怎么理解,能不能画个图讲解下,原子教你玩stm32书的205页

[复制链接]

163

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1214
金钱
1214
注册时间
2016-5-19
在线时间
297 小时
发表于 2017-6-13 11:25:22 | 显示全部楼层 |阅读模式
1金钱
TFT横屏竖屏变换怎么理解,能不能画个图讲解下,原子教你玩stm32书的205页
               
                if(lcddev.dir==1)x=lcddev.width-1-x;//横屏其实就是调转x,y坐标         这一行不理解,大家能不能画个图帮我讲解下,谢谢
                LCD_WriteReg(lcddev.setxcmd,x);
                LCD_WriteReg(lcddev.setycmd,y);

最佳答案

查看完整内容[请看2#楼]

你自己在本子上画个图,本来是竖屏的,0,0坐标在左上角,要改为横屏,0,0坐标在右上角,你说怎么变化?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-6-13 11:25:23 | 显示全部楼层
你自己在本子上画个图,本来是竖屏的,0,0坐标在左上角,要改为横屏,0,0坐标在右上角,你说怎么变化?
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2017-6-14 01:28:19 | 显示全部楼层
直接字例程中修改LCD_Init();函数中的LCD_Display_Dir(0)改为LCD_Display_Dir(1)就切换了,这样理解容易点
回复

使用道具 举报

163

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1214
金钱
1214
注册时间
2016-5-19
在线时间
297 小时
 楼主| 发表于 2017-6-15 15:20:33 | 显示全部楼层
本帖最后由 richthoffen 于 2017-6-15 15:58 编辑
正点原子 发表于 2017-6-13 11:25
你自己在本子上画个图,本来是竖屏的,0,0坐标在左上角,要改为横屏,0,0坐标在右上角,你说怎么变化?

"   你做一个原点的坐标变换,大概就明白了。
原来(0,0)应该是在左上方。
变换为新的坐标(横屏),那么就应该在左下角了(用原来的坐标表示就是:(0,320)).
原来的x方向,刚好和新坐标的y方向一致,而且值也一致,所以y'=x。
原来的y方向,和新坐标的x方向相反,所以新坐标的x'=320-y      "
这是原来你跟别人讲的,结果那个帖子还是有好多人希望你能讲的更详细点的,
1 我按照你讲的画了个图,并且还有两点疑问希望你看下谢谢,最好能画个图
2 公式里的320是长边还是窄边
IMG_20170615_151116.gif
回复

使用道具 举报

163

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1214
金钱
1214
注册时间
2016-5-19
在线时间
297 小时
 楼主| 发表于 2017-6-15 15:20:44 | 显示全部楼层
本帖最后由 richthoffen 于 2017-6-15 15:22 编辑
正点原子 发表于 2017-6-13 11:25
你自己在本子上画个图,本来是竖屏的,0,0坐标在左上角,要改为横屏,0,0坐标在右上角,你说怎么变化?

"你做一个原点的坐标变换,大概就明白了。
原来(0,0)应该是在左上方。
变换为新的坐标(横屏),那么就应该在左下角了(用原来的坐标表示就是:(0,320)).
原来的x方向,刚好和新坐标的y方向一致,而且值也一致,所以y'=x。
原来的y方向,和新坐标的x方向相反,所以新坐标的x'=320-y"
这是原来你跟别人讲的,结果那个帖子还是有好多人希望你能讲的更详细点的,
我按照你讲的画了个图,并且还有两点疑问希望你看下谢谢


这个操作的时候弄错了,希望管理员删除第二个重复的帖子
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-8-11
在线时间
5 小时
发表于 2018-6-27 17:44:57 | 显示全部楼层
本帖最后由 柳明 于 2018-6-27 17:49 编辑

[mw_shl_code=c,true]u8 TP_Scan(u8 tp)
{
    if(PEN == 0) //有按键按下
    {
        if(tp)TP_Read_XY2(&tp_dev.x[0], &tp_dev.y[0]); //读取物理坐标
        else if(TP_Read_XY2(&tp_dev.x[0], &tp_dev.y[0])) //读取屏幕坐标
        {
            tp_dev.x[0] = tp_dev.xfac * tp_dev.x[0] + tp_dev.xoff; //将结果转换为屏幕坐标
            tp_dev.y[0] = tp_dev.yfac * tp_dev.y[0] + tp_dev.yoff;
        }
        if((tp_dev.sta & TP_PRES_DOWN) == 0) //之前没有被按下
        {
            tp_dev.sta = TP_PRES_DOWN | TP_CATH_PRES; //按键按下
            tp_dev.x[4] = tp_dev.x[0]; //记录第一次按下时的坐标
            tp_dev.y[4] = tp_dev.y[0];
        }
        if(lcddev.dir == 1) { //横屏
            uint16_t temp;
            temp = tp_dev.y[0];
            tp_dev.y[0] = tp_dev.x[0];
            tp_dev.x[0] = lcddev.width - temp;
        }

    } else
    {
        if(tp_dev.sta & TP_PRES_DOWN) //之前是被按下的
        {
            tp_dev.sta &= ~(1 << 7); //标记按键松开
        } else//之前就没有被按下
        {
            tp_dev.x[4] = 0;
            tp_dev.y[4] = 0;
            tp_dev.x[0] = 0xffff;
            tp_dev.y[0] = 0xffff;
        }
    }
    return tp_dev.sta & TP_PRES_DOWN; //返回当前的触屏状态
}C:\Users\Administrator\Desktop\TOUCH[/mw_shl_code]
无标题.png
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-8-11
在线时间
5 小时
发表于 2018-6-27 18:23:18 | 显示全部楼层
正点原子程序中如果需要将竖屏设置为横屏,实现触摸功能,只需要修改lcd_init();程序中        LCD_Display_Dir(1);                //默认为 0 竖屏 1 横屏  按下key1重新校准即可。注意:需要在横屏状态下重新校准!!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 10:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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