天嵌 ARM开发社区

 找回密码
 注册
查看: 3717|回复: 8

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

[复制链接]
AdolfHitler 发表于 2013-6-5 21:45:19 | 显示全部楼层 |阅读模式
本帖最后由 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[272][480];
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[y][x]=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[y][x]=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[p]<<8) | bmp[p+1];
   LCD_BUFFER[y][x] = c;
   p=p+2;
  }
}
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| AdolfHitler 发表于 2013-6-5 21:47:21 | 显示全部楼层
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
是不是在你的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
看你设置的色位数(RGB565,RGB32)与你显示的图片对不对.

图片是用windows画图另存得来的,保存的格式为24位位图bmp
然后用bmp2h转换成.h .c文件
我是严格按照书上去做的,书上就是让我这么干的,
结果一系列操作之后就显示成这个样子了
 楼主| AdolfHitler 发表于 2013-6-6 18:11:09 | 显示全部楼层
ducling 发表于 2013-6-6 08:34
是不是在你的TQ_LOGO.C里没有"#define WIN32"这句话啊?

找到问题了,就是没定义 WIN32这个鸟货,这真是太意外了,哈哈哈哈
非常感谢
感谢大家的光临
感谢大家的帮助
感谢大家的帮主
感谢丐帮帮主
ducling 发表于 2013-6-7 14:49:57 | 显示全部楼层
AdolfHitler 发表于 2013-6-6 18:11
找到问题了,就是没定义 WIN32这个鸟货,这真是太意外了,哈哈哈哈
非常感谢
感谢大家的光临

我也在学ARM裸机开发实战,把你自己写的显示图片程序给我发一份呗(最好是你在自己的板子上试过没有问题),我的4.3屏显示的图片一直只显示图片的上半部分,不知道咋回事,发个邮件呗ducling@163.com
 楼主| AdolfHitler 发表于 2013-6-7 23:56:20 | 显示全部楼层
ducling 发表于 2013-6-7 14:49
我也在学ARM裸机开发实战,把你自己写的显示图片程序给我发一份呗(最好是你在自己的板子上试过没有问题), ...

已发送至邮箱,请查收
ARM裸机开发实战这本书,别的不说,光错别字就一大堆,程序就更是了,跟着书上做了一大溜,结果发现运行是错误的。如果不是初学者,我猜这本书都可以当笑话书来看了
不过这本书的优点也很大,确实入门很合适,讲解的很细致,看的很明白,做起来很头疼,头疼之后很轻松
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-8 00:19 , Processed in 1.078125 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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