作为一款高端的CPU S3C2440(2013年的时候),自带LCD液晶屏的UI接口,
也就是外设,只需要对照对应的LCD手册设置寄存器即可
所用LCD是一款16BPP的320(宽)X240(高)的LCD显示屏
/******************************
*文件名:LCD.c *
*功能: 液晶显示程序 *
*创建者: 潘星宇 *
*最后修改:2013.02.27 *
*备注: *
* *
*******************************/
#include "LCD.h"
#if !BPP24
#define BPPMODE_TFT 12 //16位TFT型LCD
#else
#define BPPMODE_TFT 13 //24位TFT型LCD
#endif
#if !BPP24
#define HWSWP 1 //颜色数据半字交换
#else
#define HWSWP 0 //颜色数据半字不交换
#endif
//定义显示缓存区 320 240
//24BPP时应该为 U32LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];
volatile U16 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];
/**************************************************************************
***** 函数名: LCD_Init(void)
***** 功能: LCD初始化
***** 参数: 无
***** 返回值: 无
***** 创建者: 潘星宇
***** 创建时间: 2013-03-7
***** 最后更新:2013-03-7
****************************************************************************/
void LCD_Init(void)
{
rGPCUP = 0x00000000;
rGPCCON = 0xaaaa02aa; //0x1010
rGPDUP = 0x00000000;
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rLCDCON1=rLCDCON1|((CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0); //1100
rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
rLCDCON4=(HSPW);
rLCDCON5 = (1<<11) |(INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3) |(BSWP<<1) | (HWSWP);
rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
//24BPP时应该是M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*2))>>1 );
rLCDSADDR3=LCD_WIDTH*2/2; //24BPP时候应该是 LCD_WIDTH*4/2
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL = 0; // Disable LPC3480
rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN把
rGPGDAT = rGPGDAT | (1<<4) ;
rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); // PWREN
rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); // INVPWREN电源脉冲信号不反转
rLCDCON1|=1; //开启LCD显示
}
/**************************************************************************
***** 函数名: PutPixel(void)
***** 功能: 绘制像素点
***** 参数: x:横坐标 y:纵坐标 c颜色
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30 int
****************************************************************************/
void PutPixel(U32 x,U32 y, U32 c )
{
LCD_BUFFER[y][x] = c;
}
/**************************************************************************
***** 函数名: Draw_Text16(void)
***** 功能:绘制宽X高大小为16×16的中文字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2011-03-30
***** 最后更新:2011-03-30
****************************************************************************/
void Draw_Text16(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
unsigned short int i,j;
unsigned char mask,buffer;
for (i=0;i<16;i++)
{
/*汉字的左半边*/
mask=0x80; //掩码 0b1000 0000>>1---0b0000 1000
buffer=ch[i*2]; //提取一行的第一个字节0x08=0b0000 1000
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
/*汉字的右半边*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*2+1]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+8,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+8,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII16x24(void)
***** 功能:绘制宽X高大小为16×24的字符
***** 参数: x:横坐标 y:纵坐标 c颜色 ch:字模数组
***** 返回值: 无
***** 创建者:
***** 创建时间: 2013-03-22
***** 最后更新:2013-03-22
****************************************************************************/
void Draw_ASCII16x24(U32 x,U32 y,U32 color,U32 backColor,const unsigned char ch[])
{
unsigned short int i,j;
unsigned char mask,buffer;
for (i=0;i<24;i++)
{
/*字符的左半边*/
mask=0x80; //掩码 0b1000 0000>>1---0b0000 1000
buffer=ch[i*2]; //提取一行的第一个字节0x08=0b0000 1000
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j,y+i,backColor); //背景色
}
mask=mask>>1; //为判断下一位准备
}
/*字符的右半边*/
mask=0x80; //掩码,从bit7开始判断
buffer=ch[i*2+1]; //提取一行的第二个字节
for (j=0;j<8;j++)
{
if (buffer&mask)
{
PutPixel(x+j+8,y+i,color); //为笔画上色
}
else
{
PutPixel(x+j+8,y+i,backColor);//背景色
}
mask=mask>>1; //为判断下一位准备
}
}
}
/**************************************************************************
***** 函数名: Draw_ASCII(void)
***** 功能:绘制宽X高大小为8×16的字符
***** 参数: x:横坐标 y:纵坐标 color文字颜色
backColor 文字背景颜色 ch