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

📄 lcd.c

📁 keil下的s3c44b0驱动LCD伪彩屏例子程序。
💻 C
字号:
#include <S3C44B0X.H>
#include <string.h>

#define Lcd_Hpixel (640)
#define Lcd_Vpixel (240)
#define testb(a,b) ((a)&(1<<(b)))

unsigned int LcdBuffer[240][640/4];
extern unsigned char const HZK16[6768][32];
extern unsigned char const ASCII[69][16];

/*LCD初始化*/
void Lcd_Initial(void)
{
 pPIO->PCONC     = 0x0f01ff54;
 pPIO->PCOND     = 0xaaaa;
 pPIO->PUPC     &=~0x00000010;
 pLCD->LCDCON1   = (0x0)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12);
 pLCD->LCDCON2   = (240-1)|((640*3/8-1)<<10)|(800<<21);
// pLCD->LCDCON3   = 0x00000001;
 pLCD->LCDSADDR1 = (0x3<<27)|(((unsigned int)LcdBuffer>>22)<<21)|(((unsigned int)LcdBuffer>>1)&0x1fffff);
 pLCD->LCDSADDR2 = ((((unsigned int)LcdBuffer+(640*240))>>1))|(13<<21)&0x1fffff;
 pLCD->LCDSADDR3 = (640/2)|(0<<9);
 pLCD->REDLUT    = 0xfdb96420;
 pLCD->GREENLUT  = 0xfdb96420;
 pLCD->BLUELUT   = 0xfb40;
 pLCD->DITHMODE  = 0x0;
 pLCD->DP1_2     = 0xa5a5;
 pLCD->DP4_7     = 0xba5da65;
 pLCD->DP3_5     = 0xa5a5f;
 pLCD->DP2_3     = 0xd6b;
 pLCD->DP5_7     = 0xeb7b5ed;
 pLCD->DP3_4     = 0x7dbe;
 pLCD->DP4_5     = 0x7ebdf;
 pLCD->DP6_7     = 0x7fdfdfe;
 pPIO->PDATC    &=~0x00000100;
 pLCD->LCDCON1   = (0x1)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12);
}

/*填充整 屏 */														
void Lcd_DrawBackground(unsigned char RGB)
{
 unsigned int i;
 unsigned int *pBuf = (unsigned int *)LcdBuffer;
 for(i=0;i<(640*240/4);i++)
 {
  *pBuf++=(RGB<<24)+(RGB<<16)+(RGB<<8)+RGB;
 }
}

/*画点 */
void Lcd_PutPixel(unsigned int x, unsigned int y,unsigned char RGB)
{
 unsigned int mask[4]={0x00ffffff,0xff00ffff,0xffff00ff,0xffffff00};
 if(x > (Lcd_Hpixel - 1))
 {return;}
 if(y > (Lcd_Vpixel - 1))
 {return;}
 LcdBuffer[y][x/4]=(LcdBuffer[y][x/4]&mask[x%4])|((unsigned int)RGB<<(3-x%4)*8);
}

/*画填充矩形*/
void Lcd_DrawBox(unsigned int H_Offset,unsigned int V_Offset,unsigned int H_Size,unsigned int V_Size,unsigned char RGB)
{
 unsigned int i,j;
 for(i=0;i<V_Size;i++)
 {
  for(j=0;j<H_Size;j++)
  {
   Lcd_PutPixel(H_Offset+j,V_Offset+i,RGB);
  }
 }
}

/*画水平线 */
void Lcd_DrawHline(unsigned int x0,unsigned int y0,unsigned int x1,unsigned char RGB)
{
 unsigned int temp;
 if(x0>x1)
 {
  temp = x0;
  x0   = x1;
  x1   = temp;
 }
 do
 {
  Lcd_PutPixel(x0,y0,RGB);
  x0++;
 }while(x1>=x0);
}

