韦东山一期视频学习笔记-LCD(mini2440_N35液晶)

硬件分析

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

LCD模块引脚

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第1张图片

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

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第2张图片

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

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

LCDCON2

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第3张图片

配置场时序

#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

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第4张图片

配置行时序

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

LCDCON4

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第5张图片

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

LCDCON5

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第6张图片

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第7张图片

#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

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第8张图片

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

LCDSADDR2

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第9张图片

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

LCDSADDR3

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第10张图片

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

LCDINTMSK

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第11张图片

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

TCONSEL

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第12张图片

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

TPAL

韦东山一期视频学习笔记-LCD(mini2440_N35液晶)_第13张图片

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

字符串显示函数

你可能感兴趣的:(c)