OpenEdv-开源电子网

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

2.8寸TFT程序求助

[复制链接]

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-2-22
在线时间
1 小时
发表于 2014-5-6 22:38:34 | 显示全部楼层 |阅读模式
5金钱
原子哥:
您好
 

我在做您的TFT显示程序中有个疑问。
//
在指定区域内填充指定颜色
//
区域大小xend-xsta+1)*(yend-ysta+1)
//xsta
//color:
要填充的颜色
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{         
 u16 i,j;
 u16 xlen=0;
 LCD_Scan_Dir(L2R_U2D);
#if USE_HORIZONTAL==1
 xlen=ey-sy+1;   
 for(i=sx;i<=ex;i++)
 {
   LCD_SetCursor(i,sy);          //
设置光标位置
  LCD_WriteRAM_Prepare();        //
开始写入GRAM  
  for(j=0;j<xlen;j++)LCD_WR_DATA(color); //
设置光标位置   
 ……………………………………….

}

红色标记部分有疑问。

在这部分程序中我是这样理解的。当以横坐标sx光标作为第一位置时,纵坐标sy是以xlen递增的,该程序中j应该是作为纵坐标递增变量。程序中j是怎样体现这个递增的?有点搞不懂。我理解这个程序是不是这样

   LCD_SetCursor(i,sy+j);          //设置光标位置
您给看看。

最佳答案

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

这个确实是个bug,楼主真细心. 正确的代码应该是: [mw_shl_code=c,true]//在指定区域内填充指定颜色 //区域大小xend-xsta+1)*(yend-ysta+1) //xsta //color:要填充的颜色 void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color) { u16 i,j; u16 xlen=0; u16 temp; if((lcddev.id==0X6804)&&(lcddev.dir==1)) //6804横屏的时候特殊处理 { temp=sx; sx=sy; sy=lcddev.width-ex-1; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-6 22:38:35 | 显示全部楼层
这个确实是个bug,楼主真细心.
正确的代码应该是:
[mw_shl_code=c,true]//在指定区域内填充指定颜色 //区域大小xend-xsta+1)*(yend-ysta+1) //xsta //color:要填充的颜色 void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color) { u16 i,j; u16 xlen=0; u16 temp; if((lcddev.id==0X6804)&&(lcddev.dir==1)) //6804横屏的时候特殊处理 { temp=sx; sx=sy; sy=lcddev.width-ex-1; ex=ey; ey=lcddev.width-temp-1; lcddev.dir=0; lcddev.setxcmd=0X2A; lcddev.setycmd=0X2B; LCD_Fill(sx,sy,ex,ey,color); lcddev.dir=1; lcddev.setxcmd=0X2B; lcddev.setycmd=0X2A; }else { xlen=ex-sx+1; for(i=sy;i<=ey;i++) { LCD_SetCursor(sx,i); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM for(j=0;j<xlen;j++)LCD_WR_DATA(color); //设置光标位置 } } } [/mw_shl_code]

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

使用道具 举报

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-2-22
在线时间
1 小时
 楼主| 发表于 2014-5-7 10:59:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥:
您回答的这个我看懂了。就是现在的问题变量j在这条语句中 for(j=0;j<xlen;j++)LCD_WR_DATA(color);  是增量。那么它应该是最终作为x轴的自增变量的。但是在这个程序中,怎么找不到j和横坐标设置光标位置的任何联系。可是程序还是执行正确的。>
回复

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2014-5-7 11:07:46 | 显示全部楼层
回复【3楼】百草堂:
---------------------------------
横坐标地址自增
人需要沐浴阳光,也必将经历风雨
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-7 14:40:57 | 显示全部楼层
j就是个变量啊...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-2-22
在线时间
1 小时
 楼主| 发表于 2014-5-7 22:42:21 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
j是通过哪条指令同sx横坐标联系到一起的?
回复

使用道具 举报

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-2-22
在线时间
1 小时
 楼主| 发表于 2014-5-7 22:43:36 | 显示全部楼层
回复【4楼】LOVE_FYD:
---------------------------------
j是通过哪条指令同sx横坐标联系到一起的?又是怎样实现横坐标增量的?不懂啊!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-7 23:14:33 | 显示全部楼层
回复【6楼】百草堂:
---------------------------------
j就是用来计数,判断写入LCD的数据有没有达到:xlen这么多.
没有和坐标联系
所有的坐标,只有在进入的时候设置一次,后续都是利用LCD的地址自增,实现的坐标自动设置的.

感觉你还是多多练习,仿真看看效果,学的快点.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-2-22
在线时间
1 小时
 楼主| 发表于 2014-5-8 23:17:59 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
奥,明白了。谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 02:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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