OpenEdv-开源电子网

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

关于TFT的横屏显示...很纠结....

[复制链接]

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2012-3-14
在线时间
3 小时
发表于 2012-3-14 17:20:52 | 显示全部楼层 |阅读模式
我现在想用GRAM地址自动加减来实现TFT的横屏显示
部分程序如下:
#ifdef USE_HORIZONTAL
LCD_WriteReg(0x003,0x1014); //BGR=1  ID[1:0]=0X01  AM=1
#else
LCD_WriteReg(0x003,0x1030); //BGR=1  ID[1:0]=0X11  AM=0
#endif
/*---------------------显示图片函数-------------------------*/
//在指定区域内显示图片
//图片大小: (xend-xsta+1)*(yend-ysta+1) 
void LCD_Photo(u16 xsta,u16 ysta,u16 xend,u16 yend,const unsigned char  *p)
{          
u16 i;
u16 xlen=0,ylen=0;
u16 dat=0;  
#ifdef USE_HORIZONTAL
xlen=xend-xsta+1;
ylen=yend-ysta+1;
LCD_WriteReg(0x0210, ysta);            //设置显示区域
LCD_WriteReg(0x0211, yend);
LCD_WriteReg(0x0212, 399-xend);
LCD_WriteReg(0x0213, 399-xsta);       //432=01AF,400=018F 

LCD_SetCursor(xsta,ysta);                 //设置显示起始点
LCD_WR_REG(0x0202);   
for(i=0;i<xlen*ylen;i++)
{  
dat=p[i*2+1];
dat=(dat<<8)|p[i*2];
LCD_WR_DATA(dat);
   
}
#else
xlen=xend-xsta+1;
ylen=yend-ysta+1;
LCD_WriteReg(0x0210,xsta );
LCD_WriteReg(0x0211, xend);
LCD_WriteReg(0x0212, ysta);
LCD_WriteReg(0x0213, yend);       //432=01AF,400=018F 
LCD_SetCursor(xsta,ysta);
LCD_WR_REG(0x0202);   
for(i=0;i<xlen*ylen;i++)
{

//LCD_SetCursor(j,i);      //设置光标位置 
//LCD_WR_REG(R202);     //开始写入GRAM  
dat=p[i*2+1];
dat=(dat<<8)|p[i*2];
LCD_WR_DATA(dat);
   
}
#endif      



但是现在的问题是竖屏的时候可以显示,但是横屏的时候显示不正确,我估计是寄存器配置的问题....求高手解答.......
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-14 20:11:34 | 显示全部楼层
横屏显示不正确?????具体点才能回答啊……
努力,前进。
回复 支持 反对

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2012-3-14
在线时间
3 小时
 楼主| 发表于 2012-3-14 20:28:45 | 显示全部楼层
回复【2楼】5498折戟沉沙:
---------------------------------
就是说竖屏的时候显示正常,横屏的时候显示的图片是错乱的....竖屏和横屏的程序不同的地方就是:0X003寄存器配置不同、显示区域设置不同、起始点设置不同...
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-14 20:59:28 | 显示全部楼层
你可以试一下显示文字是否正常???文字如果出错,容易分析,图片乱码就是一团糟了
努力,前进。
回复 支持 反对

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2012-3-14
在线时间
3 小时
 楼主| 发表于 2012-3-14 21:03:34 | 显示全部楼层
回复【4楼】5498折戟沉沙:
---------------------------------
我显示的是XY坐标图,我发现传送图片数据方向不对,照理说方向应该旋转90度,但实际上是180度
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-14 22:33:15 | 显示全部楼层
建议楼主配合我们的usmart来调试你这个代码,很方便可以得出结果.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2012-3-14
在线时间
3 小时
 楼主| 发表于 2012-3-15 09:46:21 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
回复【6楼】正点原子:
---------------------------------
我发现配置AM位根本没有效果,AM=1和AM=0时显示的效果是一样的.....
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-15 09:50:29 | 显示全部楼层
给你一个豪华版的函数:
//设置LCD的自动扫描方向
//0~7:代表8个方向(具体定义见lcd.h)
//9320/9325/9328/4531/4535/1505/b505/8989等IC已经实际测试    
void LCD_Scan_Dir(u8 dir)
{
u16 regval=0;
u8 dirreg=0;
#if USE_HORIZONTAL//使用横屏
switch(dir)//方向转换
{
case 0:dir=6;break;
case 1:dir=7;break;
case 2:dir=4;break;
case 3:dir=5;break;
case 4:dir=1;break;
case 5:dir=0;break;
case 6:dir=3;break;
case 7:dir=2;break;      
}
#endif
   if(DeviceCode==0x8989)//8989 IC
{
dirreg=0X11;
regval=0X6040;//65K   
}else//其他驱动IC   
{
dirreg=0X03;
regval=1<<12;  
}
switch(dir)
{
case L2R_U2D://从左到右,从上到下
regval|=(1<<5)|(1<<4)|(0<<3); 
break;
case L2R_D2U://从左到右,从下到上
regval|=(0<<5)|(1<<4)|(0<<3); 
break;
case R2L_U2D://从右到左,从上到下
regval|=(1<<5)|(0<<4)|(0<<3);
break;
case R2L_D2U://从右到左,从下到上
regval|=(0<<5)|(0<<4)|(0<<3); 
break;  
case U2D_L2R://从上到下,从左到右
regval|=(1<<5)|(1<<4)|(1<<3); 
break;
case U2D_R2L://从上到下,从右到左
regval|=(1<<5)|(0<<4)|(1<<3); 
break;
case D2U_L2R://从下到上,从左到右
regval|=(0<<5)|(1<<4)|(1<<3); 
break;
case D2U_R2L://从下到上,从右到左
regval|=(0<<5)|(0<<4)|(1<<3); 
break;  
}  
LCD_WriteReg(dirreg,regval);
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2012-3-14
在线时间
3 小时
 楼主| 发表于 2012-3-15 13:12:27 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原来是我把寄存器配置错了...应该是LCD_WriteReg(0x003,0x1018);.....谢谢各位了...
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 04:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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