主题 : lcd裸奔程序 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 31419
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2010-10-30
最后登录: 2010-12-08
楼主  发表于: 2010-11-01 23:46

 lcd裸奔程序

//FOR ADC
#define rADCCON    (*(volatile unsigned *)0x58000000)    //ADC control
#define rADCTSC    (*(volatile unsigned *)0x58000004)    //ADC touch screen control
#define rADCDLY    (*(volatile unsigned *)0x58000008)    //ADC start or Interval Delay
#define rADCDAT0   (*(volatile unsigned *)0x5800000c)    //ADC conversion data 0
#define rADCDAT1   (*(volatile unsigned *)0x58000010)    //ADC conversion data 1
#define rADCUPDN   (*(volatile unsigned *)0x58000014)    //Stylus Up/Down interrupt status

//FOR   LCD
#define U32 unsigned int
#define M5D(n)            ((n) & 0x1fffff)     //用于设置显示缓存区时,取低21位地址

#define rGPCCON    (*(volatile unsigned *)0x56000020)      //Port C control
#define rGPCDAT    (*(volatile unsigned *)0x56000024)       //Port C data
#define rGPCUP     (*(volatile unsigned *)0x56000028) //Pull-up control C

#define rGPDCON    (*(volatile unsigned *)0x56000030)      //Port D control
#define rGPDDAT    (*(volatile unsigned *)0x56000034)       //Port D data
#define rGPDUP     (*(volatile unsigned *)0x56000038)       //Pull-up control D

#define rGPGCON    (*(volatile unsigned *)0x56000060)      //Port G control
#define rGPGDAT    (*(volatile unsigned *)0x56000064)       //Port G data
#define rGPGUP     (*(volatile unsigned *)0x56000068)       //Pull-up control G

#define rLCDCON1    (*(volatile unsigned *)0x4d000000)     //LCD control 1
#define rLCDCON2    (*(volatile unsigned *)0x4d000004)     //LCD control 2
#define rLCDCON3    (*(volatile unsigned *)0x4d000008)     //LCD control 3
#define rLCDCON4    (*(volatile unsigned *)0x4d00000c)     //LCD control 4
#define rLCDCON5    (*(volatile unsigned *)0x4d000010)     //LCD control 5
#define rLCDSADDR1  (*(volatile unsigned *)0x4d000014)    //STN/TFT Frame buffer start address 1
#define rLCDSADDR2  (*(volatile unsigned *)0x4d000018)    //STN/TFT Frame buffer start address 2
#define rLCDSADDR3  (*(volatile unsigned *)0x4d00001c)    //STN/TFT Virtual screen address set
#define rLCDINTMSK  (*(volatile unsigned *)0x4d00005c)    //LCD Interrupt mask
#define rTCONSEL     (*(volatile unsigned *)0x4d000060)   //LPC3600 Control --- edited by junon

#define LCD_WIDTH    240               //屏幕的宽
#define LCD_HEIGHT   320               //屏幕的高
//垂直同步信号的脉宽、后肩和前肩
#define VSPW      ((6-1)&0x3f)
#define VBPD        ((2-1)&0xff)
#define VFPD        ((2-1)&0xff)
//水平同步信号的脉宽、后肩和前肩
#define HSPW      ((4-1)&0xff)
#define HBPD        ((8-1)&0x7f)
#define HFPD     (20-1)
//显示尺寸
#define LINEVAL  (LCD_HEIGHT-1)
#define HOZVAL   (LCD_WIDTH-1)
#define U16 unsigned short
//for LCDCON1
#define CLKVAL_TFT          6            //设置时钟信号
#define MVAL_USED          0            //
#define PNRMODE_TFT      3            //TFT型LCD
#define BPPMODE_TFT      12           //16位TFT型LCD

//for LCDCON5
#define BPP24BL          0     //32位数据表示24位颜色值时,低位数据有效,高8位无效
#define INVVCLK        0     //像素值在VCLK下降沿有效
#define INVVLINE       1     //翻转HSYNC信号
#define INVVFRAME   1     //翻转VSYNC信号
#define INVVD            0     //正常VD信号极性
#define INVVDEN        0     //正常VDEN信号极性
#define PWREN           1     //使能PWREN信号
#define BSWP                     0     //颜色数据字节不交换
#define HWSWP           0     //颜色数据半字不交换
//定义显示缓存区


volatile unsigned short LCD_BUFFER[320][240];
extern unsigned char xyx_240_320[];    //宽240,高320
extern unsigned char ARM[];
extern unsigned char TQ_LOGO_240320[];

void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
{
    int x,y,k=0;
    U32 c;
    int p = 0;
    
    for( y = y0 ; y < l ; y++ )
    {
        for( x = x0 ;  x< h ; x++ )
        {
            c = bmp[p+1] | (bmp[p]<<8) ;
            
                //c=0xd000;
            if ( ( (x0+x) < LCD_WIDTH) && ( (y0+y) <LCD_HEIGHT) )
                LCD_BUFFER[y0+y][x0+x] =c;
                //LCD_BUFFER[y*240+x] = c;
            
            p = p + 2 ;
            
        }
        //c++;
    }
}
//16色tft
void tft_16bit_init()
{
       rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0;
       rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
       rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
       rLCDCON4=(HSPW);
      // rLCDCON5 = (BPP24BL<<12) | (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3)  |(BSWP<<1) | (HWSWP);
        rLCDCON5=(1<<11)|(0<<9)|(0<<8)|(0<<6)|(BSWP<<1)|(HWSWP);    
       rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);//帧缓存器的起始地址
       rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*2))>>1 );
      
}






void main(void)
{
       //配置LCD相关引脚
rGPCUP  = 0x00000000;
       rGPCCON = 0xaaaa02a9;
       rGPDUP  = 0x00000000;
       rGPDCON=0xaaaaaaaa;
        rLCDINTMSK|=(3);      // 屏蔽LCD中断
       rTCONSEL = 0;            //无效LPC3480
          tft_16bit_init();
       //rLPCSEL&=(~7); // Disable LPC3600
    //rTPAL=0; // Disable Temp Palette
       rGPGUP=rGPGUP&(~(1<<4))|(1<<4);      //GPG4上拉电阻无效
       rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //设置GPG4为LCD_PWREN
       rGPGDAT = rGPGDAT | (1<<4) ;               //GPG4置1
  
    
          
       rLCDCON1|=1;                   //LCD开启
    
      Paint_Bmp(0,0,240,320,ARM);
      

}
              
      
    
      

}
这是一个lcd程序,大家帮忙看一下究竟是哪里的问题,屏幕就是不会亮!!!! 我是2440的片子
级别: 新手上路
UID: 32117
精华: 1
发帖: 16
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2010-11-10
最后登录: 2021-08-19
1楼  发表于: 2010-11-16 22:21
VDEN信号要翻转。。。 手册上看不出来。。。 还有那几个参数我现在也不会设定,显示有点偏右上。
级别: 新手上路
UID: 76950
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-09-01
最后登录: 2013-10-17
2楼  发表于: 2012-10-09 10:33

 回 1楼(冰柠绿茶) 的帖子

确实是这样啊,为什么极性要翻转,从哪里看出来的呢?
级别: 新手上路
UID: 81400
精华: 0
发帖: 38
金钱: 190 两
威望: 38 点
综合积分: 76 分
注册时间: 2012-11-08
最后登录: 2015-12-30
3楼  发表于: 2012-11-22 14:02
非常好..不错不错...