|
本帖最后由 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
|