主题 : LCD图片上移如何调整 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 113318
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2015-03-11
最后登录: 2017-09-13
楼主  发表于: 2015-04-16 10:37

 LCD图片上移如何调整

图片:
请各路大神指教,smart210的板子裸机开发LCD可以显示字幕,但是图片无法正常显示,只在最上面显现一点图片,修改了参数但是没明显变化,请问是什么原因,下面是其中一种修改的参数:
#define HSPW             (120)
#define HBPD            (40 - 1)
#define HFPD             (40 - 1)
#define VSPW            (1)
#define VBPD             (98 - 1)
#define VFPD             (12 - 1)
另一种参数搭配是:
#define HSPW             (120)
#define HBPD            (40 - 1)
#define HFPD             (40 - 1)
#define VSPW            (12)
#define VBPD             (2 - 1)
#define VFPD             (128 - 1)
改参数改的已经糊涂了,搞不明白是什么原因致使显示不正常。

级别: 新手上路
UID: 113318
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2015-03-11
最后登录: 2017-09-13
1楼  发表于: 2015-04-16 15:27
没人回复么
级别: 新手上路
UID: 108711
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
综合积分: 54 分
注册时间: 2014-10-04
最后登录: 2016-04-26
2楼  发表于: 2015-04-16 16:45

 回 1楼(善友) 的帖子

你的显示屏是什么型号的S多少?代码发过来看看
级别: 新手上路
UID: 113318
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2015-03-11
最后登录: 2017-09-13
3楼  发表于: 2015-04-17 08:50

 回 2楼(bflegend) 的帖子

10.1寸的TFT,LCM display type是Graphic type,S指的是STD product么?你说的代码是什么代码?是整个lcd.c的代码么?
#include "font_8x16.h"


#define GPF0CON            (*(volatile unsigned long *)0xE0200120)
#define GPF1CON            (*(volatile unsigned long *)0xE0200140)
#define GPF2CON            (*(volatile unsigned long *)0xE0200160)
#define GPF3CON            (*(volatile unsigned long *)0xE0200180)

#define GPD0CON            (*(volatile unsigned long *)0xE02000A0)
#define GPD0DAT            (*(volatile unsigned long *)0xE02000A4)

#define CLK_SRC1        (*(volatile unsigned long *)0xe0100204)
#define CLK_DIV1        (*(volatile unsigned long *)0xe0100304)
#define DISPLAY_CONTROL        (*(volatile unsigned long *)0xe0107008)

#define VIDCON0            (*(volatile unsigned long *)0xF8000000)
#define VIDCON1            (*(volatile unsigned long *)0xF8000004)
#define VIDTCON2        (*(volatile unsigned long *)0xF8000018)
#define WINCON0         (*(volatile unsigned long *)0xF8000020)
#define WINCON2         (*(volatile unsigned long *)0xF8000028)
#define SHADOWCON         (*(volatile unsigned long *)0xF8000034)
#define VIDOSD0A         (*(volatile unsigned long *)0xF8000040)
#define VIDOSD0B         (*(volatile unsigned long *)0xF8000044)
#define VIDOSD0C         (*(volatile unsigned long *)0xF8000048)

#define VIDW00ADD0B0         (*(volatile unsigned long *)0xF80000A0)
#define VIDW00ADD1B0         (*(volatile unsigned long *)0xF80000D0)

#define VIDTCON0         (*(volatile unsigned long *)0xF8000010)
#define VIDTCON1         (*(volatile unsigned long *)0xF8000014)


// KEY
#define GPH2CON             (*(volatile unsigned long *) 0xE0200C40)
#define GPH2DAT            (*(volatile unsigned long *) 0xE0200C44)



#define HSPW             (120)
#define HBPD            (40 - 1)
#define HFPD             (40 - 1)
#define VSPW            (2)
#define VBPD             (8 - 1)
#define VFPD             (86 - 1)

// FB地址
#define FB_ADDR            (0x23000000)
#define ROW                (800)
#define COL                (1280)
#define HOZVAL            (COL-1)
#define LINEVAL            (ROW-1)


#define GPH2_0_INTPUT         ~(0xf<<(0*4))
#define GPH2_1_INTPUT         ~(0xf<<(1*4))
#define GPH2_2_INTPUT         ~(0xf<<(2*4))
#define GPH2_3_INTPUT         ~(0xf<<(3*4))

