⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdlib.c

📁 color_lcd_test
💻 C
📖 第 1 页 / 共 3 页
字号:
        case MODE_TFT_24BIT_640480:
            frameBuffer24BitTft640480=(UINT32T (*)[SCR_XSIZE_TFT_640480])LCDFRAMEBUFFER;
            rLCDCON1=(CLKVAL_TFT_640480<<8)|(MVAL_USED<<7)|(3<<5)|(13<<1)|0;
                
            // TFT LCD panel,24bpp TFT,ENVID=off
            rLCDCON2=(VBPD_640480<<24)|(LINEVAL_TFT_640480<<14)|(VFPD_640480<<6)|(VSPW_640480);
            rLCDCON3=(HBPD_640480<<19)|(HOZVAL_TFT_640480<<8)|(HFPD_640480);
            rLCDCON4=(MVAL<<8)|(HSPW_640480);
            rLCDCON5=(1<<12)|(1<<9)|(1<<8);                     // BPP24:MSB,HSYNC and VSYNC are inverted
            rLCDSADDR1=(((UINT32T)frameBuffer24BitTft640480>>22)<<21)|M5D((UINT32T)frameBuffer24BitTft640480>>1);
            rLCDSADDR2=M5D( ((UINT32T)frameBuffer24BitTft640480+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480*4))>>1 );
            rLCDSADDR3=(((SCR_XSIZE_TFT_640480-LCD_XSIZE_TFT_640480)*2)<<11)|(LCD_XSIZE_TFT_640480*2);
            rLCDINTMSK|=(3);                                    // MASK LCD Sub Interrupt
            rLPCSEL&=(~7);                                      // Disable LPC3600
            rTPAL=0;                                            // Disable Temp Palette
            
            break;
        
        case MODE_TFT_1BIT_800600:
        	frameBuffer1BitTft800600=(UINT32T (*)[SCR_XSIZE_TFT_800600/32])LCDFRAMEBUFFER;
           	rLCDCON1=(CLKVAL_TFT_800600<<8)|(MVAL_USED<<7)|(3<<5)|(8<<1)|0;

            // TFT LCD panel,1bpp TFT,ENVID=off
        	rLCDCON2=(VBPD_800600<<24)|(LINEVAL_TFT_800600<<14)|(VFPD_800600<<6)|(VSPW_800600);
        	rLCDCON3=(HBPD_800600<<19)|(HOZVAL_TFT_800600<<8)|(HFPD_800600);
        	rLCDCON4=(MVAL<<8)|(HSPW_800600);
        	rLCDCON5=(1<<9)|(1<<8);	

        	rLCDSADDR1=(((UINT32T)frameBuffer1BitTft800600>>22)<<21)|M5D((UINT32T)frameBuffer1BitTft800600>>1);
        	rLCDSADDR2=M5D( ((UINT32T)frameBuffer1BitTft800600+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600/8))>>1 );
        	rLCDSADDR3=(((SCR_XSIZE_TFT_800600-LCD_XSIZE_TFT_800600)/16)<<11)|(LCD_XSIZE_TFT_800600/16);
        	rLCDINTMSK|=(3);                                    // MASK LCD Sub Interrupt
        	rLPCSEL&=(~7);                                      // Disable LPC3600
        	rTPAL=0;                                            // Disable Temp Palette
        
            break;
    
        case MODE_TFT_8BIT_800600:
        	frameBuffer8BitTft800600=(UINT32T (*)[SCR_XSIZE_TFT_800600/4])LCDFRAMEBUFFER;
           	rLCDCON1=(CLKVAL_TFT_800600<<8)|(MVAL_USED<<7)|(3<<5)|(11<<1)|0;
            
            // TFT LCD panel,8bpp TFT,ENVID=off
        	rLCDCON2=(VBPD_800600<<24)|(LINEVAL_TFT_800600<<14)|(VFPD_800600<<6)|(VSPW_800600);
        	rLCDCON3=(HBPD_800600<<19)|(HOZVAL_TFT_800600<<8)|(HFPD_800600);
        	rLCDCON4=(MVAL<<8)|(HSPW_800600);
        	rLCDCON5=(1<<9)|(1<<8);	

        	rLCDSADDR1=(((UINT32T)frameBuffer8BitTft800600>>22)<<21)|M5D((UINT32T)frameBuffer8BitTft800600>>1);
        	rLCDSADDR2=M5D( ((UINT32T)frameBuffer8BitTft800600+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600/1))>>1 );
        	rLCDSADDR3=(((SCR_XSIZE_TFT_800600-LCD_XSIZE_TFT_800600)/2)<<11)|(LCD_XSIZE_TFT_800600/2);
        	rLCDINTMSK|=(3);                                    // MASK LCD Sub Interrupt
        	rLPCSEL&=(~7);                                      // Disable LPC3600
        	rTPAL=0;                                            // Disable Temp Palette
       
            break;
        	
        case MODE_TFT_16BIT_800600:
        	frameBuffer16BitTft800600=(UINT32T (*)[SCR_XSIZE_TFT_800600/2])LCDFRAMEBUFFER;
           	rLCDCON1=(CLKVAL_TFT_800600<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
            
            // TFT LCD panel,16bpp TFT,ENVID=off
        	rLCDCON2=(VBPD_800600<<24)|(LINEVAL_TFT_800600<<14)|(VFPD_800600<<6)|(VSPW_800600);
        	rLCDCON3=(HBPD_800600<<19)|(HOZVAL_TFT_800600<<8)|(HFPD_800600);
        	rLCDCON4=(MVAL<<8)|(HSPW_800600);
        	rLCDCON5=(1<<11)|(1<<10)|(1<<9)|(1<<8);
        	
        	rLCDSADDR1=(((UINT32T)frameBuffer16BitTft800600>>22)<<21)|M5D((UINT32T)frameBuffer16BitTft800600>>1);
        	rLCDSADDR2=M5D( ((UINT32T)frameBuffer16BitTft800600+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600*2))>>1 );
        	rLCDSADDR3=(((SCR_XSIZE_TFT_800600-LCD_XSIZE_TFT_800600)/1)<<11)|(LCD_XSIZE_TFT_800600/1);
        	rLCDINTMSK|=(3);                                    // MASK LCD Sub Interrupt
        	rLPCSEL&=(~7);                                      // Disable LPC3600
        	rTPAL=0;                                            // Disable Temp Palette
        
            break;
    
        default:
            break;
   }	
}

