11365|5

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

SSD1963 7寸屏显示图片的颜色不自然 [复制链接]

群创AT070TN92,SSD1963-7寸屏,800X480.

存在问题,初始化后闪屏,显示取模图片的颜色不自然,就像油画一样,好难看,大家板我分析一下是啥原因。

 

unsigned int  HDP=799;  //HS_Display_Area
unsigned int  HT =1200;  //(HS_Display_Area + HS_pulse_width + HS_Blanking + HS_Front_Porch)
unsigned int  HPS=93;  //(HS_pulse_width + HS_Blanking)
unsigned char HPW=40;  //HS_pulse_width
unsigned int  LPS=46; 

 

unsigned int  VDP=479;  //VS_Display_Area
unsigned int  VT =670;  //(VS_Display_Area + VS_pulse_width + VS_Blanking + VS_Front_Porch)
unsigned int  VPS=43;  //(VS_pulse_width + VS_Blanking)
unsigned char VPW=20;   //VS_pulse_width
unsigned int  FPS=23;

 

#define LCD_RAM    *(__IO uint16_t *) ((uint32_t)0x60020000)    //disp Data ADDR
#define LCD_REG    *(__IO uint16_t *) ((uint32_t)0x60000000) //disp Reg ADDR

 

 

//写寄存器
void LCD_WR_COM(u8 data)
{
    LCD_REG = data; //数据输出
}


//写16位数据 如果是8位,彩色图片会缺色
void LCD_WR_DATA(u16 data)
{
    LCD_RAM = data;  /* GPIO_Write(GPIOE,data); */
}

 


uint16_t LCD_BGR2RGB(u16 Color)
{
    u16  r, g, b, rgb;
    b = (Color>>0)  & 0x1f;
    g = (Color>>5)  & 0x3f;
    r = (Color>>11) & 0x1f;
    rgb =  (b<<11) + (g<<5) + (r<<0);
    return( rgb );
}

 

//LCD延时
void delay_time(unsigned int i)
{
    unsigned int a;
    unsigned int b;
    for(b=0;b<i;b++)
    for(a=0;a<1000;a++);
}

 