/*
#define Red        0xff0000
#define White        0xffffff
#define Green       0x00ff00
#define Blue        0x0000ff
#define Yellow      0xffff00
#define Cyan        0x00ffff
#define Pink        0xff00ff
#define Black       0x000000
*/

#define  Panel_Horizontal_Pixel  800
#define  Panel_Vertical_Pixel    1280


// 初始化LCD
void lcd_init(void)
{
    // 配置引脚用于LCD功能
    GPF0CON = 0x22222222;
    GPF1CON = 0x22222222;
    GPF2CON = 0x22222222;
    GPF3CON = 0x22222222;

    // 打开背光
    GPD0CON &= ~(0xf<<4);
    GPD0CON |= (1<<4);
    GPD0DAT |= (1<<1);
    
        // KEY?砞竚盚?竟GPH2CON0ㄏGPH2_0/1/2/3ま竲?块???
    GPH2CON = GPH2_0_INTPUT&GPH2_1_INTPUT&GPH2_2_INTPUT&GPH2_3_INTPUT;

    // 10: RGB=FIMD I80=FIMD ITU=FIMD
    DISPLAY_CONTROL = 2<<0;

    // bit[26~28]:使用RGB接口
    // bit[18]:RGB 并行
    // bit[2]:选择时钟源为HCLK_DSYS=166MHz
    VIDCON0 &= ~( (3<<26)|(1<<18)|(1<<2) );

    // bit[1]:使能lcd控制器
    // bit[0]:当前帧结束后使能lcd控制器
    VIDCON0 |= ( (1<<0)|(1<<1) );

    // bit[6]:选择需要分频
    // bit[6~13]:分频系数为15,即VCLK = 166M/(2+1) = 55.3M
    VIDCON0 |= 4<<6 | 1<<4;


    // H43-HSD043I9W1.pdf(p13) 时序图:VSYNC和HSYNC都是低脉冲
    // s5pv210芯片手册(p1207) 时序图:VSYNC和HSYNC都是高脉冲有效,所以需要反转
    VIDCON1 |= 1<<5 | 1<<6;

    // 设置时序
    VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0;
    VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0;
    // 设置长宽
    VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);

    // 设置windows1
    // bit[0]:使能
    // bit[2~5]:24bpp
    WINCON0 |= 1<<0;
    WINCON0 &= ~(0xf << 2);
    WINCON0 |= (0xB<<2) | (1<<15);

