NOTE:首先确定自己需要什么样的LCD接口,有大致份分MCU和RGB两种,买LCM之前一定要说清避免买回来的不能用,还有一定要给LCM厂要模组资料以及IC资料和调试代码,节省自己的宝贵时间。
我因为使用的是s3c2440 CPU所以就选择了RGB接口的LCM。
拿到LCM后首先看其数据手册,按照数据手册画LCD的电路,一定要仔细看手册,按照手册将相应的无用引脚做接地或拉高处理。
连接完成后一定要仔细检查电气连通性,尤其FPC连通测试。
调试尽量先用熟悉的单片机将屏点亮。测试初始化代码以及屏的好坏。
1.初始化
任何一个LCD屏都是要初始化的,无论是MCU接口还是RGB接口。
对于RGB接口使用的是3线或4线的SPI串口初始化,对于MCU接口使用80或86接口初始化,具体需要根据芯片手册或屏的手册在引脚上做配置。
对于HX8369:
根据上面的说明配置引脚选择接口模式
我的配置是 1101即3线SPI 的RGB接口模式
配置完接口接下来就是调试初始化代码了,一下的代码是基于stm32的 //NOTE:一定要跟模组厂要对代码,大部分模组厂说我给你的代码没问题,但是呵呵了,注意代码中的延时
#include "lcd_botton.h"
#include "core_cm3.h"
#include "sysTick.h"
//*************************定义控制引脚的宏**********************************//
#define set_cs GPIO_SetBits(GPIOD, GPIO_Pin_9)
#define reset_cs GPIO_ResetBits(GPIOD, GPIO_Pin_9)
#define set_clk GPIO_SetBits(GPIOD, GPIO_Pin_1)
#define reset_clk GPIO_ResetBits( GPIOD, GPIO_Pin_1)
#define set_sdi GPIO_SetBits(GPIOD, GPIO_Pin_8)
#define reset_sdi GPIO_ResetBits( GPIOD, GPIO_Pin_8)
#define set_res GPIO_SetBits(GPIOD, GPIO_Pin_0)
#define reset_res GPIO_ResetBits(GPIOD, GPIO_Pin_0)
//*******控制引脚的初始化***********************//
void LCD_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能FSMC对应相应管脚时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);
set_cs;
set_res;
set_clk;
set_sdi;
}
//************复位lcd函数************//
void rest_lcd()
{
set_res;
Delay_us(10000);
reset_res;
Delay_us(10000);
set_res;
Delay_us(120000);
}
//***********发送命令函数*****************//
void send_cmd(uint8_t cmd)
{
unsigned char i;
reset_cs;
Delay_us(10);
reset_clk;
reset_sdi;
Delay_us(100);
set_clk;
Delay_us(100);
for(i=0;i<8;i++)
{
reset_clk;
if (cmd&0x80)
{
set_sdi;
}
else
{
reset_sdi;
}
Delay_us(100);
set_clk;
Delay_us(100);
cmd=cmd<<1;
}
set_cs;
Delay_us(10);
}
//**************发送数据函数**********************//
void send_date(uint8_t date)
{
unsigned char i;
reset_cs;
Delay_us(10);
reset_clk;
set_sdi;
Delay_us(100);
set_clk;
Delay_us(100);
for(i=0;i<8;i++)
{
reset_clk;
if (date&0x80)
{
set_sdi;
}
else
{
reset_sdi;
}
Delay_us(100);
set_clk;
Delay_us(100);
date=date<<1;
}
set_cs;
Delay_us(10);
}
//*************配置HX8369函数*****************//
void lcd_config()
{
rest_lcd(); //首先初始化
send_cmd(0xB9); // 设置扩展命令,按照芯片手册填入数据
send_date(0xFF);
send_date(0x83);
send_date(0x69);
send_cmd(0xB1); //设置电压 ,相关参数参照芯片手册设置
send_date(0x01);
send_date(0x00);
send_date(0x34);
send_date(0x06);
send_date(0x00);
send_date(0x11);
send_date(0x11);
send_date(0x2A); // VSPR regulator output control setting for source data output driving 根据需要调节这个
send_date(0x32); // VSNR regulator output control setting for source data output driving 根据需要调节这个
send_date(0x3F); // The positive polarity gamma amplitude voltage setting (VSPR-VGSP). 根据需要调节这个
send_date(0x3F); // The negitive polarity gamma amplitude voltage setting (VSNR-VGSN). 根据需要调节这个
send_date(0x07);
send_date(0x23);
send_date(0x01);
send_date(0xE6);
send_date(0xE6);
send_date(0xE6);
send_date(0xE6);
send_date(0xE6);
send_cmd(0xB2); // 设置显示参数480*800
send_date(0x00);
send_date(0x2B); //设置分辨率 接口模式根据需要设置
send_date(0x03);
send_date(0x03);
send_date(0x70);
send_date(0x00);
send_date(0xFF);
send_date(0x00);
send_date(0x00);
send_date(0x00);
send_date(0x00);
send_date(0x03);
send_date(0x03);
send_date(0x00);
send_date(0x01);
send_cmd(0xB4); // 设置显示波形 480*800
send_date(0x00); //00 列 05 1dot 0A 2dot 根据需要配置
send_date(0x0C);
send_date(0xA0);
send_date(0x0E);
send_date(0x06);
send_cmd(0xB6); // 设置VCOM 电压大小
send_date(0x10);
send_date(0x10);
send_cmd(0xD5); // This command is used for GIP timing output control. 对于RGB接口很重要
send_date(0x00);
send_date(0x05);
send_date(0x03);
send_date(0x00);
send_date(0x01);
send_date(0x09);
send_date(0x10);
send_date(0x80);
send_date(0x37);
send_date(0x37);
send_date(0x20);
send_date(0x31);
send_date(0x46);
send_date(0x8A);
send_date(0x57);
send_date(0x9B);
send_date(0x20);
send_date(0x31);
send_date(0x46);
send_date(0x8A);
send_date(0x57);
send_date(0x9B);
send_date(0x07);
send_date(0x0F);
send_date(0x02);
send_date(0x00);
send_cmd(0xE0); // Set gamma curve related setting 设置色调曲线的
send_date(0x00);
send_date(0x08);
send_date(0x0D);
send_date(0x2D);
send_date(0x34);
send_date(0x3F);
send_date(0x19);
send_date(0x38);
send_date(0x09);
send_date(0x0E);
send_date(0x0E);
send_date(0x12);
send_date(0x14);
send_date(0x12);
send_date(0x14);
send_date(0x13);
send_date(0x19);
send_date(0x00);
send_date(0x08);
send_date(0x0D);
send_date(0x2D);
send_date(0x34);
send_date(0x3F);
send_date(0x19);
send_date(0x38);
send_date(0x09);
send_date(0x0E);
send_date(0x0E);
send_date(0x12);
send_date(0x14);
send_date(0x12);
send_date(0x14);
send_date(0x13);
send_date(0x19);
Delay_us(50000);
send_cmd(0xC1); //设置调色板 一定要设置
send_date(0x01); //enable DGC function
send_date(0x02); //SET R-GAMMA
send_date(0x08);
send_date(0x12);
send_date(0x1A);
send_date(0x22);
send_date(0x2A);
send_date(0x31);
send_date(0x36);
send_date(0x3F);
send_date(0x48);
send_date(0x51);
send_date(0x58);
send_date(0x60);
send_date(0x68);
send_date(0x70);
send_date(0x78);
send_date(0x80);
send_date(0x88);
send_date(0x90);
send_date(0x98);
send_date(0xA0);
send_date(0xA7);
send_date(0xAF);
send_date(0xB6);
send_date(0xBE);
send_date(0xC7);
send_date(0xCE);
send_date(0xD6);
send_date(0xDE);
send_date(0xE6);
send_date(0xEF);
send_date(0xF5);
send_date(0xFB);
send_date(0xFC);
send_date(0xFE);
send_date(0x8C);
send_date(0xA4);
send_date(0x19);
send_date(0xEC);
send_date(0x1B);
send_date(0x4C);
send_date(0x40);
send_date(0x02); //SET G-Gamma
send_date(0x08);
send_date(0x12);
send_date(0x1A);
send_date(0x22);
send_date(0x2A);
send_date(0x31);
send_date(0x36);
send_date(0x3F);
send_date(0x48);
send_date(0x51);
send_date(0x58);
send_date(0x60);
send_date(0x68);
send_date(0x70);
send_date(0x78);
send_date(0x80);
send_date(0x88);
send_date(0x90);
send_date(0x98);
send_date(0xA0);
send_date(0xA7);
send_date(0xAF);
send_date(0xB6);
send_date(0xBE);
send_date(0xC7);
send_date(0xCE);
send_date(0xD6);
send_date(0xDE);
send_date(0xE6);
send_date(0xEF);
send_date(0xF5);
send_date(0xFB);
send_date(0xFC);
send_date(0xFE);
send_date(0x8C);
send_date(0xA4);
send_date(0x19);
send_date(0xEC);
send_date(0x1B);
send_date(0x4C);
send_date(0x40);
send_date(0x02); //SET B-Gamma
send_date(0x08);
send_date(0x12);
send_date(0x1A);
send_date(0x22);
send_date(0x2A);
send_date(0x31);
send_date(0x36);
send_date(0x3F);
send_date(0x48);
send_date(0x51);
send_date(0x58);
send_date(0x60);
send_date(0x68);
send_date(0x70);
send_date(0x78);
send_date(0x80);
send_date(0x88);
send_date(0x90);
send_date(0x98);
send_date(0xA0);
send_date(0xA7);
send_date(0xAF);
send_date(0xB6);
send_date(0xBE);
send_date(0xC7);
send_date(0xCE);
send_date(0xD6);
send_date(0xDE);