OpenEdv-开源电子网

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

有人知道9341的spi模式下怎么读取某像素点的颜色值吗?

[复制链接]

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
发表于 2018-4-9 19:44:43 | 显示全部楼层 |阅读模式
2金钱
我目前的代码如下:

//读数据(16位)
u16 TLCD_RD_DATA16()
{
        vu16 data=0;
        TLCD_CS_CLR;        //CS=0
        TLCD_DC_SET;        //DC=1
        data=SPI1_RW_Byte(0xff)<<8;
        data|=SPI1_RW_Byte(0xff);
        TLCD_CS_SET;        //CS=1
        return data;
}
//读颜色
u16 TLCD_ReadPoint(u16 x,u16 y)
{
        vu16 r,g,b;
        if(x>=TLCD_W||y>=TLCD_H)return 0;        //超过了范围,直接返回                  
        TLCD_SetCursor(x,y);            
        TLCD_WR_REG(0X2E);        //发送读GRAM指令
        TLCD_RD_DATA16();     //假读
        ;;
        r=TLCD_RD_DATA16();
        ;;
        b=TLCD_RD_DATA16();
        g=r&0XFF;                //第一次读取的是RG的值,R在前,G在后,各占8位
        g<<=8;
        return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//需要公式转换一下
}                         






现在返回值都是0。


最佳答案

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

void TFT_WriteReg8Bit(u8 Reg) { TFT_DCRS=0; TFT_SPIx_ReadWriteByte(Reg); } void TFT_WriteData8Bit(u8 Data) { TFT_DCRS=1; TFT_SPIx_ReadWriteByte(Data); } u8 TFT_ReadData8Bit(void) { u8 data; TFT_DCRS=1; data=TFT_SPIx_ReadWriteByte(0xff); return data; } void TFT_WriteData16Bit(u16 Data) { TFT_DCRS=1; TFT_SPIx_ReadWriteByte(Data>>8); TFT_SPIx_Re ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-4-9 19:44:44 | 显示全部楼层
fEndman 发表于 2018-4-10 09:59
您能不能把您的tft_readdata8bit函数也发一下,非常感谢!

void TFT_WriteReg8Bit(u8 Reg)
{
   TFT_DCRS=0;
   TFT_SPIx_ReadWriteByte(Reg);
}

void TFT_WriteData8Bit(u8 Data)
{
   TFT_DCRS=1;
   TFT_SPIx_ReadWriteByte(Data);
}
u8 TFT_ReadData8Bit(void)
{
         u8 data;
         TFT_DCRS=1;
         data=TFT_SPIx_ReadWriteByte(0xff);
   return data;
}
void TFT_WriteData16Bit(u16 Data)
{
          TFT_DCRS=1;
    TFT_SPIx_ReadWriteByte(Data>>8);
          TFT_SPIx_ReadWriteByte(Data);
}

void TFT_WriteReg16Bit(u16 Reg)
{
          TFT_DCRS=0;
    TFT_SPIx_ReadWriteByte(Reg>>8);
          TFT_SPIx_ReadWriteByte(Reg);
}



/*************************************************
函数名:TFT_Set_XY
功能:设置lcd显示起始点
入口参数:xy坐标
返回值:无
*************************************************/
void TFT_SetXY(u16 x,u16 y)
{
  TFT_WriteReg8Bit(0x2a);
        TFT_WriteData16Bit(x);
        TFT_WriteReg8Bit(0x2b);
        TFT_WriteData16Bit(y);
        TFT_WriteReg8Bit(0x2c);
}

       
/*************************************************
函数名:TFT_DrawPoint
功能:画一个点
入口参数:无
返回值:无
*************************************************/
void TFT_DrawPoint(u16 x,u16 y,u16 color)
{
        TFT_CS=0;
        TFT_SetXY(x,y);
        TFT_WriteData16Bit(color);
        TFT_CS=1;
}   

/*****************************************
函数功能:读TFT某一点的颜色                          
出口参数:color  点颜色值                                 
******************************************/
u16 TFT_ReadPoint(u16 x,u16 y)
{
  u8 r,g,b;
        u16 R,G,B,Data;       
        TFT_CS=0;
        TFT_SetXY(x,y);  
        TFT_WriteReg8Bit(0X2E); //第一次写入控制命令
  TFT_ReadData8Bit();//第二次空读写DUMMY CLOCK
        r=TFT_ReadData8Bit();
        g=TFT_ReadData8Bit();
        b=TFT_ReadData8Bit();
        TFT_CS=1;
        //565模式
        R = r&0x00F8;//抛弃最后3位
        G = g&0x00FE;//抛弃最后2位
        B = b&0x00F8;//抛弃最后3位
        Data =         (R<<8)|(G<<3)|(B>>3);
        return Data;
}
/*************************************************
函数名:TFT_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点,Y_IncMode表示先自增y再自增x
返回值:无
*************************************************/
void TFT_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{       
        TFT_WriteReg8Bit(0x2a);
        TFT_WriteData16Bit(x_start);
        TFT_WriteData16Bit(x_end);
        TFT_WriteReg8Bit(0x2b);
        TFT_WriteData16Bit(y_start);
        TFT_WriteData16Bit(y_end);
        TFT_WriteReg8Bit(0x2c);
        TFT_SetXY(x_start,y_start);
}

//清屏函数
//color:要清屏的填充色
void TFT_Clear(u16 color)
{
                u16 i,j;
                TFT_CS=0;
                TFT_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
                for(j=0;j<Y_MAX_PIXEL;j++)
                        for(i=0;i<X_MAX_PIXEL;i++)
                                TFT_WriteData16Bit(color);
                TFT_CS=1;
}

回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-4-9 22:30:22 | 显示全部楼层
/*****************************************
函数功能:读TFT某一点的颜色                          
出口参数:color  点颜色值                                 
******************************************/
u16 TFT_ReadPoint(u16 x,u16 y)
{
  u8 r,g,b;
        u16 R,G,B,Data;       
        TFT_CS=0;
        TFT_SetXY(x,y);  
        TFT_WriteReg8Bit(0X2E); //第一次写入控制命令
  TFT_ReadData8Bit();//第二次空读写DUMMY CLOCK
        r=TFT_ReadData8Bit();
        g=TFT_ReadData8Bit();
        b=TFT_ReadData8Bit();
        TFT_CS=1;
        //565模式
        R = r&0x00F8;//抛弃最后3位
        G = g&0x00FE;//抛弃最后2位
        B = b&0x00F8;//抛弃最后3位
        Data =         (R<<8)|(G<<3)|(B>>3);
        return Data;
}

回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-4-10 09:59:50 来自手机 | 显示全部楼层
275891381 发表于 2018-4-9 22:30
/*****************************************
函数功能:读TFT某一点的颜色                          
...

您能不能把您的tft_readdata8bit函数也发一下,非常感谢!
回复

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2018-4-10 10:42:43 | 显示全部楼层
spi下没读成功过
魔法王子
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-4-10 12:00:10 | 显示全部楼层
275891381 发表于 2018-4-10 10:35
void TFT_WriteReg8Bit(u8 Reg)
{
   TFT_DCRS=0;

非常感谢!我自己去研究一下
回复

使用道具 举报

8

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2017-12-4
在线时间
86 小时
 楼主| 发表于 2018-4-10 12:00:24 | 显示全部楼层

诶。。。
回复

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2018-4-12 09:00:08 | 显示全部楼层

据说9341的spi屏有bug,时序不对
魔法王子
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 07:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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