搜索
bottom↓
回复: 9

ILI9325,能读取一个像素点的颜色吗?

[复制链接]

出0入0汤圆

发表于 2010-10-14 08:35:39 | 显示全部楼层 |阅读模式
ILI9325,。我想移植ucgui。

void draw_point(int x,int y,int color)
{
    IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 0);
    Lcd_Write_Com(0x0020);
    Lcd_Write_Data(x);   //设置X坐标位置
    Lcd_Write_Com(0x0021);
    Lcd_Write_Data(y);   //设置Y坐标位置
    Lcd_Write_Com(0x0022);
    Lcd_Write_Data(color);
    IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1);。
}

还差int get_point(int x,int y)函数不会写。店主没提供。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-10-14 08:38:10 | 显示全部楼层
读和写类似吧?记得资料说Gram可读可写。

出0入0汤圆

发表于 2010-10-14 08:50:52 | 显示全部楼层
可以,仔细看看数据手册,我弄过。代码一下找不到了,反正不难,和其他差不多。

出0入0汤圆

 楼主| 发表于 2010-10-14 09:39:33 | 显示全部楼层
我看不懂手册,哪位能大发慈悲帮我写下吗?

出0入0汤圆

发表于 2010-10-14 14:44:25 | 显示全部楼层
int get_point(int x,int y)
{
    int color;
    IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 0);
    Lcd_Write_Com(0x0020);
    Lcd_Write_Data(x);   //设置X坐标位置
    Lcd_Write_Com(0x0021);
    Lcd_Write_Data(y);   //设置Y坐标位置
    color = Lcd_Read_Data(0x0022); //获取指定座标的颜色值
    IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1);
    return color;
}
不知道对不对,你试试吧,我的就是这样的,你的读取9325内部寄存器数据的函数是不是Lcd_Read_Data();如果不是的话,请修改一下。

出0入0汤圆

 楼主| 发表于 2010-10-14 15:15:55 | 显示全部楼层
谢谢,
Lcd_Read_Data();这个函数也没有,不知道怎么写。看到过的函数都是关于写的,没有读的。
你是怎么弄的这个函数》?

出0入0汤圆

 楼主| 发表于 2010-10-14 16:04:14 | 显示全部楼层
color = Lcd_Read_Data(0x0022); 这里面的参数是什么意思?

出0入0汤圆

 楼主| 发表于 2010-10-14 16:05:35 | 显示全部楼层
关键就是这个函数啊,外面那个函数。。。

出0入0汤圆

发表于 2010-10-14 17:21:06 | 显示全部楼层
你能不能把你的代码打包发上来?

出0入0汤圆

 楼主| 发表于 2010-10-14 21:28:54 | 显示全部楼层
#include"system.h"
#include <io.h>
#include<stdio.h>
#include <unistd.h>
#include <altera_avalon_pio_regs.h>
#include <alt_types.h>

void Lcd_Write_Data(alt_u16 dat);
void Draw_Point(alt_u16 x,alt_u16 y,alt_u16 color);  //画点
void Lcd_Write_Com(alt_u16 index);

void delayms(unsigned int time)
{
    int i;
    for(i=0;i<time;i++){
        usleep(1011);
    }
}

void LCD_Writ_Bus(alt_u16 dat)   //并行数据写入
{
    IOWR_ALTERA_AVALON_PIO_DIRECTION(DATA_BASE, 0xffff);//cmd out  
    IOWR_ALTERA_AVALON_PIO_DATA(DATA_BASE, dat);//dat     
    IOWR_ALTERA_AVALON_PIO_DATA(WR_BASE, 0);
    IOWR_ALTERA_AVALON_PIO_DATA(WR_BASE, 1);
}

void Lcd_Write_Com(alt_u16 index)  //发送命令
{   
    IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE, 0);//rs=0
    LCD_Writ_Bus(index);
}

void Lcd_Write_Data(alt_u16 dat)    //发送数据
{
    IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE, 1);//rs=1
    LCD_Writ_Bus(dat);
}

void Draw_Point(alt_u16 x,alt_u16 y,alt_u16 color)  //画点
{
    //IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 0);
    Lcd_Write_Com(0x0020);
    Lcd_Write_Data(x);   //设置X坐标位置
    Lcd_Write_Com(0x0021);
    Lcd_Write_Data(y);   //设置Y坐标位置
    Lcd_Write_Com(0x0022);
    Lcd_Write_Data(color);
    //IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1);
}

alt_u16 Get_Point(alt_u16 x,alt_u16 y)
{
    alt_u16 i;
    Lcd_Write_Com(0x0020);
    Lcd_Write_Data(x);   //设置X坐标位置
    Lcd_Write_Com(0x0021);
    Lcd_Write_Data(y);   //设置Y坐标位置
    Lcd_Write_Com(0x0022);
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(DATA_BASE, 0x0000);
    IOWR_ALTERA_AVALON_PIO_DATA(RS_BASE, 1);//rs=1
   
    IOWR_ALTERA_AVALON_PIO_DATA(RD_BASE, 0);
    //i=IORD_ALTERA_AVALON_PIO_DATA(DATA_BASE);
    IOWR_ALTERA_AVALON_PIO_DATA(RD_BASE, 1);
   
    IOWR_ALTERA_AVALON_PIO_DATA(RD_BASE, 0);
    i=IORD_ALTERA_AVALON_PIO_DATA(DATA_BASE);
    IOWR_ALTERA_AVALON_PIO_DATA(RD_BASE, 1);
    return i;
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
    Lcd_Write_Com(0x20);Lcd_Write_Data(x1);    //设置X坐标位置
    Lcd_Write_Com(0x21);Lcd_Write_Data(y1);   //设置Y坐标位置
    Lcd_Write_Com(0x50);Lcd_Write_Data(x1);   //开始X
    Lcd_Write_Com(0x52);Lcd_Write_Data(y1);    //开始Y
    Lcd_Write_Com(0x51);Lcd_Write_Data(x2);   //结束X
    Lcd_Write_Com(0x53);Lcd_Write_Data(y2);   //结束Y
    Lcd_Write_Com(0x22);                           
}

void Pant(alt_u16 dat)
{
    int i,j;
    //IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 0);//打开片选使能
    //Address_set(0,0,240,320);
    for(i=0;i<320;i++)
     {
      for (j=0;j<240;j++)
        {
             //Lcd_Write_Data(dat);
             Draw_Point(j,i,dat);
        }

      }
    //IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1);//关闭片选使能
}

void Lcd_Init(void)
{               
    IOWR_ALTERA_AVALON_PIO_DATA(RESET_BASE, 1);
    delayms(5);
     IOWR_ALTERA_AVALON_PIO_DATA(RESET_BASE,0);
    delayms(5);
     IOWR_ALTERA_AVALON_PIO_DATA(RESET_BASE, 1);
     IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1);
     IOWR_ALTERA_AVALON_PIO_DATA(RD_BASE, 1);
     IOWR_ALTERA_AVALON_PIO_DATA(WR_BASE, 1);
    delayms(5);

     IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 0);  //打开片选使能
    //************* Start Initial Sequence **********//
    Lcd_Write_Com(0xE5); Lcd_Write_Data((0x78<<8)+0xF0); // set SRAM internal timing
    Lcd_Write_Com(0x01); Lcd_Write_Data((0x01<<8)+0x00); // set SS and SM bit
    Lcd_Write_Com(0x02); Lcd_Write_Data((0x07<<8)+0x00); // set 1 line inversion
    Lcd_Write_Com(0x03); Lcd_Write_Data((0x10<<8)+0x30); // set GRAM write direction and BGR=1.
    Lcd_Write_Com(0x04); Lcd_Write_Data(0x0000); // Resize register
    Lcd_Write_Com(0x08); Lcd_Write_Data((0x02<<8)+0x07); // set the back porch and front porch
    Lcd_Write_Com(0x09); Lcd_Write_Data(0x0000); // set non-display area refresh cycle ISC[3:0]
    Lcd_Write_Com(0x0A); Lcd_Write_Data(0x0000); // FMARK function
    Lcd_Write_Com(0x0C); Lcd_Write_Data(0x0000); // RGB interface setting
    Lcd_Write_Com(0x0D); Lcd_Write_Data(0x0000); // Frame marker Position
    Lcd_Write_Com(0x0F); Lcd_Write_Data(0x0000); // RGB interface polarity
    //*************Power On sequence ****************//
    Lcd_Write_Com(0x10); Lcd_Write_Data(0x00); // SAP, BT[3:0], AP, DSTB, SLP, STB
    Lcd_Write_Com(0x11); Lcd_Write_Data(0x07); // DC1[2:0], DC0[2:0], VC[2:0]
    Lcd_Write_Com(0x12); Lcd_Write_Data(0x00); // VREG1OUT voltage
    Lcd_Write_Com(0x13); Lcd_Write_Data(0x00); // VDV[4:0] for VCOM amplitude
    Lcd_Write_Com(0x07); Lcd_Write_Data(0x01);
    delayms(50); // Dis-charge capacitor power voltage
    Lcd_Write_Com(0x0010); Lcd_Write_Data((0x10<<8)+0x90); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB
    Lcd_Write_Com(0x0011); Lcd_Write_Data((0x02<<8)+0x27); // DC1[2:0], DC0[2:0], VC[2:0]
    delayms(50); // Delay 50ms
    Lcd_Write_Com(0x0012); Lcd_Write_Data(0x001F); //001C// Internal reference voltage= Vci;
    delayms(50); // Delay 50ms
    Lcd_Write_Com(0x0013); Lcd_Write_Data((0x15<<8)+0x00); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00
    Lcd_Write_Com(0x0029); Lcd_Write_Data(0x0027); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
    Lcd_Write_Com(0x002B); Lcd_Write_Data(0x000D); // Set Frame Rate   000C
    delayms(50); // Delay 50ms
    Lcd_Write_Com(0x0020); Lcd_Write_Data(0x0000); // GRAM horizontal Address
    Lcd_Write_Com(0x0021); Lcd_Write_Data(0x0000); // GRAM Vertical Address
    // ----------- Adjust the Gamma Curve ----------//
    Lcd_Write_Com(0x0030); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0031); Lcd_Write_Data((0x07<<8)+0x07);
    Lcd_Write_Com(0x0032); Lcd_Write_Data((0x03<<8)+0x07);
    Lcd_Write_Com(0x0035); Lcd_Write_Data((0x02<<8)+0x00);
    Lcd_Write_Com(0x0036); Lcd_Write_Data(0x0008);//0207
    Lcd_Write_Com(0x0037); Lcd_Write_Data(0x0004);//0306
    Lcd_Write_Com(0x0038); Lcd_Write_Data(0x0000);//0102
    Lcd_Write_Com(0x0039); Lcd_Write_Data((0x07<<8)+0x07);//0707
    Lcd_Write_Com(0x003C); Lcd_Write_Data(0x0002);//0702
    Lcd_Write_Com(0x003D); Lcd_Write_Data((0x1D<<8)+0x04);//1604
   
    //------------------ Set GRAM area ---------------//
    Lcd_Write_Com(0x0050); Lcd_Write_Data(0x0000); // Horizontal GRAM Start Address
    Lcd_Write_Com(0x0051); Lcd_Write_Data(0x00EF); // Horizontal GRAM End Address
    Lcd_Write_Com(0x0052); Lcd_Write_Data(0x0000); // Vertical GRAM Start Address
    Lcd_Write_Com(0x0053); Lcd_Write_Data((0x01<<8)+0x3F); // Vertical GRAM Start Address
    Lcd_Write_Com(0x0060); Lcd_Write_Data((0xA7<<8)+0x00); // Gate Scan Line
    Lcd_Write_Com(0x0061); Lcd_Write_Data(0x0001); // NDL,VLE, REV
    Lcd_Write_Com(0x006A); Lcd_Write_Data(0x0000); // set scrolling line
    //-------------- Partial Display Control ---------//
    Lcd_Write_Com(0x0080); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0081); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0082); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0083); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0084); Lcd_Write_Data(0x0000);
    Lcd_Write_Com(0x0085); Lcd_Write_Data(0x0000);
    //-------------- Panel Control -------------------//
    Lcd_Write_Com(0x0090); Lcd_Write_Data(0x0010);
    Lcd_Write_Com(0x0092); Lcd_Write_Data((0x06<<8)+0x00);
    Lcd_Write_Com(0x0007); Lcd_Write_Data((0x01<<8)+0x33); // 262K color and display ON
   
    Address_set(0,0,240,320);
    //IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1); //关闭片选使能

}


int main(void)
{   
     //int i,j;
    Lcd_Init();
    Pant(0x0000);
    while(1){
       Pant(0xf800); //红色
        Draw_Point(120,100,0xf800);
        Draw_Point(120,120,0x001f);
        Draw_Point(120,140,0xfff0);
        Draw_Point(120,160,0xffff);
        
        Draw_Point(220,100,Get_Point(120,100));
        Draw_Point(220,120,Get_Point(120,120));
        Draw_Point(220,140,Get_Point(120,140));
        Draw_Point(220,160,Get_Point(120,160));
       delayms(2000);
       Pant(0X07E0); //绿色
        Draw_Point(120,100,0xf800);
        Draw_Point(120,120,0x001f);
        Draw_Point(120,140,0xfff0);
        Draw_Point(120,160,0xffff);
        
        Draw_Point(220,100,Get_Point(120,100));
        Draw_Point(220,120,Get_Point(120,120));
        Draw_Point(220,140,Get_Point(120,140));
        Draw_Point(220,160,Get_Point(120,160));
       delayms(2000);
        Pant(0x001f); //蓝色   
        Draw_Point(120,100,0xf800);
        Draw_Point(120,120,0x001f);
        Draw_Point(120,140,0xfff0);
        Draw_Point(120,160,0xffff);
        
        Draw_Point(220,100,Get_Point(120,100));
        Draw_Point(220,120,Get_Point(120,120));
        Draw_Point(220,140,Get_Point(120,140));
        Draw_Point(220,160,Get_Point(120,160));         
       delayms(2000);}
    /*
        Draw_Point(120,100,0xf800);
        Draw_Point(120,120,0x001f);
        Draw_Point(120,140,0xfff0);
        Draw_Point(120,160,0xffff);
        
        Draw_Point(220,100,Get_Point(120,100));
        Draw_Point(220,120,Get_Point(120,120));
        Draw_Point(220,140,Get_Point(120,140));
        Draw_Point(220,160,Get_Point(120,160));
    */
    return 0;
}




现在我这么写了,可以读出数据了。不知道代码能否简化(get_point函数是我胡乱写的),怎样能加快读写速度吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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