📄 displaylib.c
字号:
// 4 I 1
// --+-- <-8 octants mathematical cordinate
// 5 I 8
// 6I7
void LCD_Line(int32 x1,int32 y1,int32 x2,int32 y2,int32 color)
{
int32 dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
}
void LCD_ClearScr(uint32 c)
{
int32 i,j;
for(j=0;j<screen_height;j++)
for(i=0;i<screen_width;i++)
PutPixel(i,j,c);
}
void lputs(uint32 x, uint32 y, uint32 c, char *str)
{
int i,j,k;
int oneLine;
for(i=0;i<strlen(str);i++)
{
for(j=0; j<16; j++)
{
if ((str[i]>=0x20)&&(str[i]<0x80))
oneLine=chr_font8X16[str[i]-0x20][j];
else
oneLine=0;
for(k=0;k<8;k++)
{
if(oneLine&(1<<k))
PutPixel(x+7-k,y+j,c);
}
}
x+=8;
}
}
void lprintf(uint32 x, uint32 y, uint32 c, const char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
lputs(x,y,c,string);
va_end(ap);
}
//
//===================================================
//===================================================
// functions related to LDI initialization
//
void Init_LDI(void)
{
printf("\nSelect(LCD type)\n");
printf("1: LTS222-240x320(2.22\") RGB Parallel I/F \n2: LTV350-320x240(3.50\") \n3: LTS222-240x320(2.22\") RGB Serial I/F");
lcd_type = GetIntNum();
if((lcd_type<1)||(lcd_type>3))
{
printf("\n\nYou entered wrong number\n");
return;
}
switch(lcd_type)
{
case LCD_MODULE_LTS222:
lcd_horizon_value = LTS222_HOZVAL;
lcd_line_value = LTS222_LINEVAL;
lcd_vbpd = LTS222_VBPD;
lcd_vfpd = LTS222_VFPD;
lcd_vspw = LTS222_VSPW;
lcd_hbpd = LTS222_HBPD;
lcd_hfpd = LTS222_HFPD;
lcd_hspw = LTS222_HSPW;
lcd_frame_rate = LTS222_FRAME_RATE;
InitLDI_LTS222();
break;
case LCD_MODULE_LTV350:
lcd_horizon_value = LTV350_HOZVAL;
lcd_line_value = LTV350_LINEVAL;
lcd_vbpd = LTV350_VBPD;
lcd_vfpd = LTV350_VFPD;
lcd_vspw = LTV350_VSPW;
lcd_hbpd = LTV350_HBPD;
lcd_hfpd = LTV350_HFPD;
lcd_hspw = LTV350_HSPW;
lcd_frame_rate = LTV350_FRAME_RATE;
InitLDI_LTV350();
break;
case LCD_MODULE_LTS222_SERIAL:
lcd_horizon_value = LTS222_HOZVAL_SERIAL;
lcd_line_value = LTS222_LINEVAL_SERIAL;
lcd_vbpd = LTS222_VBPD_SERIAL;
lcd_vfpd = LTS222_VFPD_SERIAL;
lcd_vspw = LTS222_VSPW_SERIAL;
lcd_hbpd = LTS222_HBPD_SERIAL;
lcd_hfpd = LTS222_HFPD_SERIAL;
lcd_hspw = LTS222_HSPW_SERIAL;
lcd_frame_rate = LTS222_FRAME_RATE;
InitLDI_LTS222_SERIAL();
break;
default:
break;
}
printf("LDI Initialization is finished...\n\n");
}
void Init_LDI_CPUIF(void)
{
printf("\nSelect(LCD type)\n\n 1: LTS222-240x320(2.22\") CPU I/F\n");
lcd_type = GetIntNum();
if((lcd_type<1)||(lcd_type>3))
{
printf("\n\nYou entered wrong number\n");
return;
}
switch(lcd_type)
{
case LCD_MODULE_LTS222_CPUIF:
lcd_horizon_value = LTS222_HOZVAL;
lcd_line_value = LTS222_LINEVAL;
lcd_cs_setup = LTS222_CS_SETUP;
lcd_wr_setup = LTS222_WR_SETUP;
lcd_wr_act = LTS222_WR_ACT;
lcd_wr_hold = LTS222_WR_HOLD;
lcd_frame_rate = LTS222_FRAME_RATE;
InitLDI_LTS222_CPUIF();
break;
default:
break;
}
printf("LDI Initialization is finished...\n\n");
}
void Temp_forDebug(uint32 i,uint32 j)
{
uint8 ch=0;
printf(" * Write_LDI(0x%02x, 0x%04x) *\n",i,j);
while(!ch)
//ch = Uart_GetKey();
if(ch=='x')
debug_continue=FALSE;
}
void InitLDI_LTS222(void)
{
// LCD module reset
rGPBDAT |= (1<<(LCD_nRESET));
rGPBDAT &= ~(1<<(LCD_nRESET)); // goes to LOW
// delay about 5ms
delayLoop(LCD_DELAY_1MS*10);
rGPBDAT |= (1<<(LCD_nRESET)); // goes to HIGH
// debug_continue = TRUE;
debug_continue = FALSE;
// SET_CONFIG_PORT( spi1)
rGPLCON &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
rGPLCON |= (((1<<(LCD_DEN_BIT*2))) | ((1<<(LCD_DCLK_BIT*2))) | ((1<<(LCD_DSERI_BIT*2))));
// pull-up pull-down disable
rGPLUDP &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
rGPLUDP |= (((2<<(LCD_DEN_BIT*2))) | ((2<<(LCD_DCLK_BIT*2))) | ((2<<(LCD_DSERI_BIT*2))));
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
LCD_DEN_Hi;
LCD_DCLK_Hi;
LCD_DSERI_Hi;
///////////////////////////////////////////////////////////////////
// Power Setting Function 1
//////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x22,0x01); // PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
Write_LDI_LTS222(0x03,0x01); // RESET REGISTER
///////////////////////////////////////////////////////////////////
// Initializing Function 1
///////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x00,0xa0); // CONTROL REGISTER 1
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x01,0x10); // CONTROL REGISTER 2
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x02,0x00); // RGB INTERFACE REGISTER
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x05,0x00); // DATA ACCESS CONTROL REGISTER
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x0D,0x00); //
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
///////////////////////////////////////////////////////////////////
// Initializing Function 2
///////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x0E,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x0F,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x10,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x11,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x12,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x13,0x00); // DISPLAY SIZE CONTROL REGISTER
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x14,0x00); // PARTIAL-OFF AREA COLOR REGISTER 1
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x15,0x00); // PARTIAL-OFF AREA COLOR REGISTER 2
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x16,0x00); // PARTIAL 1 DISPLAY AREA STARTING REGISTER 1
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x17,0x00); // PARTIAL 1 DISPLAY AREA STARTING REGISTER 2
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x34,0x01); // POWER SUPPLY SYSTEM CONTROL REGISTER 14
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x35,0x00); // POWER SUPPLY SYSTEM CONTROL REGISTER 7
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
////////////////////////////////////////////////////////////////////
// Initializing Function 3
////////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x8D,0x01); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x8B,0x28); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x4B,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x4C,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x4D,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x4E,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x4F,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x50,0x00); // ID CODE REGISTER 2 Check it out
// delay about 50 us
delayLoop(LCD_DELAY_50US);
Write_LDI_LTS222(0x86,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x87,0x26); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x88,0x02); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x89,0x05); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x33,0x01); // POWER SUPPLY SYSTEM CONTROL REGISTER 13
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x37,0x06); // POWER SUPPLY SYSTEM CONTROL REGISTER 12 Check it out
// delay about 50 us
delayLoop(LCD_DELAY_50US);
Write_LDI_LTS222(0x76,0x00); // SCROLL AREA START REGISTER 2
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
/////////////////////////////////////////////////////////////////////
// Initializing Function 4
/////////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x42,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x43,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x44,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x45,0x00); // CALIBRATION REGISTER
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x46,0xef); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x47,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x48,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x49,0x01); // ID CODE REGISTER 1 check it out
// delay about 50 us
delayLoop(LCD_DELAY_50US);
Write_LDI_LTS222(0x4A,0x3f); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x3C,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x3D,0x00); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x3E,0x01); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x3F,0x3f); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x40,0x01); // horizontal back porch //050105 Boaz.Kim
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x41,0x0a); // horizontal back porch //050105 Boaz.Kim
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x8F,0x05); //
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
/////////////////////////////////////////////////////////////////////
// Initializing Function 5
/////////////////////////////////////////////////////////////////////
Write_LDI_LTS222(0x90,0x05); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x91,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x92,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x93,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x94,0x33); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x95,0x05); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x96,0x05); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x97,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x98,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x99,0x44); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x9A,0x33); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x9B,0x33); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
Write_LDI_LTS222(0x9C,0x33); //
delayLoop(LCD_DELAY_300NS); // delay about 300ns
#if 1
Write_LDI_LTS222(0x9D,0x80); // 16 or 18bit RGB
#else
Write_LDI_LTS222(0x9D,0x81); // 6bit RGB
#endif
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -