?? lcdlib.c
字號:
default:
break;
}
uart_printf("vx=%3d,vy=%3d\n",vx,vy);
Lcd_MoveViewPort(vx,vy,type);
}
}
/*********************************************************************************************
* name: Lcd_MoveViewPort
* func: screen scrolling
* para: int vx -- horizontal pixel to move
* int vy -- vertical pixel to move
* int type -- lcd display mode.
* ret: none
* modify:
* comment:
*********************************************************************************************/
void Lcd_MoveViewPort(int vx,int vy,int type)
{
UINT32T addr;
switch(type)
{
case MODE_STN_1BIT:
// LCDBASEU,LCDBASEL register has to be changed before 12 words before the end of VLINE.
// In mono mode, x=320 is 10 words, So, We can't change LCDBASEU,LCDBASEL
// during LINECNT=1~0 at mono mode.
// The processor mode should be superviser mode.
SET_IF();
#if (LCD_XSIZE_STN<512)
while((rLCDCON1>>18)<=1); // if x<512
#else
while((rLCDCON1>>18)==0); // if x>512 ((12+4)*32)
#endif
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D( ((addr+(SCR_XSIZE_STN*LCD_YSIZE_STN/8))>>1) );
CLR_IF();
break;
case MODE_STN_2BIT:
SET_IF();
#if (LCD_XSIZE_STN<256)
while((rLCDCON1>>18)<=1); // if x<256
#else
while((rLCDCON1>>18)==0); // if x>256
#endif
addr=(UINT32T)frameBuffer2Bit+(vx/4)+vy*(SCR_XSIZE_STN/4);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_STN*LCD_YSIZE_STN/4))>>1));
CLR_IF();
break;
case MODE_STN_4BIT:
SET_IF();
#if (LCD_XSIZE_STN<128)
while((rLCDCON1>>18)<=1); // if x<128
#else
while((rLCDCON1>>18)==0); // if x>128
#endif
addr=(UINT32T)frameBuffer4Bit+(vx/2)+vy*(SCR_XSIZE_STN/2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_STN*LCD_YSIZE_STN/2))>>1));
CLR_IF();
break;
case MODE_CSTN_8BIT:
SET_IF();
#if (LCD_XSIZE_CSTN<64)
while((rLCDCON1>>18)<=1); // if x<64
#else
while((rLCDCON1>>18)==0); // if x>64
#endif
addr=(UINT32T)frameBuffer8Bit+(vx/1)+vy*(SCR_XSIZE_CSTN/1);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_CSTN*LCD_YSIZE_CSTN))>>1));
CLR_IF();
break;
case MODE_CSTN_12BIT:
SET_IF();
#if (LCD_XSIZE_CSTN<43)
while((rLCDCON1>>18)<=1); // if x<43
#else
while((rLCDCON1>>18)==0); // if x>43
#endif
// Move 6Byte(4pixel)
addr=(UINT32T)frameBuffer12Bit+(vx*3/2)+vy*(SCR_XSIZE_CSTN*3/2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_CSTN*LCD_YSIZE_CSTN*3/2))>>1));
CLR_IF();
break;
case MODE_TFT_1BIT_240320:
SET_IF();
#if (LCD_XSIZE_TFT_240320<512)
while((rLCDCON1>>18)<=1); // if x<512
#else
while((rLCDCON1>>18)==0); // if x>512
#endif
addr=(UINT32T)frameBuffer8BitTft240320+(vx/8)+vy*(SCR_XSIZE_TFT_240320/8);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_240320*LCD_YSIZE_TFT_240320/8))>>1));
break;
case MODE_TFT_8BIT_240320:
SET_IF();
#if (LCD_XSIZE_TFT_240320<64)
while((rLCDCON1>>18)<=1); // if x<64
#else
while((rLCDCON1>>18)==0); // if x>64
#endif
addr=(UINT32T)frameBuffer8BitTft240320+(vx/1)+vy*(SCR_XSIZE_TFT_240320/1);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_240320*LCD_YSIZE_TFT_240320))>>1));
CLR_IF();
break;
case MODE_TFT_16BIT_240320:
SET_IF();
#if (LCD_XSIZE_TFT_240320<32)
while((rLCDCON1>>18)<=1); // if x<32
#else
while((rLCDCON1>>18)==0); // if x>32
#endif
addr=(UINT32T)frameBuffer16BitTft240320+(vx*2)+vy*(SCR_XSIZE_TFT_240320*2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_240320*LCD_YSIZE_TFT_240320*2))>>1));
CLR_IF();
break;
case MODE_TFT_1BIT_640480:
SET_IF();
#if (LCD_XSIZE_TFT_640480<512)
while((rLCDCON1>>18)<=1); // if x<512
#else
while((rLCDCON1>>18)==0); // if x>512 ((12+4)*32)
#endif
addr=(UINT32T)frameBuffer1BitTft640480+(vx/8)+vy*(SCR_XSIZE_TFT_640480/8);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D( ((addr+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480/8))>>1) );
CLR_IF();
break;
case MODE_TFT_8BIT_640480:
SET_IF();
#if (LCD_XSIZE_TFT_640480<64)
while((rLCDCON1>>18)<=1); // if x<64
#else
while((rLCDCON1>>18)==0); // if x>64
#endif
addr=(UINT32T)frameBuffer8BitTft640480+(vx/1)+vy*(SCR_XSIZE_TFT_640480/1);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480))>>1));
CLR_IF();
break;
case MODE_TFT_16BIT_640480:
SET_IF();
#if (LCD_XSIZE_TFT_640480<32)
while((rLCDCON1>>18)<=1); // if x<32
#else
while((rLCDCON1>>18)==0); // if x>32
#endif
addr=(UINT32T)frameBuffer16BitTft640480+(vx*2)+vy*(SCR_XSIZE_TFT_640480*2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480*2))>>1));
CLR_IF();
break;
case MODE_TFT_24BIT_640480:
SET_IF();
#if (LCD_XSIZE_TFT_640480<16)
while((rLCDCON1>>18)<=1); // if x<16
#else
while((rLCDCON1>>18)==0); // if x>16
#endif
addr=(UINT32T)frameBuffer24BitTft640480+(vx*4)+vy*(SCR_XSIZE_TFT_640480*4);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_640480*LCD_YSIZE_TFT_640480*4))>>1));
CLR_IF();
break;
case MODE_TFT_1BIT_800600:
SET_IF();
#if (LCD_XSIZE_TFT_800600<512)
while((rLCDCON1>>18)<=1); // if x<512
#else
while((rLCDCON1>>18)==0); // if x>512 ((12+4)*32)
#endif
addr=(UINT32T)frameBuffer1BitTft800600+(vx/8)+vy*(SCR_XSIZE_TFT_800600/8);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D( ((addr+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600/8))>>1) );
CLR_IF();
break;
case MODE_TFT_8BIT_800600:
SET_IF();
#if (LCD_XSIZE_TFT_800600<64)
while((rLCDCON1>>18)<=1); // if x<64
#else
while((rLCDCON1>>18)==0); // if x>64
#endif
addr=(UINT32T)frameBuffer8BitTft800600+(vx/1)+vy*(SCR_XSIZE_TFT_800600/1);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600))>>1));
CLR_IF();
break;
case MODE_TFT_16BIT_800600:
SET_IF();
#if (LCD_XSIZE_TFT_800600<32)
while((rLCDCON1>>18)<=1); // if x<32
#else
while((rLCDCON1>>18)==0); // if x>32
#endif
addr=(UINT32T)frameBuffer16BitTft800600+(vx*2)+vy*(SCR_XSIZE_TFT_800600*2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_800600*LCD_YSIZE_TFT_800600*2))>>1));
CLR_IF();
break;
default:
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -