?? lcdlib.c
字號:
{
// 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
}
void Lcd_EnvidOnOff(int onoff)
{
if(onoff==1)
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}
void Lcd_Lpc3600Enable(void)
{
rTCONSEL=(rTCONSEL|7)&(~(1<<4)); // 240320,Enable LPC3600, Disable LCC3600
}
void Lcd_Lcc3600Enable(void)
{
rTCONSEL=(rTCONSEL|0xe)&(~1); // Enable LCC3600, Disable LPC3600
}
void Lcd_TconDisable(void)
{
rTCONSEL&=~((1<<4)|1); // Disable LCC3600, LPC3600
}
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
}
void MoveViewPort(int type)
{
int vx=0,vy=0,vd;
// minimum movement offset
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_CSTN_12BIT_UP)*1+(type==MODE_CSTN_16BIT)*1
+(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;
default:
break;
}
Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
Lcd_MoveViewPort(vx,vy,type);
}
}
void Lcd_MoveViewPort(int vx, int vy, int type)
{
U32 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
addr=(U32)frameBuffer1Bit+(vx/8)+vy*(SCR_XSIZE_STN/8);
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=(U32)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=(U32)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=(U32)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
addr=(U32)frameBuffer12Bit+(vx*3/2)+vy*(SCR_XSIZE_CSTN*3/2); // Move 6Byte(4pixel)
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_CSTN*LCD_YSIZE_CSTN*3/2))>>1));
CLR_IF();
break;
case MODE_CSTN_12BIT_UP:
case MODE_CSTN_16BIT:
SET_IF();
#if (LCD_XSIZE_CSTN<32)
while((rLCDCON1>>18)<=1); // if x<32
#else
while((rLCDCON1>>18)==0); // if x>32
#endif
addr=(U32)frameBuffer16Bit+(vx*2)+vy*(SCR_XSIZE_CSTN*2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_CSTN*LCD_YSIZE_CSTN*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=(U32)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));
CLR_IF();
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=(U32)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=(U32)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=(U32)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=(U32)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=(U32)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=(U32)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=(U32)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=(U32)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=(U32)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 + -