#define LeftTopX     0
#define LeftTopY     0
#define RightBotX   1279
#define RightBotY   799

    // 设置windows1的上下左右
    VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);
    VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
    VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1);


    // 设置fb的地址
    VIDW00ADD0B0 = FB_ADDR;
    VIDW00ADD1B0 = (((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff);

    // 使能channel 0传输数据
    SHADOWCON = 0x1;
}


// 描点
void lcd_draw_pixel(int row, int col, int color)
{
    unsigned long * pixel = (unsigned long  *)FB_ADDR;

    *(pixel + row * COL + col) = color;

}

// 清屏
void lcd_clear_screen(int color)
{
    int i, j;

    for (i = 0; i < ROW; i++)
        for (j = 0; j < COL; j++)
            lcd_draw_pixel(i, j, color);

}

// 划横线
void lcd_draw_hline(int row, int col1, int col2, int color)
{
    int j;

    // 描第row行,第j列
    for (j = col1; j <= col2; j++)
        lcd_draw_pixel(row, j, color);

}

// 划竖线
void lcd_draw_vline(int col, int row1, int row2, int color)
{
    int i;
    // 描第i行,第col列
    for (i = row1; i <= row2; i++)
        lcd_draw_pixel(i, col, color);

}

// 划十字
void lcd_draw_cross(int row, int col, int halflen, int color)
{
    lcd_draw_hline(row, col-halflen, col+halflen, color);
    lcd_draw_vline(col, row-halflen, row+halflen, color);
}

// 画字符
void lcd_draw_char(unsigned char c)
{
    // 必须是静态变量
    static int x = 0;    // 第几列
    static int y = 0;    // 第几行

    int i,j;
    unsigned char line_dots;

    // 获得字模
    unsigned char *char_dots = (unsigned char *) (fontdata_8x16 + c * 16);


    // 是否需要回车换行
    if (c == '\n')
    {
        y += 16;
        if (y > ROW)
            y = 0;
        return ;
    }
    else if (c == '\r')
    {
        x = 0;
        return;
    }

    for (i = 0; i < 16; i++)
    {
        line_dots = char_dots;
        for (j = 0; j < 8; j++)
        {
            // 为1,则描蓝点
            if (line_dots & (0x80 >> j))
            {
                lcd_draw_pixel(y+i, x+j, 0xff);
            }
        }
    }

    // 光标移动到下一个8*16的位置
    x += 8;
    if (x > COL)
    {
        x = 0;
        y += 16;
        if (y > ROW)
            y = 0;
    }
}


// 画图
void lcd_draw_bmp(const unsigned char gImage_bmp[])
{
    int i, j;
    unsigned char *p = (unsigned char *)gImage_bmp;
    int blue, green, red;
    int color;
    unsigned long dat;
    

    // 图片大小1280x800像素
    for (i = 0; i < 800; i++)
        for (j = 0; j < 1280; j++)
        {
            blue  = *p++;
            green = *p++;
            red   = *p++;
        
            color = red << 16 | green << 8 | blue << 0;
            lcd_draw_pixel(i, j, color);
        }
    delay(5000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;    
     }
}

/*void Display_White(void)
{
    int i, j;
    int color;
       unsigned long dat;  

    // 瓜???1280x800钩?
    for (i = 0; i <  Panel_Horizontal_Pixel; i++)        // Modify by LCM
        for (j = 0; j < Panel_Vertical_Pixel; j++)    // Modify by LCM
        {
            color = White;    //RGB
            lcd_draw_pixel(i, j, color);
        }

    delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}
void Display_Green(void)
{
    int i, j;
    int color;
       unsigned long dat;  

    // 瓜???1280x800钩?
    for (i = 0; i <  Panel_Horizontal_Pixel; i++)        // Modify by LCM
        for (j = 0; j < Panel_Vertical_Pixel; j++)
        {
            color = Green;    //RGB
            lcd_draw_pixel(i, j, color);
        }

    delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}
void Display_Blue(void)
{
    int i, j;
    int color;
       unsigned long dat;  

    // 瓜???1280x800钩?
    for (i = 0; i <  Panel_Horizontal_Pixel; i++)        // Modify by LCM
        for (j = 0; j < Panel_Vertical_Pixel; j++)
        {
            color = Blue;    //RGB
            lcd_draw_pixel(i, j, color);
        }

    delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}


void Display_Red(void)
{
    int i, j;
    int color;
       unsigned long dat;  

    // 瓜???1280x800钩?
    for (i = 0; i <  Panel_Horizontal_Pixel; i++)        // Modify by LCM
        for (j = 0; j < Panel_Vertical_Pixel; j++)
        {
            color = Red;    //RGB
            lcd_draw_pixel(i, j, color);
        }

    delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}

void Display_Black(void)
{
    int i, j;
    int color;
       unsigned long dat;  

    // 瓜???1280x800钩?
    for (i = 0; i <  Panel_Horizontal_Pixel; i++)        // Modify by LCM
        for (j = 0; j < Panel_Vertical_Pixel; j++)
        {
            if (i == 0 || i == (Panel_Horizontal_Pixel -1) || j == 0 || j == (Panel_Vertical_Pixel -1))
                {
                color = White;    //RGB
                lcd_draw_pixel(i, j, color);
                }
            else
                {
                color = Black;    //RGB
                lcd_draw_pixel(i, j, color);
                }
        }

    delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}
void Display_ColorBar(void)
{
    int i, j;
    int color;
       unsigned long dat;  

  
    for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=0; j<160; j++)
            {
            color = Black;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }  
   for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=160; j<320; j++)
            {
            color = Red;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }  
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=320; j<480; j++)
            {
            color = Green;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=480; j<640; j++)
            {
            color = Blue;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=640; j<800; j++)
            {
            color = Yellow;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=800; j<960; j++)
            {
            color = Pink;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=960; j<1120; j++)
            {
            color = Cyan;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
     for (i=0; i<Panel_Horizontal_Pixel; i++)
    {
        for (j=1120; j<1280; j++)
            {
            color = White;    //RGB
            lcd_draw_pixel(i, j, color);
            }
    }
  delay(1000);        // delay 2sec
          
    dat = GPH2DAT;
            
    while ((dat & (1<<0)) == 0)
    {
        delay(500);
        dat = GPH2DAT;
    }
}*/