学前班
最后登录1970-1-1
在线时间 小时
注册时间2015-10-27
|
发表于 2019-9-5 11:36:26
|
显示全部楼层
可以在显示命令之前,手工进行全屏清屏操作,可以避免初始化花屏现象。 自己部分代码SPI控制的 分辨率为320*240 横屏显示
/******************************************************************************
函数说明:LCD初始化函数
入口数据:无
返回值: 无
******************************************************************************/
void ST7789Lcd_Init(void)
{
ST7789_GPIO_Config();
SPI3_Init();
SPI3_SetSpeed(SPI_BaudRatePrescaler_2);
SPI3_ReadWriteByte(0xff);
OLED_RST_Set();
delay_ms(20);
OLED_RST_Clr();
delay_ms(20);
OLED_RST_Set();
delay_ms(120);
//************************************************
ST7789_WR_REG(0x3A); //65k mode
ST7789_WR_DATA(0x05);
ST7789_WR_REG(0xC5); //VCOM
ST7789_WR_DATA(0x1A);
ST7789_WR_REG(0x36); // 屏幕显示方向设置
ST7789_WR_DATA(0xA0);
//-------------ST7789V Frame rate setting-----------//
ST7789_WR_REG(0xb2);
ST7789_WR_DATA(0x05);
ST7789_WR_DATA(0x05);
ST7789_WR_DATA(0x00);
ST7789_WR_DATA(0x33);
ST7789_WR_DATA(0x33);
ST7789_WR_REG(0xb7);
ST7789_WR_DATA(0x35);
//--------------ST7789V Power setting---------------//
ST7789_WR_REG(0xBB);//VCOM
ST7789_WR_DATA(0x3F);
ST7789_WR_REG(0xC0); //Power control
ST7789_WR_DATA(0x2c);
ST7789_WR_REG(0xC2);
ST7789_WR_DATA(0x01);
ST7789_WR_REG(0xC3);
ST7789_WR_DATA(0x0F);//0D gvdd
ST7789_WR_REG(0xC4);
ST7789_WR_DATA(0x20);
ST7789_WR_REG(0xC6);
ST7789_WR_DATA(0X11);//0x0F
ST7789_WR_REG(0xd0);
ST7789_WR_DATA(0xa4);
ST7789_WR_DATA(0xa1);
ST7789_WR_REG(0xE8);
ST7789_WR_DATA(0x03);
ST7789_WR_REG(0xE9);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x08);
//---------------ST7789V gamma setting-------------//
ST7789_WR_REG(0xE0); //Set Gamma
ST7789_WR_DATA(0xD0);
ST7789_WR_DATA(0x05);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x08);
ST7789_WR_DATA(0x14);
ST7789_WR_DATA(0x28);
ST7789_WR_DATA(0x33);
ST7789_WR_DATA(0x3F);
ST7789_WR_DATA(0x07);
ST7789_WR_DATA(0x13);
ST7789_WR_DATA(0x14);
ST7789_WR_DATA(0x28);
ST7789_WR_DATA(0x30);
ST7789_WR_REG(0XE1); //Set Gamma
ST7789_WR_DATA(0xD0);
ST7789_WR_DATA(0x05);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x09);
ST7789_WR_DATA(0x08);
ST7789_WR_DATA(0x03);
ST7789_WR_DATA(0x24);
ST7789_WR_DATA(0x32);
ST7789_WR_DATA(0x32);
ST7789_WR_DATA(0x3B);
ST7789_WR_DATA(0x14);
ST7789_WR_DATA(0x13);
ST7789_WR_DATA(0x28);
ST7789_WR_DATA(0x2F);
ST7789_WR_REG(0x21); //反显
ST7789_WR_REG(0x11);
delay_ms(120); //Delay 120ms
LCD_Clear(BLACK); /*先手动清屏再显示,防止花屏显示*/
ST7789_WR_REG(0x29); //开启显示
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void ST7789_WR_DATA(u8 dat)
{
OLED_CS_Clr();
OLED_DC_Set();//写数据
SPI3_ReadWriteByte(dat);
OLED_CS_Set();
}
void ST7789_WR_MDATA(u16 dat)
{
OLED_CS_Clr();
OLED_DC_Set();//写数据
SPI3_ReadWriteByte(dat>>8);
SPI3_ReadWriteByte(dat);
OLED_CS_Set();
}
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2)
{
ST7789_WR_REG(0x2a);//列地址设置
ST7789_WR_MDATA(x1);
ST7789_WR_MDATA(x2);
ST7789_WR_REG(0x2b);//行地址设置
ST7789_WR_MDATA(y1);
ST7789_WR_MDATA(y2);
ST7789_WR_REG(0x2c);//储存器写
}
void LCD_Clear(u16 Color)
{
u16 i,j;
LCD_Address_Set(0,0,320,240);
for(i=0;i<240;i++)
{
for (j=0;j<320;j++)
{
ST7789_WR_MDATA(Color);
}
}
} |
|