OpenEdv-开源电子网

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

LCD坐标与数组不对应

[复制链接]

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
发表于 2019-2-24 17:26:57 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 ligongxiaobie 于 2019-2-24 17:30 编辑

如题,用的咱们最小的屏幕。9341
我用手里的F429的板子和TFTLCD例程进行测试,单独测试坐标发现LCD坐标与常规理解不太一致,这个问题不大,可以忽略。
测试坐标后,坐标如下图所示。(图片中开发板与实际不符,网络截图)


我的主要目的是自己建立一个u16data_buff[240][320],对其进行更改值,然后赋值到屏幕上。

第一个测试对第10列进行赋值,

  //第一种测试方法
  for( i= 0;i<240;i++)
  {
   data_buff[10]=0xffff;
  }
  LCD_Show_Image();
  while(1);

最终效果是这样的。明显不是一列,而且是虚线。

第二种方法是对第100行,第104行,第108行进行赋值,

  //第二种测试方法
  for(j = 0;j<320;j++)
  {
   data_buff[100][j]=0xffff;
  }
    for(j = 0;j<320;j++)
  {
   data_buff[104][j]=0xf800;
  }
    for(j = 0;j<320;j++)
  {
   data_buff[108][j]=0xffff;
  }
  
  LCD_Show_Image();
  while(1);

效果如下图所示,并不纯粹的直线。




第三种方法是xy均以10累加,到240320清零,

//第三种测试方法
while(1)
{
  chy +=10;
  chx+=10;
  LCD_Show_Image();
  if(chy>=320)
   chy = 0;
  if(chx>=240)
   chx = 0;
  data_buff[chx][chy] = 0XFFFF;
  LCD_Show_Image();
  delay_ms(1000);
}

可以看出明显效果不对,应该是临近的虚线排列,但是距离却很远。


具体测试代码已上传 ,请售后帮忙看一下,是我这种测试方法问题,还是其他问题,我的目的只是想我建立的数组与屏幕坐标能够正确对应就可以。

3.jpg
2.jpg
1.jpg
坐标标注.png

实验12 TFTLCD(MCU屏)实验_进行屏幕与数组坐标对应测试.zip

10.5 MB, 下载次数: 12

最佳答案

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

我自己将自己一军吧! 咳,都是因为X,Y坐标自己理解的不好,我把显示代码换成以下代码[mw_shl_code=applescript,true]void LCD_Show_Image(void) { u32 index=0; LCD_SetCursor(0x00,0x0000); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM for(int j = 0; j
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-24 17:26:58 | 显示全部楼层
正点原子 发表于 2019-2-28 02:39
不难的,你先建一个240*320的数组,然后往lcd填充,打点的时候,慢一点打,比如1秒钟打一个点,就知道咋 ...

我自己将自己一军吧!
咳,都是因为X,Y坐标自己理解的不好,我把显示代码换成以下代码[mw_shl_code=applescript,true]void LCD_Show_Image(void)
{
        u32 index=0;      

                LCD_SetCursor(0x00,0x0000);                        //设置光标位置
                LCD_WriteRAM_Prepare();                     //开始写入GRAM                  
                for(int j = 0; j <LINE_TOTAL;j++)
        for(int i = 0;i<ROW_TOTAL;i++)
                {

                        LCD->LCD_RAM=data_buff[j];        
//                        delay_ms(10);
                }
} [/mw_shl_code]

因为数组后边的是X,前面的是Y轴,这样理解就行了。


所以问题算是解决了吧。。。。
希望大家引以为戒。!!!!
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-24 17:31:45 | 显示全部楼层
注意第一种方法中代码是data_buff[i][10]=0xffff;,不是data_buff[10]=0xffff;,
编辑好几次,改不了。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-2-24 17:43:02 | 显示全部楼层
//第一种测试方法
  for( i= 0;i<240;i++)
  {
   *((u16*)data_buff[10])=0xffff;
  }
  LCD_Show_Image();
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-24 18:02:48 | 显示全部楼层
edmund1234 发表于 2019-2-24 17:43
//第一种测试方法
  for( i= 0;i

是这个意思吗?
*((u16*)data_buff[10])=0xffff;

我的屏幕上没有白色点或者线显示。
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-24 18:06:06 | 显示全部楼层
edmund1234 发表于 2019-2-24 17:43
//第一种测试方法
  for( i= 0;i

[mw_shl_code=applescript,true]                //第一种测试方法
                for( i= 0;i<240;i++)
                {

                       
                        *((u16*)data_buff[10])=0xffff;
                }
                LCD_Show_Image();
                while(1);[/mw_shl_code]

应该是这个意思吧,屏幕没有显示,无任何效果
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-2-25 15:04:22 | 显示全部楼层
帮顶!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-26 02:43:03 | 显示全部楼层
LCD_Show_Image,怎么把你的buf,写到屏幕去的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-27 01:45:58 | 显示全部楼层
正点原子 发表于 2019-2-26 02:43
LCD_Show_Image,怎么把你的buf,写到屏幕去的?

[mw_shl_code=applescript,true]void LCD_Show_Image(void)
{
        u32 index=0;      

                LCD_SetCursor(0x00,0x0000);                        //设置光标位置
                LCD_WriteRAM_Prepare();                     //开始写入GRAM                   

                for(int i = 0;i<ROW_TOTAL;i++)
                for(int j = 0; j <LINE_TOTAL;j++)
                {

                        LCD->LCD_RAM=data_buff[j];       

                }


} [/mw_shl_code]

原子哥,附件上有程序,抽一点点时间看一眼呗
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-27 19:38:11 | 显示全部楼层
正点原子 发表于 2019-2-26 02:43
LCD_Show_Image,怎么把你的buf,写到屏幕去的?

原子哥,我要崩溃了,你们试过了 ,用我的程序在429开发板上?
我真的没更改底层啊 ,而且代码也很简单。
我只是想让数组与LCD坐标对应上就行,不难吧!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-28 02:39:46 | 显示全部楼层
ligongxiaobie 发表于 2019-2-27 19:38
原子哥,我要崩溃了,你们试过了 ,用我的程序在429开发板上?
我真的没更改底层啊 ,而且代码也很简单 ...

不难的,你先建一个240*320的数组,然后往lcd填充,打点的时候,慢一点打,比如1秒钟打一个点,就知道咋回事了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

24

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-12-16
在线时间
26 小时
 楼主| 发表于 2019-2-28 15:02:31 | 显示全部楼层
正点原子 发表于 2019-2-28 02:39
不难的,你先建一个240*320的数组,然后往lcd填充,打点的时候,慢一点打,比如1秒钟打一个点,就知道咋 ...

原子哥,这个跟快打慢打点效果是一样的,最终都是3列,第一种方法,我想要的是只有一列出现白点。
对于第二种想要一行是白色的也不对,它是一行多是白色的。
我为了快点看到效果是用10ms延迟看的效果。
c81af084ff911a011d19eecaef515b0.jpg
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 00:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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