|  | 
 
| 本帖最后由 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;
 }
 }
 }
 
 
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册  |