遇到的问题:目前屏幕只有背光亮,并没有画面什么的,只有偶然一次,它有一次出现花屏,之后就又没动静了,望大家帮助,谢谢。
void TFT_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_SPI1,ENABLE);
GPIO_InitTypeDef GPIO_Struct;
GPIO_Struct.GPIO_MaxSpeed=GPIO_MaxSpeed_10MHz;
GPIO_Struct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Struct.GPIO_Pins=GPIO_Pins_3|GPIO_Pins_5;
GPIO_Init(GPIOB,&GPIO_Struct);
GPIO_WriteBit(GPIOB,GPIO_Pins_3,Bit_SET);
GPIO_WriteBit(GPIOB,GPIO_Pins_5,Bit_SET);
pinMode(PB6,OUTPUT);//复位
pinMode(PB7,OUTPUT);//dc脚
pinMode(PB8,OUTPUT);//BLK脚
digitalWrite_HIGH(PB6);
digitalWrite_HIGH(PB7);
digitalWrite_HIGH(PB8);
GPIO_PinsRemapConfig(GPIO_Remap01_SPI1,ENABLE);
GPIO_PinsRemapConfig(AFIO_MAP7_SWJTAG_0010,ENABLE);
SPI_InitType SPI_Struct;
SPI_DefaultInitParaConfig(&SPI_Struct);
SPI_Struct.SPI_Mode=SPI_MODE_MASTER;
SPI_Struct.SPI_NSSSEL=SPI_NSSSEL_SOFT;
SPI_Struct.SPI_FirstBit=SPI_FIRSTBIT_MSB;
SPI_Struct.SPI_FrameSize=SPI_FRAMESIZE_8BIT;
SPI_Struct.SPI_MCLKP=SPI_MCLKP_8;
SPI_Struct.SPI_TransMode=SPI_TRANSMODE_FULLDUPLEX;
SPI_Struct.SPI_CPHA=SPI_CPHA_2EDGE;//MODE3
SPI_Struct.SPI_CPOL=SPI_CPOL_HIGH;
SPI_Struct.SPI_CPOLY=0;
SPI_Init(SPI1,&SPI_Struct);
SPI_Enable(SPI1,ENABLE);
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA8(u8 dat)
{
SPI_I2S_TxData(SPI1,dat);
// while (!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TE)){}
// while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BUSY)){}
//加了这两句和没加效果一样(屏幕没有动静)
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA(u16 dat)
{
digitalWrite_HIGH(PB7);
LCD_WR_DATA8(dat>>8);
LCD_WR_DATA8(dat);
}
/******************************************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值: 无
******************************************************************************/
void LCD_WR_REG(u8 dat)
{
digitalWrite_LOW(PB7);
LCD_WR_DATA8(dat);
digitalWrite_HIGH(PB7);
}
#define USE_HORIZONTAL 0
/******************************************************************************
函数说明:设置起始和结束地址
入口数据:x1,x2 设置列的起始和结束地址
y1,y2 设置行的起始和结束地址
返回值: 无
******************************************************************************/
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
if(USE_HORIZONTAL==0)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1);
LCD_WR_DATA(x2);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1);
LCD_WR_DATA(y2);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==1)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1);
LCD_WR_DATA(x2);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1+80);
LCD_WR_DATA(y2+80);
LCD_WR_REG(0x2c);//储存器写
}
else if(USE_HORIZONTAL==2)
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1);
LCD_WR_DATA(x2);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1);
LCD_WR_DATA(y2);
LCD_WR_REG(0x2c);//储存器写
}
else
{
LCD_WR_REG(0x2a);//列地址设置
LCD_WR_DATA(x1+80);
LCD_WR_DATA(x2+80);
LCD_WR_REG(0x2b);//行地址设置
LCD_WR_DATA(y1);
LCD_WR_DATA(y2);
LCD_WR_REG(0x2c);//储存器写
}
}
void LCD_Init(void)
{
TFT_Init();
digitalWrite_LOW(PB6);
delay_ms(200);
digitalWrite_HIGH(PB6);
delay_ms(200);
digitalWrite_HIGH(PB8);
delay_ms(100);
LCD_WR_REG(0x11);
delay_ms(120);
LCD_WR_REG(0x36); //设置内存扫描方向,0X00正常扫描,从上往下,从左往右,RGB方式
if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
else LCD_WR_DATA8(0xA0);
LCD_WR_REG(0x3A); //数据格式,65K色,565
LCD_WR_DATA8(0x05);
LCD_WR_REG(0xB2); //帧频设置
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x33);
LCD_WR_DATA8(0x33);
LCD_WR_REG(0xB7); //GATE 设置
LCD_WR_DATA8(0x35);
LCD_WR_REG(0xBB); //VCOM设置
LCD_WR_DATA8(0x19);
LCD_WR_REG(0xC0); //LCM设置,默认0x2c
LCD_WR_DATA8(0x2C);
LCD_WR_REG(0xC2); //VDV&VRH SET ,默认0x01
LCD_WR_DATA8(0x01);
LCD_WR_REG(0xC3); //VRHS SET,默认0x0b
LCD_WR_DATA8(0x12); //此处根据实际情况修正
LCD_WR_REG(0xC4); //VDV SET,默认0x20
LCD_WR_DATA8(0x20);
LCD_WR_REG(0xC6); // FR SET, 默认0x0F
LCD_WR_DATA8(0x0F);
LCD_WR_REG(0xD0); //电源控制1
LCD_WR_DATA8(0xA4); //该参数不变
LCD_WR_DATA8(0xA1); //此处根据实际情况修改
LCD_WR_REG(0xE0); //正极性GAMMA调整
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2B);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x54);
LCD_WR_DATA8(0x4C);
LCD_WR_DATA8(0x18);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x23);
LCD_WR_REG(0xE1); //负极性GAMMA调整
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2C);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x44);
LCD_WR_DATA8(0x51);
LCD_WR_DATA8(0x2F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x20);
LCD_WR_DATA8(0x23);
LCD_WR_REG(0x21); //反显开,默认是0X20,正常模式
LCD_WR_REG(0x29); //显示开,等待MCU数传送
}
|