/*画垂直线 */
void Lcd_DrawVline(unsigned int x0,unsigned int y0,unsigned int y1,unsigned char RGB)
{
 unsigned int temp;
 if(y0>y1)
 {
  temp = y0;
  y0   = y1;
  y1   = temp;
 }
 do
 {
  Lcd_PutPixel(x0,y0,RGB);
  y0++;
 }while(y1>=y0);
}

/*画任意线 */
void Lcd_DrawLine(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned char RGB)
{
 signed int dx;
 signed int dy;
 signed char dx_sym;
 signed char dy_sym;
 signed int dx_x2;
 signed int dy_x2;
 signed int di;

 dx = x1 - x0;
 dy = y1 - y0;

 if(dx>0)
 {
  dx_sym = 1;
 }
 else
 {
  if(dx<0)
  {
   dx_sym = -1;
  }
  else
  {
   Lcd_DrawVline(x0,y0,y1,RGB);
   return;
  }
 }

 if(dy>0)
 {
  dy_sym = 1;
 }
 else
 {
  if(dy<0)
  {
   dy_sym = -1;
  }
  else
  {
   Lcd_DrawHline(x0,y0,x1,RGB);
   return;
  }
 }

 dx = dx_sym * dx;
 dy = dy_sym * dy;
 dx_x2 = dx * 2;
 dy_x2 = dy * 2;

 if(dx >= dy)
 {
  di = dy_x2 - dx;
  while(x0 != x1)
  {
   Lcd_PutPixel(x0,y0,RGB);
   x0 += dx_sym;
   if(di < 0)
   {
    di += dy_x2;
   }
   else
   {
    di += dy_x2 - dx_x2;
	y0 += dy_sym;
   }
  }
 Lcd_PutPixel(x0,y0,RGB);
 }
 else
 {
  di = dx_x2 - dy;
  while(y0 != y1)
  {
   Lcd_PutPixel(x0,y0,RGB);
   y0 += dy_sym;
   if(di < 0)
   {
    di += dx_x2;
   }
   else
   {
    di += dx_x2 - dy_x2;
	x0 += dx_sym;
   }
  }
 Lcd_PutPixel(x0,y0,RGB);
 }
}

/*显示汉字 */
void Lcd_PutHz16(unsigned int x,unsigned int y,unsigned char RGB,unsigned char *GB2312)
{
  unsigned short temp;
  unsigned char i,j;
  temp = (GB2312[0] - 0xB0) * 94 + (GB2312[1] - 0xA0) - 1;
  for(i = 0; i < 16; i++)
  {
   for(j = 0; j < 16; j++)
   {
    if(testb(HZK16[temp][i*2+j/8],j%8))
	{
	 Lcd_PutPixel(x+j,y+i,RGB);
	}
   }
  }
}

/*显示英文 */
void Lcd_PutChar(unsigned int x,unsigned int y,unsigned char RGB,unsigned char *c)
{
 unsigned char i,j;
 for(i = 0; i < 16; i++)
 {
  for(j = 0; j < 8; j++)
  {
   if(testb(ASCII[*c-0x20][i],j))
   {
    Lcd_PutPixel(x+j,y+i,RGB);
   }
  }
 }
}

  /* 显示混合文字 */ 
void Lcd_Print(unsigned int x,unsigned int y,unsigned char RGB,unsigned char *c)
{
 unsigned int i;
 for(i = 0; i < strlen((char *)c); i++)
 {
  if(*(c+i) < 0xA0)
  {
   Lcd_PutChar(x+i*8,y,RGB,c+i);
  }
  else
  {
   Lcd_PutHz16(x+i*8,y,RGB,c+i);
   i++;
  }
 }
}
/*显示图片 */
void Lcd_DrawImage(unsigned char *pic)
{
 unsigned int i;
 for(i=0;i<38400;i++)
 {
  LcdBuffer[i/160][i%160]=((*(pic+i*4))<<24)+((*(pic+i*4+1))<<16)+((*(pic+i*4+2))<<8)+(*(pic+i*4+3));
 }
}

⌨️ 快捷键说明

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