//LCD初始化
//初始化后存在闪屏问题。
void LCD_Init(void)
 {   
    u8 brightness = 0x80;//0x80;//0x40;//亮度
    u8 contrast   = 0x80;//0x80;//0x70;//对比度
    u8 saturation = 0x80;//0x80;//0x40;//饱和度

 FSMC_GPIO_Configuration(); //FSMC引脚配置
 FSMC_LCD_Init(); //FSMC配置使用FSMC的Bank1 NOR/PSRAM


 LCD_WR_COM (0x00E2); //设置锁相环(PLL) 振荡器(OSC) = 10MHz (hardware), Multiplier N = 35, 250MHz < VCO < 800MHz = OSC*(N+1), VCO = 360MHz
 LCD_WR_DATA(0x0010);
// LCD_WR_DATA(0x0023);    //OSC = 10MHz (hardware), //参数1
//  LCD_WR_DATA(0x002C);    //OSC = 8MHz (hardware),  //参数2
// LCD_WR_DATA(0x0036);    //OSC = 6.5MHz (hardware),//参数3
 LCD_WR_DATA(0x0001); //参数2 分配器 M = 2, PLL = 360/(M+1) = 120MHz
// LCD_WR_DATA(0x0054);    //参数3 验证M和N值
 LCD_WR_DATA(0x0004);
// LCD_WR_COM (0x00E3);
 LCD_WR_COM (0x00E0);    //启动锁相环(PLL)
 LCD_WR_DATA(0x0001);    //使能锁相环(PLL)
 delay_time(1);
 LCD_WR_COM (0x00E0); //再次启动锁相环(PLL)
 LCD_WR_DATA(0x0003); //用锁相环输出系统时钟
 delay_time(5);
// LCD_WR_COM (0x00E4);    //再次启动锁相环(PLL)
 LCD_WR_COM (0x0001);    //软复位
 delay_time(10);

/*****************************************************************
 * 7" TFT model # TY700TFT800480
 *****************************************************************/
//设置LSHIFT频率,如下, i.e. the DCLK 与 PLL 频率 120MHz 以前规定
//标准 DCLK 为 TY700TFT800480 是 33.3MHz(数据), 实验结果表明 30MHz 给一个稳定的结果
//30MHz = 120MHz*(LCDC_FPR+1)/2^20
//LCDC_FPR = 262143 (0x3FFFF)
//每行/ /时间 = (DISP_HOR_RESOLUTION+DISP_HOR_PULSE_WIDTH+DISP_HOR_BACK_PORCH+DISP_HOR_FRONT_PORCH)/30 us = 1056/30 = 35.2us
//9MHz = 120MHz*(LCDC_FPR+1)/2^20
//LCDC_FPR = 78642 (0x13332)
 LCD_WR_COM (0x00E6);  //根据分辨率设置PLCK(PLL)
// LCD_WR_DATA(0x000f);  //0x0003
// LCD_WR_DATA(0x0033);  //0x0033
// LCD_WR_DATA(0x0032);  //0x0032
    LCD_WR_DATA(0x000f);
 LCD_WR_DATA(0x0093);  //0x0033
 LCD_WR_DATA(0x00e0);  //0x0032

//设置液晶模式,不同于个别厂商
 LCD_WR_COM (0x00B0);   //LCD 规格
  LCD_WR_DATA(0x0010);   //0x10 // 设置 18-bit 为 7" 面板设置 TY700TFT800480
 LCD_WR_DATA(0x0080);   //TTL模式设置
// LCD_WR_DATA(0x0020);   //0x10 // 设置 18-bit 为 7" 面板设置 TY700TFT800480
// LCD_WR_DATA(0x0000);   //TTL模式设置
 LCD_WR_DATA((HDP>>8)&0X00FF);  // 设置液晶面板的大小(DISP_HOR_RESOLUTION = 800) H
 LCD_WR_DATA(HDP&0X00FF);    // 设置液晶面板的大小(DISP_HOR_RESOLUTION = 800) L
    LCD_WR_DATA((VDP>>8)&0X00FF);  // 设置液晶面板的大小(DISP_VER_RESOLUTION = 480) H
 LCD_WR_DATA(VDP&0X00FF);    // 设置液晶面板的大小(DISP_VER_RESOLUTION = 480) L
    LCD_WR_DATA(0x0000);     //0x00  // RGB序列

// LCD_WR_COM (0x00B1);

//设置水平段
 LCD_WR_COM (0x00B4); 
 LCD_WR_DATA((HT>>8)&0X00FF);   //Set HT
 LCD_WR_DATA(HT&0X00FF);
 LCD_WR_DATA((HPS>>8)&0X00FF);  //Set HPS
 LCD_WR_DATA(HPS&0X00FF);
 LCD_WR_DATA(HPW);      //Set HPW
 LCD_WR_DATA((LPS>>8)&0X00FF);  //Set HPS
 LCD_WR_DATA(LPS&0X00FF);
 LCD_WR_DATA(0x0000);

// LCD_WR_COM (0x00B5);

//设置垂直时期
 LCD_WR_COM (0x00B6); 
 LCD_WR_DATA((VT>>8)&0X00FF);   //Set VT
 LCD_WR_DATA(VT&0X00FF);
 LCD_WR_DATA((VPS>>8)&0X00FF);  //Set VPS
 LCD_WR_DATA(VPS&0X00FF);
 LCD_WR_DATA(VPW);      //Set VPW
 LCD_WR_DATA(0x0000);
 LCD_WR_DATA((FPS>>8)&0X00FF);  //Set FPS
 LCD_WR_DATA(FPS&0X00FF);


 LCD_WR_COM (0x00B8);  //设置GPIO配置
 LCD_WR_DATA(0x000F);  //GPIO3=output, GPIO[2:0]=output//GPIO is controlled by host; 4个IO设置成输出
 LCD_WR_DATA(0x0001);  //GPIO0 使用正常的IO功能

// LCD_WR_COM (0x00B7);

 LCD_WR_COM (0x00BA);  //设置GPIO配置  
 LCD_WR_DATA(0x0005);  //图像颠倒显示 GPIO[3:0] out 1

 LCD_WR_COM (0x0036); //旋转
 LCD_WR_DATA(0x0000);

//  LCD_WR_COM (0x003A); //设定像素格式, i.e. the bpp
//  LCD_WR_DATA(0x0055); //设定 16bpp

 LCD_WR_COM (0x00F0); //设置SSD1963同CPU接口为16bit 像素数据接口设置
 LCD_WR_DATA(0x0003); //16-bit(565 format) data for 16bpp PIC32MX only

// LCD_WR_COM (0x00F1);

    LCD_WR_COM (0x0021); //进入图形颜色翻转模式
 
    LCD_WR_COM (0x00BC);     //重要
    LCD_WR_DATA(brightness); //亮度值
    LCD_WR_DATA(contrast);   //对比度值
    LCD_WR_DATA(saturation); //饱和度值
     LCD_WR_DATA(0x0001);     //处理机允许
 delay_time(10);

 LCD_Clear(WHITE);    //显示器 清屏

 LCD_WR_COM (0x0029); // 打开显示屏显示图像显示

//设置 PWM
    LCD_WR_COM (0x00BE);
    LCD_WR_DATA(0x000E); //PLL(120M)/(256*Value)/256=120Hz
    LCD_WR_DATA(0x00FF); //duty=X/256
    LCD_WR_DATA(0x0009); //DBC使能PWM使能
    LCD_WR_DATA(0x00FF); //DBC手动亮度
    LCD_WR_DATA(0x0000); //DBC最小亮度
    LCD_WR_DATA(0x0000); //亮度前置分频器:关(系统频率/ Divcode / 32768)
 
    LCD_WR_COM (0x00D4);
//TH1 = display width * display height * 3 * 0.1 /16
//480*272 * 3 * 0.1 /16 =990H
    LCD_WR_DATA(0x0000);  
    LCD_WR_DATA(0x0009);  
    LCD_WR_DATA(0x0090);  
//TH2 = display width * display height * 3 * 0.25 /16
//480*272 * 3 * 0.25 /16 =17E8H
    LCD_WR_DATA(0x0000);  
    LCD_WR_DATA(0x0017);  
    LCD_WR_DATA(0x00E8); 
//TH3 = display width * display height * 3 * 0.6 /16
//480*272 * 3 * 0.6 /16  =3960H
    LCD_WR_DATA(0x0000);  
    LCD_WR_DATA(0x0039);  
    LCD_WR_DATA(0x0060); 
//end of PWM
 
    LCD_WR_COM (0x00D0); //
    LCD_WR_DATA(0x000D); //PLL(120M)/(256*Value)/256=120Hz 
 }

 