/*********************************************************************************************
* name:		Lcd_CstnOnOff
* func:		lcd cstn onoff configuration 
* para:		int onoff   --  cstn configuration
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void Lcd_CstnOnOff(int onoff)
{
    // 1:CSTN Panel on  0:CSTN Panel off //	
    if(onoff==1)
    	rLCDCON1|=1;                                            // ENVID=ON
    else
    	rLCDCON1 =rLCDCON1 & 0x3fffe;                           // ENVID Off
        rGPBUP=rGPBUP|(1<<5);                                   // Pull-up disable
        rGPBDAT=rGPBDAT&(~(1<<5))|(onoff<<5);                   // GPB5=On or Off
        rGPBCON=rGPBCON&(~(3<<10))|(1<<10);                     // GPD9=output
}    


/*********************************************************************************************
* name:		Lcd_EnvidOnOff
* func:		lcd Envid onoff configuration 
* para:		int onoff   --  Envid configuration
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void Lcd_EnvidOnOff(int onoff)
{
    if(onoff==1)
    	rLCDCON1|=1;                                            // ENVID=ON
    else
    	rLCDCON1 =rLCDCON1 & 0x3fffe;                           // ENVID Off
}    


/*********************************************************************************************
* name:		Lcd_Lpc3600Enable
* func:		Enable Lpc3600  
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void Lcd_Lpc3600Enable(void)
{
    rLPCSEL&=~(7);
    rLPCSEL|=(7);                                               // 240320,Enable LPC3600
}    

/*********************************************************************************************
* name:		Lcd_PowerEnable
* func:		Enable power  
* para:		int invpwren    --  indicates the PWREN signal polarity.
*           int pwren       --  LCD_PWREN output signal enable/disable.
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void Lcd_PowerEnable(int invpwren,int pwren)
{
    //GPG4 is setted as LCD_PWREN
    rGPGUP=rGPGUP&(~(1<<4))|(1<<4);                             // Pull-up disable
    rGPGCON=rGPGCON&(~(3<<8))|(3<<8);                           // GPG4=LCD_PWREN
    
    //Enable LCD POWER ENABLE Function
    rLCDCON5=rLCDCON5&(~(1<<3))|(pwren<<3);                     // PWREN
    rLCDCON5=rLCDCON5&(~(1<<5))|(invpwren<<5);                  // INVPWREN
}    

/*********************************************************************************************
* name:		MoveViewPort
* func:		screen scrolling  
* para:		int type    --  lcd display mode.
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void MoveViewPort(int type)
{
    int vx=0,vy=0,vd;
    vd=(type==MODE_STN_1BIT)*16+(type==MODE_STN_2BIT)*8+(type==MODE_STN_4BIT)*4
        +(type==MODE_CSTN_8BIT)*2+(type==MODE_CSTN_12BIT)*4 
        +(type==MODE_TFT_1BIT_240320)*16+(type==MODE_TFT_8BIT_240320)*2+(type==MODE_TFT_16BIT_240320)*1
        +(type==MODE_TFT_1BIT_640480)*16+(type==MODE_TFT_8BIT_640480)*2+(type==MODE_TFT_16BIT_640480)*1+(type==MODE_TFT_24BIT_640480)/2
        +(type==MODE_TFT_1BIT_800600)*16+(type==MODE_TFT_8BIT_800600)*2+(type==MODE_TFT_16BIT_800600)*1;        
    while(1)
    {
    	switch(uart_getch())
    	{
        	case 'i':
        	    if(vy>=vd)vy-=vd;    	   	
                break;
        
        	case 'j':
        	    if(vx>=vd)vx-=vd;
            	break;

    	case 'k':
    	    //if((type==MODE_TFT_1BIT_800600)|(type==MODE_TFT_8BIT_800600)|(type==MODE_TFT_16BIT_800600))   
    	    if((type&0x4000)&&(type&0x400))		  
    	    {
                if(vx<=(SCR_XSIZE_TFT_800600-LCD_XSIZE_TFT_800600-vd))vx+=vd;   	    
    	   }
    	    //else if((type==MODE_TFT_1BIT_640480)|(type==MODE_TFT_8BIT_640480)|(type==MODE_TFT_16BIT_640480)|(type==MODE_TFT_24BIT_640480))   
    	    else if((type&0x4000)&&(type&0x200))		  
    	    {
                if(vx<=(SCR_XSIZE_TFT_640480-LCD_XSIZE_TFT_640480-vd))vx+=vd;   	    
    	   }
            //else if((type==MODE_TFT_8BIT_240320)|(type==MODE_TFT_16BIT_240320))   
    	    else if((type&0x4000)&&(type&0x100)) 
    	    {
                if(vx<=(SCR_XSIZE_TFT_240320-LCD_XSIZE_TFT_240320-vd))vx+=vd;   	    
    	   }
            //else if((type==MODE_CSTN_8BIT)|(type==MODE_CSTN_12BIT))   
            else if(type&0x2000)   
            {
                if(vx<=(SCR_XSIZE_CSTN-LCD_XSIZE_CSTN-vd))vx+=vd;   	    
           }
            else
            {
                if(vx<=(SCR_XSIZE_STN-LCD_XSIZE_STN-vd))vx+=vd;   	    
           }
       	    break;

    	case 'm':
    	    if((type&0x4000)&&(type&0x400))
            {
                if(vy<=(SCR_YSIZE_TFT_800600-LCD_YSIZE_TFT_800600-vd))vy+=vd; 
                else if(vy=592) vy+=8;
           }
    	    else if((type&0x4000)&&(type&0x200))
            {
                if(vy<=(SCR_YSIZE_TFT_640480-LCD_YSIZE_TFT_640480-vd))vy+=vd;   	    
           }
    	    else if((type&0x4000)&&(type&0x100))
            {
                if(vy<=(SCR_YSIZE_TFT_240320-LCD_YSIZE_TFT_240320-vd))vy+=vd;   	    
           }
            else if(type&0x2000)   
            {
                if(vy<=(SCR_YSIZE_CSTN-LCD_YSIZE_CSTN-vd))vy+=vd;   	    
           }
            else
            {
                if(vy<=(SCR_YSIZE_STN-LCD_YSIZE_STN-vd))vy+=vd;   	    
           }
            
       	    break;

    	case '\r':
       	    return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -