AdolfHitler 发表于 2013-6-5 21:45:19

LCD显示颜色有问题,求救,help!SOS,哈利路亚!八嘎!

本帖最后由 AdolfHitler 于 2013-6-6 18:50 编辑

红绿蓝,但实际显示的是橙 红 蓝, 如果显示彩色图片效果跟看恐怖片似的



下面是原图颜色



         下面是 lch.h和lcd.c里面的内容
#ifndef __LCD_H__
#define __LCD_H__
#define LCD_XSIZE_TFT 480
#define LCD_YSIZE_TFT 272
#define INVVDEN    1
#define PNRMODE    3//LCD类型为TFT
#define BPPMODE    12//选择颜色模式为16BPP
#define CLKVAL_TFT 4//像素时钟设置VCLK=HCLK/(2*(CLKVAL+1))=10MHz
#define VBPD       2//Vsync Back-Porch
#define VFPD       4//Vsync Front-Porch
#define VSPW       8//Vsync Pulse Width
#define HBPD       10//Hsync Back-Porch
#define HFPD       19//Hsync Front-Porch
#define HSPW       30//Hsync Pulse Width
#define HOZVAL_TFT    (LCD_XSIZE_TFT-1)//X方向宽度
#define LINEVAL_TFT   (LCD_YSIZE_TFT-1)//Y方向宽度
//#define BPPMODE_TFT   12   //选择颜色模式为16BPP
#define FRM565_TFT      1//设置LCD 16BBP的显示模式为565
#define INVVCLK_TFT   0//设置VCLK下降沿读取数据
#define INVVLINE_TFT    1//设置HSYNC极性为翻转极性
#define INVVFRAME_TFT   1//设置VSYNC极性为翻转极性
#define HWSWP         1//半字交换使能
#define OFFSIZE         0
extern void Lcd_Init(void);
extern void PutPixel(unsigned int x,unsigned int y,unsigned short c);
extern void Lcd_ClearScr(unsigned int c);
extern void Lcd_PaintBmp(const unsigned char bmp[]);
#endif

=====================================================================
#include "2440addr.h"
#include "LCD.H"
#include <stdarg.h>
#define LOW21BITS(n)          ((n)&0x1fffff) //保留低21位
#define Lcd_Enable()               rLCDCON1 |= 1
volatile unsigned short int LCD_BUFFER;
extern unsigned char __CHS[];//显示汉字
//LCD配置函数
static void Lcd_Config(void)
{
rGPCCON = 0xaaaa02a9;//1010 1010 1010 1010 0000 0010 1010 1001
rGPDCON = 0xaaaaaaaa;//1010 1010 1010 1010 1010 1010 1010 1010

rLCDCON1 = (CLKVAL_TFT<<8) | (PNRMODE<<5) | (BPPMODE<<1);
rLCDCON2 = (VBPD<<24) | (LINEVAL_TFT<<14) | (VFPD<<6) | (VSPW);
rLCDCON3 = (HBPD<<19) | (HOZVAL_TFT<<8) | (HFPD);
rLCDCON4 |= (HSPW);
rLCDCON5 = (FRM565_TFT<<11) | (INVVCLK_TFT<<10) | (INVVLINE_TFT<<9) | (INVVFRAME_TFT<<8) | (HWSWP);
rLCDSADDR1 = (((unsigned int)LCD_BUFFER>>22)<<21) | (LOW21BITS((unsigned int)LCD_BUFFER>>1));
rLCDSADDR2 = LOW21BITS(((unsigned int)LCD_BUFFER + (LCD_YSIZE_TFT*LCD_XSIZE_TFT*2))>>1);
rLCDSADDR3 = (OFFSIZE<<11) | (LCD_XSIZE_TFT/1);
}
//LCD供电使能函数
static void Lcd_PowerEnable(int powerEnable)
{
rGPGCON = rGPGCON & (~(3<<8)) | (3<<8);
rGPGDAT = rGPGDAT | (1<<4);
rLCDCON5 = rLCDCON5 & (~(1<<3)) | (powerEnable<<3);

}
//画单像素
void PutPixel(unsigned int x,unsigned int y,unsigned short c)
{
if((x<LCD_XSIZE_TFT) && (y<LCD_YSIZE_TFT))
{
LCD_BUFFER=c;
}
}
void Lcd_Init(void)
{
Lcd_Config();
Lcd_Enable();
Lcd_PowerEnable(1);
}
//清屏
extern void Lcd_ClearScr(unsigned int c)
{
unsigned int x,y;

for(y=0;y<LCD_YSIZE_TFT;y++)
{
for(x=0;x<LCD_XSIZE_TFT;x++)
{
   LCD_BUFFER=c;
}
}
}
//画bmp
extern void Lcd_PaintBmp(const unsigned char bmp[])
{
int x,y;
unsigned short c;
int p=0;

for(y=0; y<LCD_YSIZE_TFT; y++)
{
for(x=0; x<LCD_XSIZE_TFT; x++)
{
   c = (bmp<<8) | bmp;
   LCD_BUFFER = c;
   p=p+2;
}
}
}


AdolfHitler 发表于 2013-6-5 21:47:21

{:2_124:}{:2_124:}

ducling 发表于 2013-6-6 08:34:12

是不是在你的TQ_LOGO.C里没有"#define WIN32"这句话啊?

TQ-ZQL 发表于 2013-6-6 09:54:34

本帖最后由 TQ-ZQL 于 2013-6-6 09:55 编辑

看你设置的色位数(RGB565,RGB32)与你显示的图片对不对.

AdolfHitler 发表于 2013-6-6 17:47:21

ducling 发表于 2013-6-6 08:34 static/image/common/back.gif
是不是在你的TQ_LOGO.C里没有"#define WIN32"这句话啊?

我用的是ARM裸机开发实战随书光盘里的代码,没有TQ_LOGO.C啊
书里的代码是3.5寸屏的,我把代码改成4.3寸屏幕后可以显示,但是只有蓝色正常

AdolfHitler 发表于 2013-6-6 17:51:32

TQ-ZQL 发表于 2013-6-6 09:54 static/image/common/back.gif
看你设置的色位数(RGB565,RGB32)与你显示的图片对不对.

图片是用windows画图另存得来的,保存的格式为24位位图bmp
然后用bmp2h转换成.h .c文件
我是严格按照书上去做的,书上就是让我这么干的,
结果一系列操作之后就显示成这个样子了

AdolfHitler 发表于 2013-6-6 18:11:09

ducling 发表于 2013-6-6 08:34 static/image/common/back.gif
是不是在你的TQ_LOGO.C里没有"#define WIN32"这句话啊?

找到问题了,就是没定义 WIN32这个鸟货,这真是太意外了,哈哈哈哈
非常感谢
感谢大家的光临
感谢大家的帮助
感谢大家的帮主
感谢丐帮帮主

ducling 发表于 2013-6-7 14:49:57

AdolfHitler 发表于 2013-6-6 18:11 static/image/common/back.gif
找到问题了,就是没定义 WIN32这个鸟货,这真是太意外了,哈哈哈哈
非常感谢
感谢大家的光临


我也在学ARM裸机开发实战,把你自己写的显示图片程序给我发一份呗(最好是你在自己的板子上试过没有问题),我的4.3屏显示的图片一直只显示图片的上半部分,不知道咋回事,发个邮件呗ducling@163.com

AdolfHitler 发表于 2013-6-7 23:56:20

ducling 发表于 2013-6-7 14:49 static/image/common/back.gif
我也在学ARM裸机开发实战,把你自己写的显示图片程序给我发一份呗(最好是你在自己的板子上试过没有问题), ...

已发送至邮箱,请查收
ARM裸机开发实战这本书,别的不说,光错别字就一大堆,程序就更是了,跟着书上做了一大溜,结果发现运行是错误的。如果不是初学者,我猜这本书都可以当笑话书来看了
不过这本书的优点也很大,确实入门很合适,讲解的很细致,看的很明白,做起来很头疼,头疼之后很轻松
页: [1]
查看完整版本: LCD显示颜色有问题,求救,help!SOS,哈利路亚!八嘎!