硬件分析
这里使用的是mini2440
开发板N35_TFT
液晶屏。
LCD模块引脚
开发板引脚如下
LCD信号 | 对应引脚 |
---|---|
LCD_PWR | GPG4 |
VCLK | GPC1 |
VLINE | GPC2 |
VFRAME | GPC3 |
VM | GPC4 |
VD0 | GPC8 |
VD1 | GPC9 |
VD2 | GPC10 |
VD3 | GPC11 |
VD4 | GPC12 |
VD5 | GPC13 |
VD6 | GPC14 |
VD7 | GPC15 |
VD8 | GPD0 |
VD9 | GPD1 |
VD10 | GPD2 |
VD11 | GPD3 |
VD12 | GPD4 |
VD13 | GPD5 |
VD14 | GPD6 |
VD15 | GPD7 |
VD16 | GPD8 |
VD17 | GPD9 |
VD18 | GPD10 |
VD19 | GPD11 |
VD20 | GPD12 |
VD21 | GPD13 |
VD22 | GPD14 |
VD23 | GPD15 |
寄存器配置
LCDCON1
VCLK
配置为10MHZ
,TFT面板,16位颜色模式,关输出
#define CLKVAL (4)
LCDCON1=(CLKVAL<<8)|(1<<7)|(3<<5)|(12<<1)|0;
LCDCON2
配置场时序
#define LCD_YSIZE (320)
#define LINEVAL (LCD_YSIZE-1)
#define VBPD (1)
#define VFPD (5)
#define VSPW (1)
LCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
LCDCON3
配置行时序
#define HBPD (36)
#define HFPD (19)
#define HSPW (5)
LCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
LCDCON4
#define MVAL (13)
#define HSPW (5)
LCDCON4=(MVAL<<8)|(HSPW);
LCDCON5
#define BSWP (0) //Byte swap control
#define HWSWP (1) //Half word swap control
LCDCON5 = (1<<11) | (1<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6)
| (1<<3) |(BSWP<<1) | (HWSWP);
LCDSADDR1
LCDSADDR1=(((unsigned int)LCD_BUFFER>>22)<<21)|M5D((unsigned int)LCD_BUFFER>>1);
LCDSADDR2
LCDSADDR2=M5D( ((unsigned int)LCD_BUFFER+(SCR_XSIZE*LCD_YSIZE*2))>>1 );
LCDSADDR3
LCDSADDR3=(((SCR_XSIZE-LCD_XSIZE)/1)<<11)|(LCD_XSIZE/1);
LCDINTMSK
LCDINTMSK|=(3); // MASK LCD Sub Interrupt
TCONSEL
TCONSEL&=~((1<<4)|1); // Disable LCC3600, LPC3600
TPAL
TPAL=0; // Disable Temp Palette
RGB565常用颜色
#define BLACK 0x0000//黑色 0, 0, 0
#define NAVY 0x000F//深蓝色 0, 0, 127
#define DGREEN 0x03E0//深绿色 0, 127, 0
#define DCYAN 0x03EF//深青色 0, 127, 127
#define MAROON 0x7800//深红色 127, 0, 0
#define PURPLE 0x780F//紫色 127, 0, 127
#define OLIVE 0x7BE0//橄榄绿 127, 127, 0
#define LGRAY 0xC618//灰白色 192, 192, 192
#define DGRAY 0x7BEF//深灰色 127, 127, 127
#define BLUE 0x001F//蓝色 0, 0, 255
#define GREEN 0x07E0//绿色 0, 255, 0
#define CYAN 0x07FF//青色 0, 255, 255
#define RED 0xF800//红色 255, 0, 0
#define MAGENTA 0xF81F//品红 255, 0, 255
#define YELLOW 0xFFE0//黄色 255, 255, 0
#define WHITE 0xFFFF//白色 255, 255, 255
画点函数
void TFT_Draw_Pixel(int x, int y, unsigned short color){
LCD_BUFFER[y][x] = color;
}
文字显示函数
从内核复制8x16
字体文件,横向8
位纵向16
位,1
显示0
不显示,ASCII
码进行索引
读取点阵数据,因为每个字符占据16字节所以需要乘以16,让dots
指向当前需要显示字符的第一个点阵数据地址
unsigned char *dots = &fontdata_8x16[c * 16];
8x16字符显示代码
void TFT_Draw_8x16_Char(int x, int y, char c, unsigned short color){
int i, j;
unsigned char *dots = &fontdata_8x16[c * 16];
unsigned char data;
int x_tmp;
for(i=0; i<16; i++){
data = *(dots + i);
x_tmp = x;
for(j=0; j<8; j++){
if((data >> (7-j)) & 0x01){
LCD_BUFFER[y][x_tmp++] = color;
}else{
LCD_BUFFER[y][x_tmp++] = BG_COLOR;
}
}
y++;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。