/*本驱动适用于3线SPI驱动方式驱动ST7701驱动IC驱动的屏幕
3线为cs脚,scl脚,sda脚
根据时序要求,写命令或者数据时,一次需要下发9bit数据,先发1bit标记位d/c,表明发的是数据还是命令,0位命令,1位数据然后再高字节先发的方式,下发8bit数据
然后再高字节先发的方式,下发8bit数据
在sclk上升沿时取样,非上升沿时修改sda的值*/
#define mdelay(x) Delay1ms(x)
#define UDELAY(x) Delay1us(x)
#define SET_LSDA_LOW GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define SET_LSDA_HIGH GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define SET_LSCK_LOW GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define SET_LSCK_HIGH GPIO_SetBits(GPIOA, GPIO_Pin_5)
#define SET_LSCE_LOW GPIO_ResetBits(GPIOA, GPIO_Pin_4)
#define SET_LSCE_HIGH GPIO_SetBits(GPIOA, GPIO_Pin_4)
static void start_lcd(void)
{
SET_LSCE_LOW;
}
static void stop_lcd(void)
{
SET_LSCE_HIGH;
}
static void write_lcd_datas(unsigned int data,unsigned int len)
{
int i;
for(i=len-1;i>=0;i--)
{
SET_LSCK_LOW;
if(data & (1<<i))
SET_LSDA_HIGH;
else
SET_LSDA_LOW;
UDELAY(110);
SET_LSCK_HIGH;
UDELAY(110);
}
}
static void write_lcd_cmd(unsigned char cmd)
{
unsigned int x;
UDELAY(1);
x = 0x0000|cmd;
write_lcd_datas(x,9);
}
static void write_lcd_data(unsigned char data)
{
unsigned int x;
UDELAY(1);
x = 0x0100 | data;
write_lcd_datas(x,9);
}
void write_cmd(u8 cmd)
{
write_lcd_cmd(cmd);
}
void write_data(u8 data)
{
write_lcd_data(data);
}
void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO
u8 data;
u32 id;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
//3线SPI cs,scl,sda初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//复位脚初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//复位电平
GPIO_SetBits(GPIOB,GPIO_Pin_14);
mdelay(1);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
mdelay(10);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
mdelay(200);
start_lcd();//拉低cs脚
write_cmd(0xff);
write_data(0x77);
write_data(0x01);
write_data(0x00);
write_data(0x00);
write_data(0x11);
write_cmd(0xd1);
write_data(0x11);
write_cmd(0x11);//OUT SLEEP
mdelay(120);
write_cmd(0x3a);
// write_data(0x50);
write_data(0x70);
write_cmd(0xff);
write_data(0x77);
write_data(0x01);
write_data(0x00);
write_data(0x00);
write_data(0x10);
write_cmd(0xc0); //480*854//
write_data(0xe9);
write_data(0x03);
write_cmd(0xc1);
write_data(0x11);
write_data(0x02);
write_cmd(0xc2);//inversion selec
write_data(0x37);
write_data(0x08);
write_cmd(0xc3);//set RGB mode
write_data(0x00);//00 DE MODE 80 HV MODE
write_data(0x00);
write_data(0x00);
//*********GAMMA SET*******************
write_cmd(0xB0);
write_data(0x00);
write_data(0x0D);
write_data(0x14);
write_data(0x0D);
write_data(0x10);
write_data(0x05);
write_data(0x02);
write_data(0x08);
write_data(0x08);
write_data(0x1E);
write_data(0x05);
write_data(0x13);
write_data(0x11);
write_data(0xA3);
write_data(0x29);
write_data(0x18);
write_cmd(0xB1);
write_data(0x00);
write_data(0x0C);
write_data(0x14);
write_data(0x0C);
write_data(0x10);
write_data(0x05);
write_data(0x03);
write_data(0x08);
write_data(0x07);
write_data(0x20);
write_data(0x05);
write_data(0x13);
write_data(0x11);
write_data(0xA4);
write_data(0x29);
write_data(0x18);
///************POWRE SET*****************
write_cmd(0xff);
write_data(0x77);
write_data(0x01);
write_data(0x00);
write_data(0x00);
write_data(0x11);
write_cmd(0xb0);
write_data(0x6C);
write_cmd(0xb1); //VCOM
write_data(0x3C);
// write_data(0x48);
write_cmd(0xb2); //VGH
write_data(0x07);
write_cmd(0xb3);
write_data(0x80);
write_cmd(0xb5); //VGL
write_data(0x47);
write_cmd(0xb7);
write_data(0x8A);
write_cmd(0xb8); //avdd
write_data(0x20);
write_cmd(0xC1);
write_data(0x78);
write_cmd(0xC2);
write_data(0x78);
write_cmd(0xD0);
write_data(0x88);
mdelay(100);
//********GIP SET********************
write_cmd(0xff);
write_data(0x77);
write_data(0x01);
write_data(0x00);
write_data(0x00);
write_data(0x11);
write_cmd(0xE0);
write_data(0x00);
write_data(0x00);
write_data(0x02);
write_cmd(0xe1);
write_data(0x08);
write_data(0x00);
write_data(0x0A);
write_data(0x00);
write_data(0x07);
write_data(0x00);
write_data(0x09);
write_data(0x00);
write_data(0x00);
write_data(0x33);
write_data(0x33);
write_cmd(0xe2);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_cmd(0xe3);
write_data(0x00);
write_data(0x00);
write_data(0x33);
write_data(0x33);
write_cmd(0xe4);
write_data(0x44);
write_data(0x44);
write_cmd(0xe5);
write_data(0x0E);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x10);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x0A);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x0C);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_cmd(0xe6);
write_data(0x00);
write_data(0x00);
write_data(0x33);
write_data(0x33);
write_cmd(0xe7);
write_data(0x44);
write_data(0x44);
write_cmd(0xe8);
write_data(0x0D);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x0F);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x09);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_data(0x0B);
write_data(0x60);
write_data(0xA0);
write_data(0xA0);
write_cmd(0xeb);
write_data(0x02);
write_data(0x01);
write_data(0xE4);
write_data(0xE4);
write_data(0x44);
write_data(0x00);
write_data(0x40);
write_cmd(0xec);
write_data(0x02);
write_data(0x01);
write_cmd(0xed);
write_data(0xAB);
write_data(0x89);
write_data(0x76);
write_data(0x54);
write_data(0x01);
write_data(0xff);
write_data(0xff);
write_data(0xff);
write_data(0xff);
write_data(0xff);
write_data(0xff);
write_data(0x10);
write_data(0x45);
write_data(0x67);
write_data(0x98);
write_data(0xBA);
write_cmd(0xFF);
write_data(0x77);
write_data(0x01);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_cmd(0x36);
write_data(0x00); //10-180
write_cmd(0x29);
stop_lcd();//拉高cs脚
}
评论1