关于TFT彩屏ILI9325X轴显示镜像问题的解决

您所在的位置:网站首页 什么软件能把图片镜像反过来 关于TFT彩屏ILI9325X轴显示镜像问题的解决

关于TFT彩屏ILI9325X轴显示镜像问题的解决

2023-07-05 19:03| 来源: 网络整理| 查看: 265

这段时间玩转STM32F103ZET6接TFT彩屏ILI9325遇到的轴显示镜像问题,在网上查了很多资料,可能是自己能力问题,看完都没解决问题。自己对ILI9325数据手册[ILI9325DS_V0.29.pdf]详细看完以后,终于解决了,所以分享出来给大家,希望大家少走弯路。

首先说一下TFT彩屏ILI9325的工作模式。(看这个文章,必须要有LED灯点亮的基础)

1、彩屏横轴方向(240)是控制显示颜色的(320X240中的240点位,实际控制是(R线+G线+B线)*240,实际是上3*240=720根线,这720根线为S1-S720,即3根线(RGB)一组控制240个点位)。

2、彩屏竖轴方向(320)是门电路G1-G320,是控制哪一行通电。即当S线设置好颜色了,G哪行亮,哪行就显示S线设置的颜色。

3、TFT屏默认的显示方向是:S1->S720为一行的颜色设置,G1-G320总共有320行(S1->S720),那么总供的输出点实际上是(240*3)*320=230400个点位。

一、只要求X轴镜像恢复正常。把Source即RGB控制扫描方式反过来就可以了。

程序编译完成,下载正常,可是显示却X镜像了,如下图。

在网上多方查找,说要改什么I/D0,I/D1,实践结果根本不行。

后在网上下载了TFT彩屏的ILI9325数据手册,发现,只要改01h下的D8寄存器值就可以了。

相信大家看完就该理解了。

以下是改完以后的显示图片

顺代把源程序复制出来。

[头文件tftlcd.h]

#define TFTLCD_ILI9325

其中这个是更改横竖屏显示方向的。

#define TFTLCD_DIR    0    //0:竖屏  1:横屏  默认竖屏

[文件tftlcd.c]

只写出更改的部分

//设置LCD显示方向 //dir:0,竖屏;1,横屏 void LCD_Display_Dir(u8 dir) {     if(dir==0)  //默认竖屏方向     {    

#ifdef TFTLCD_ILI9325

/*这里面是原来的设置 //        LCD_WriteCmd(0x0001);    //        LCD_WriteData(0x0100); //        LCD_WriteCmd(0x0003);   //设置彩屏显示方向的寄存器 //        LCD_WriteData(0x1030);  

*/         LCD_WriteCmd(0x0001);            LCD_WriteData(0x0000);         LCD_WriteCmd(0x0003);   //设置彩屏显示方向的寄存器         LCD_WriteData(0x1030);           tftlcd_data.height=320;         tftlcd_data.width=240;             #endif

     }

    else   {

#ifdef TFTLCD_ILI9325

/*这里面是原来的设置

//        LCD_WriteCmd(0x0001);    //       LCD_WriteData(0x000); //       LCD_WriteCmd(0x0003);   //设置彩屏显示方向的寄存器 //        LCD_WriteData(0x1038);  

*/         LCD_WriteCmd(0x0001);            LCD_WriteData(0x0100);         LCD_WriteCmd(0x0003);   //设置彩屏显示方向的寄存器         LCD_WriteData(0x1038);           tftlcd_data.height=240;         tftlcd_data.width=320;             #endif

   }

二、如果要X1,Y1->X240,Y320完全倒过来,那么只要设置S1-S720和Y1-Y320全反过来扫描就可以了。

原始图片是这样的:

而我们希望输出是这样的。

 我们发现,只是Y轴的方向显示颠倒了,那么只要改门极电路(G1-G320) 的输出方向即可。

那么怎么改门极方向呢?

查资料,只要改R60H寄存器的D15(GS位)就可以了。

 

以下是更改的程序关键部分:

#ifdef TFTLCD_ILI9325 u16 ttData;         LCD_WriteCmd(0x0001);            LCD_WriteData(0x0100);         LCD_WriteCmd(0x0003);   //设置彩屏显示方向的寄存器         LCD_WriteData(0x1030);         LCD_WriteCmd(0x0060);  //指针移到TypeLCDBASE+0x60,即G门的内存偏移地址         ttData=TFTLCD->LCD_DATA;//读取原始数据         LCD_WriteCmd(0x0060);//指针移到TypeLCDBASE+0x60,即G门的内存偏移地址这句有点多余         LCD_WriteData(ttData|0x8000);//[15:0]]第15位置1。当然,如果要反过来,只要15位置0即可。(置0是ttData&0x7FFF,别弄反了。)         tftlcd_data.height=320;         tftlcd_data.width=240;             #endif 

 

 本人也是刚开始学习单片机,有不对的地方,还望指教。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3