//显示取模图片

void Disp_LCDBmp(uint16_t Xstar,uint16_t Ystar,uint16_t Xend,uint16_t Yend,const unsigned char* bmp)
{
    u16 i=0,j=0;
    u16 *bitbmp = (u16 *)bmp;

    LCD_WR_COM(0x002A); 
 LCD_WR_DATA(Xstar>>8);    
 LCD_WR_DATA(Xstar&0x00ff);
 LCD_WR_DATA(Xend-1>>8);    
 LCD_WR_DATA(Xend-1&0x00ff);
    LCD_WR_COM(0x002b); 
 LCD_WR_DATA(Ystar>>8);    
 LCD_WR_DATA(Ystar&0x00ff);
 LCD_WR_DATA(Yend-1>>8);    
 LCD_WR_DATA(Yend-1&0x00ff);
 LCD_WR_COM(0x002c);
   
   for(i=0;i<Yend;i++)
 {
  for(j=0;j<Xend;j++)
  LCD_RAM = (LCD_BGR2RGB(*bitbmp++));
 }
}

此帖出自stm32/stm8论坛

最新回复

请问楼主是如何解决的?  详情 回复 发表于 2017-12-8 16:11
点赞 关注
 

回复
举报

7

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

快半个月的帖子没有一个人回复,还是自己搞定问题了。

 

psb.jpg (53 KB, 下载次数: 7)

psb.jpg
此帖出自stm32/stm8论坛
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 

回复 沙发 YDFQ560 的帖子

期待楼主可以分享下经验  呵呵
此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 

回复

150

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 YDFQ560 的帖子

哥们 你闪屏应该是5VADDV不稳定吧    示波器测测稳压芯片输出  还有怎么显示图片的啊?
此帖出自stm32/stm8论坛
 
 
 

回复

38

帖子

1

TA的资源

一粒金砂(中级)

5
 
楼主,如何解决显示效果不好的问题,是调对比度亮度和饱和度吗
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
请问楼主是如何解决的?
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表