野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19102|回复: 7

为什么我的这个ILI9341读一个点的像素数据的函数,无法读出来

[复制链接]
发表于 2013-7-25 11:10:14 | 显示全部楼层 |阅读模式
这个是修改了也野火的读点函数的程序
uint  LCD_Get_Point(uint x, uint y)
{
    u16 R=0, G=0, B=0 ;
    u16 temp;
    LCD_ILI9341_CMD(0X2A);       //设置X坐标地址
    LCD_ILI9341_Parameter((240-y)>>8); //开始X
    LCD_ILI9341_Parameter(240-y);    //开始X
    LCD_ILI9341_CMD(0X2B);      //设置Y坐标地址  
    LCD_ILI9341_Parameter(x>>8); //开始Y
    LCD_ILI9341_Parameter(x);  //开始Y
    LCD_ILI9341_CMD(0x2E);
    R =(*(__IO u16 *) (Bank1_LCD_D)); //delay_us(100); /*FIRST READ OUT DUMMY DATA*/
    R =(*(__IO u16 *) (Bank1_LCD_D)); //delay_us(100);/*READ OUT RED DATA  */
    B =(*(__IO u16 *) (Bank1_LCD_D));// delay_us(100); /*READ OUT BLUE DATA*/
    G =(*(__IO u16 *) (Bank1_LCD_D));// delay_us(100); /*READ OUT GREEN DATA*/
    temp=(((R>>11)<<11) | ((G>>10)<<5) | (B>>11)) ;
    return (temp);
}

但是用示波器可TFT的RD以看到4个下降沿
RD的波形图.jpg
可是读出来的值全部是0;
回复

使用道具 举报

发表于 2013-7-25 17:07:46 | 显示全部楼层
设置坐标有点问题,这个屏应该这么设置,起始和结束设置成一个点,
  1. /*
  2. *********************************************************************************************************
  3. *  函 数 名: Set_direction
  4. *  功能说明: 设置屏幕座标
  5. *  形    参: _usX1      行座标
  6. *             _usY1      列座标
  7. *  返 回 值: 无
  8. *********************************************************************************************************
  9. */
  10. void LCD9341_SetCursor(uint16_t _usX1 , uint16_t _usY1)  
  11. {        
  12.    
  13.   /*竖屏*/
  14.   LCD_ILI9341_CMD(0X2A);          /* 设置X坐标 */
  15.   LCD_ILI9341_Parameter(_usX1>>8);   /* 先高8位,然后低8位 */
  16.   LCD_ILI9341_Parameter(_usX1&0xff);   /* 设置起始点和结束点*/
  17.   LCD_ILI9341_Parameter(_usX1>>8);
  18.   LCD_ILI9341_Parameter(_usX1&0xff);

  19.     LCD_ILI9341_CMD(0X2B);            /* 设置Y坐标*/
  20.   LCD_ILI9341_Parameter(_usY1>>8);
  21.   LCD_ILI9341_Parameter(_usY1&0xff);
  22.   LCD_ILI9341_Parameter(_usY1>>8);
  23.   LCD_ILI9341_Parameter(_usY1&0xff);  
  24.          
  25. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-25 18:42:58 | 显示全部楼层
Alice2013 发表于 2013-7-25 17:07
设置坐标有点问题,这个屏应该这么设置,起始和结束设置成一个点,

这种方式可以的,我在没有用FSMC时就是这样设置的,读出来的数据多事对的,这是我优化后的代码。您说的我早就试过了,好像不好使哦!
我想问一下,就是我直接在高8位上随便一位强行接3.3V,可是对到的数据还是0,是不是设置有问题,我的是Vet6,参考的就是野火的代码
回复 支持 反对

使用道具 举报

发表于 2013-7-25 18:48:04 | 显示全部楼层
晴天雨 发表于 2013-7-25 18:42
这种方式可以的,我在没有用FSMC时就是这样设置的,读出来的数据多事对的,这是我优化后的代码。您说的我 ...

你都不按命令格式来发信息给液晶,怎么可能液晶可以返回一个你想要的值?
优化,也得按照液晶主控的命令格式来发信息啊,不能自己自定义命令格式。

省略结束点的坐标设置,液晶主控认为你发送的命令有错,不处理数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-25 19:07:27 | 显示全部楼层
风落小鱼 发表于 2013-7-25 18:48
你都不按命令格式来发信息给液晶,怎么可能液晶可以返回一个你想要的值?
优化,也得按照液晶主控的命令 ...

我之前用的就是这个
uint  LCD_Get_Point(uint x, uint y)
{

        u16 temp;
        Address_set(x,y,x,y);
    LCD_ILI9341_CMD(0x2e);
        temp=LCD_RD_data();
    return (temp);
}
当时就读不出来东西,我想问一下,就是我在FSMC_A15对应的引脚上加上3.3V可是读出来的数据还是0,这是为什么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-25 19:07:44 | 显示全部楼层
风落小鱼 发表于 2013-7-25 18:48
你都不按命令格式来发信息给液晶,怎么可能液晶可以返回一个你想要的值?
优化,也得按照液晶主控的命令 ...

我之前用的就是这个
uint  LCD_Get_Point(uint x, uint y)
{

        u16 temp;
        Address_set(x,y,x,y);
    LCD_ILI9341_CMD(0x2e);
        temp=LCD_RD_data();
    return (temp);
}
当时就读不出来东西,我想问一下,就是我在FSMC_A15对应的引脚上加上3.3V可是读出来的数据还是0,这是为什么
回复 支持 反对

使用道具 举报

发表于 2013-7-26 10:40:18 | 显示全部楼层
晴天雨 发表于 2013-7-25 19:07
我之前用的就是这个
uint  LCD_Get_Point(uint x, uint y)
{

1. 楼主,你上面说你用的是VET6,VET6应该没有FSMC_A15引脚的啊,他的是从A16-A23
2. 要是实在不行的话,楼主可以野火板子上面读点没问题的驱动,逐渐改成自己的,看看问题出在了哪里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 18:53:30 | 显示全部楼层
Alice2013 发表于 2013-7-26 10:40
1. 楼主,你上面说你用的是VET6,VET6应该没有FSMC_A15引脚的啊,他的是从A16-A23
2. 要是实在不行的话, ...

好的,谢谢,问题已经解决了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-23 13:05 , Processed in 0.031256 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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