关于TFT彩屏ILI9325X轴显示镜像问题的解决 |
您所在的位置:网站首页 › 什么软件能把图片镜像反过来 › 关于TFT彩屏ILI9325X轴显示镜像问题的解决 |
这段时间玩转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 |