硬件分析

这里使用的是mini2440开发板N35_TFT液晶屏。

LCD模块引脚

clipboard.png

开发板引脚如下
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

clipboard.png

VCLK配置为10MHZ,TFT面板,16位颜色模式,关输出

#define CLKVAL                (4)
LCDCON1=(CLKVAL<<8)|(1<<7)|(3<<5)|(12<<1)|0;
LCDCON2

clipboard.png

配置场时序

#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

clipboard.png

配置行时序

#define HBPD                    (36)
#define HFPD                    (19)
#define HSPW                    (5)
LCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
LCDCON4

clipboard.png

#define MVAL        (13)
#define HSPW                    (5)
LCDCON4=(MVAL<<8)|(HSPW);
LCDCON5

clipboard.png

clipboard.png

#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

clipboard.png

LCDSADDR1=(((unsigned int)LCD_BUFFER>>22)<<21)|M5D((unsigned int)LCD_BUFFER>>1);
LCDSADDR2

clipboard.png

LCDSADDR2=M5D( ((unsigned int)LCD_BUFFER+(SCR_XSIZE*LCD_YSIZE*2))>>1 );
LCDSADDR3

clipboard.png

LCDSADDR3=(((SCR_XSIZE-LCD_XSIZE)/1)<<11)|(LCD_XSIZE/1);
LCDINTMSK

clipboard.png

LCDINTMSK|=(3); // MASK LCD Sub Interrupt
TCONSEL

clipboard.png

TCONSEL&=~((1<<4)|1); // Disable LCC3600, LPC3600
TPAL

clipboard.png

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++;
    }
}

字符串显示函数


Kyseng
1 声望3 粉丝

电子爱好者一枚,利用工作空余时间记录一下学习过程