OpenEdv-开源电子网

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

探索者开发板4.3吋电容屏横屏操作时花屏

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-11-16
在线时间
24 小时
发表于 2014-11-16 10:27:12 | 显示全部楼层 |阅读模式
5金钱
探索者4.3吋电容屏横屏操作时为什么右半部分会花屏?LCD ID为5510
我在LCD初始化程序里把LCD_Display_Dir(0)改成LCD_Display_Dir(1)
LCD_Display_Dir(u8 dir)里也没发现什么问题啊?
找了半天也没找出什么原因,苦恼……


最佳答案

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

库函数的? 寄存器的没这个问题,你下载我的附件测试下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-11-16 10:27:13 | 显示全部楼层
库函数的?
寄存器的没这个问题,你下载我的附件测试下。

实验13 TFTLCD显示实验.rar

156.43 KB, 下载次数: 349

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-11-16 10:27:13 | 显示全部楼层
用这个代码替换库函数的这个函数即可。
[mw_shl_code=c,true] //设置LCD显示方向 //dir:0,竖屏;1,横屏 void LCD_Display_Dir(u8 dir) { if(dir==0) //竖屏 { lcddev.dir=0; //竖屏 lcddev.width=240; lcddev.height=320; if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310) { lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; if(lcddev.id==0X6804||lcddev.id==0X5310) { lcddev.width=320; lcddev.height=480; } }else if(lcddev.id==0x5510) { lcddev.wramcmd=0X2C00; lcddev.setxcmd=0X2A00; lcddev.setycmd=0X2B00; lcddev.width=480; lcddev.height=800; }else { lcddev.wramcmd=R34; lcddev.setxcmd=R32; lcddev.setycmd=R33; } }else //横屏 { lcddev.dir=1; //横屏 lcddev.width=320; lcddev.height=240; if(lcddev.id==0X9341||lcddev.id==0X5310) { lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; }else if(lcddev.id==0X6804) { lcddev.wramcmd=0X2C; lcddev.setxcmd=0X2B; lcddev.setycmd=0X2A; }else if(lcddev.id==0x5510) { lcddev.wramcmd=0X2C00; lcddev.setxcmd=0X2A00; lcddev.setycmd=0X2B00; lcddev.width=800; lcddev.height=480; }else { lcddev.wramcmd=R34; lcddev.setxcmd=R33; lcddev.setycmd=R32; } if(lcddev.id==0X6804||lcddev.id==0X5310) { lcddev.width=480; lcddev.height=320; } } LCD_Scan_Dir(DFT_SCAN_DIR); //默认扫描方向 } [/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-11-16
在线时间
24 小时
 楼主| 发表于 2014-11-16 12:33:09 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
好的,谢谢原子哥,我试试
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-10-21
在线时间
13 小时
发表于 2014-11-16 12:53:17 | 显示全部楼层
那库函数版的怎么办  ,横屏时 连续画X (0-800)  只能先画0-480 再画480-800。。。
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-11-16
在线时间
24 小时
 楼主| 发表于 2014-11-16 13:01:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
测试了一下,可以了,另外弱弱的问一句,是什么原因导致花屏呢?我用的是库函数版的。
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2014-11-16 13:33:08 | 显示全部楼层
回复【5楼】yueliang9073:
---------------------------------
初始化里  边界地址有问题吧  猜的   没细看
学无止境
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-11-16
在线时间
24 小时
 楼主| 发表于 2014-11-16 14:06:22 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
用这段代码替换貌似不行啊,依旧会花屏
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-10-21
在线时间
13 小时
发表于 2014-11-16 14:16:37 | 显示全部楼层
2段代码一模一样的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-11-16 17:57:49 | 显示全部楼层
不好意思,搞错了,是这个:
[mw_shl_code=c,true]void LCD_Scan_Dir(u8 dir) { u16 regval=0; u16 dirreg=0; u16 temp; if(lcddev.dir==1&&lcddev.id!=0X6804)//横屏时,对6804不改变扫描方向! { 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; } } if(lcddev.id==0x9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510)//9341/6804/5310/5510,很特殊 { switch(dir) { case L2R_U2D://从左到右,从上到下 regval|=(0<<7)|(0<<6)|(0<<5); break; case L2R_D2U://从左到右,从下到上 regval|=(1<<7)|(0<<6)|(0<<5); break; case R2L_U2D://从右到左,从上到下 regval|=(0<<7)|(1<<6)|(0<<5); break; case R2L_D2U://从右到左,从下到上 regval|=(1<<7)|(1<<6)|(0<<5); break; case U2D_L2R://从上到下,从左到右 regval|=(0<<7)|(0<<6)|(1<<5); break; case U2D_R2L://从上到下,从右到左 regval|=(0<<7)|(1<<6)|(1<<5); break; case D2U_L2R://从下到上,从左到右 regval|=(1<<7)|(0<<6)|(1<<5); break; case D2U_R2L://从下到上,从右到左 regval|=(1<<7)|(1<<6)|(1<<5); break; } if(lcddev.id==0X5510)dirreg=0X3600; else dirreg=0X36; if((lcddev.id!=0X5310)&&(lcddev.id!=0X5510))regval|=0X08;//5310/5510不需要BGR if(lcddev.id==0X6804)regval|=0x02;//6804的BIT6和9341的反了 LCD_WriteReg(dirreg,regval); if(regval&0X20) { if(lcddev.width<lcddev.height)//交换X,Y { temp=lcddev.width; lcddev.width=lcddev.height; lcddev.height=temp; } }else { if(lcddev.width>lcddev.height)//交换X,Y { temp=lcddev.width; lcddev.width=lcddev.height; lcddev.height=temp; } } if(lcddev.id==0X5510) { LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(0); LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(0); LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA((lcddev.width-1)>>8); LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA((lcddev.width-1)&0XFF); LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(0); LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(0); LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA((lcddev.height-1)>>8); LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA((lcddev.height-1)&0XFF); }else { LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(0);LCD_WR_DATA(0); LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF); LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(0);LCD_WR_DATA(0); LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF); } }else { 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; } dirreg=0X03; regval|=1<<12; LCD_WriteReg(dirreg,regval); } } [/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2013-11-1
在线时间
8 小时
发表于 2014-11-16 18:20:11 | 显示全部楼层
多半是液晶清屏函数的问题,把清屏的长度和宽度调换过来就可以了
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-11-16
在线时间
24 小时
 楼主| 发表于 2014-11-16 18:52:56 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
这下好了,多谢了原子哥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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