发 帖  
原厂入驻New
[问答] 关于ST7735R液晶屏 1.44TFT显示屏,这个初始化是一行一行的刷屏,有没有什么方法快速全屏刷
497 STM32
分享
#include "STM32f10x.h"
#include "Lcd_Driver.h"
#include "LCD_Config.h"
#include "delay.h"

//Òº¾§IO³õʼ»¯ÅäÖÃ
void LCD_GPIO_Init(void)
{

        GPIO_InitTypeDef  GPIO_InitStructure;

        //RCC_APB2PeriphclockCmd( RCC_APB2Periph_GPIOB ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_11| GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        //RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC ,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_8| GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
       
         //GPIO_InitTypeDef  GPIO_InitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);         //ʹÄÜPA,PD¶Ë¿ÚʱÖÓ
       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //LED0-->PA.8 ¶Ë¿ÚÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿ÚËÙ¶ÈΪ50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8);                                                 //PA.8 Êä³ö¸ß

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                             //LED1-->PD.2 ¶Ë¿ÚÅäÖÃ, ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿ÚËÙ¶ÈΪ50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure);                                           //ÍÆÍìÊä³ö £¬IO¿ÚËÙ¶ÈΪ50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                  //PD.2 Êä³ö¸ß
        //RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA ,ENABLE);
       
        //GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
        //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //GPIO_Init(GPIOA, &GPIO_InitStructure);
       

}
//ÏòSPI×ÜÏß´«ÊäÒ»¸ö8λÊý¾Ý
void  SPI_WriteData(u8 Data)
{
        unsigned char i=0;
        for(i=8;i>0;i--)
        {
                IF(Data&0x80)       
          LCD_SDA_SET; //Êä³öÊý¾Ý
      else LCD_SDA_CLR;
          
      LCD_SCL_CLR;      
      LCD_SCL_SET;
      Data<<=1;
        }
}

//ÏòÒº¾§ÆÁдһ¸ö8λָÁî
void Lcd_WriteIndex(u8 Index)
{
   //SPI дÃüÁîʱÐò¿ªÊ¼
   LCD_CS_CLR;
   LCD_RS_CLR;
         SPI_WriteData(Index);
   LCD_CS_SET;
}

//ÏòÒº¾§ÆÁдһ¸ö8λÊý¾Ý
void Lcd_WriteData(u8 Data)
{
   LCD_CS_CLR;
   LCD_RS_SET;
   SPI_WriteData(Data);
   LCD_CS_SET;
}
//ÏòÒº¾§ÆÁдһ¸ö16λÊý¾Ý
void LCD_WriteData_16Bit(u16 Data)
{
   LCD_CS_CLR;
   LCD_RS_SET;
         SPI_WriteData(Data>>8);         //дÈë¸ß8λÊý¾Ý
         SPI_WriteData(Data);                         //дÈëµÍ8λÊý¾Ý
   LCD_CS_SET;
}

void Lcd_WriteReg(u8 Index,u8 Data)
{
        Lcd_WriteIndex(Index);
  Lcd_WriteData(Data);
}

void Lcd_Reset(void)
{
        LCD_RST_CLR;
        delay_ms(1);
        LCD_RST_SET;
        delay_ms(5);
}

//LCD Init For 1.44Inch LCD Panel with ST7735R.
void Lcd_Init(void)
{       
        LCD_GPIO_Init();
        Lcd_Reset(); //Reset before LCD Init.

        //LCD Init For 1.44Inch LCD Panel with ST7735R.
        Lcd_WriteIndex(0x11);//Sleep exit
        delay_ms (1);
               
        //ST7735R Frame Rate
        Lcd_WriteIndex(0xB1);
        Lcd_WriteData(0x01);
        Lcd_WriteData(0x2C);
        Lcd_WriteData(0x2D);

        Lcd_WriteIndex(0xB2);
        Lcd_WriteData(0x01);
        Lcd_WriteData(0x2C);
        Lcd_WriteData(0x2D);

        Lcd_WriteIndex(0xB3);
        Lcd_WriteData(0x01);
        Lcd_WriteData(0x2C);
        Lcd_WriteData(0x2D);
        Lcd_WriteData(0x01);
        Lcd_WriteData(0x2C);
        Lcd_WriteData(0x2D);
       
       
        Lcd_WriteIndex(0xB4); //Column inversion
        Lcd_WriteData(0x07);











       
        //ST7735R Power Sequence
        Lcd_WriteIndex(0xC0);
        Lcd_WriteData(0xA2);
        Lcd_WriteData(0x02);
        Lcd_WriteData(0x84);
        Lcd_WriteIndex(0xC1);
        Lcd_WriteData(0xC5);

        Lcd_WriteIndex(0xC2);
        Lcd_WriteData(0x0A);
        Lcd_WriteData(0x00);

        Lcd_WriteIndex(0xC3);
        Lcd_WriteData(0x8A);
        Lcd_WriteData(0x2A);
        Lcd_WriteIndex(0xC4);
        Lcd_WriteData(0x8A);
        Lcd_WriteData(0xEE);
       
        Lcd_WriteIndex(0xC5); //VCOM
        Lcd_WriteData(0x0E);
       
        Lcd_WriteIndex(0x36); //MX, MY, RGB mode
        Lcd_WriteData(0x68);  //¼áÆÁC8 ºáÆÁA8£¬·´×ª08    ºá·´×ª68
       

       
       
       
       
       
       
        //ST7735R Gamma Sequence
        Lcd_WriteIndex(0xe0);
        Lcd_WriteData(0x0f);
        Lcd_WriteData(0x1a);
        Lcd_WriteData(0x0f);
        Lcd_WriteData(0x18);
        Lcd_WriteData(0x2f);
        Lcd_WriteData(0x28);
        Lcd_WriteData(0x20);
        Lcd_WriteData(0x22);
        Lcd_WriteData(0x1f);
        Lcd_WriteData(0x1b);
        Lcd_WriteData(0x23);
        Lcd_WriteData(0x37);
        Lcd_WriteData(0x00);        
        Lcd_WriteData(0x07);
        Lcd_WriteData(0x02);
        Lcd_WriteData(0x10);

        Lcd_WriteIndex(0xe1);
        Lcd_WriteData(0x0f);
        Lcd_WriteData(0x1b);
        Lcd_WriteData(0x0f);
        Lcd_WriteData(0x17);
        Lcd_WriteData(0x33);
        Lcd_WriteData(0x2c);
        Lcd_WriteData(0x29);
        Lcd_WriteData(0x2e);
        Lcd_WriteData(0x30);
        Lcd_WriteData(0x30);
        Lcd_WriteData(0x39);
        Lcd_WriteData(0x3f);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x07);
        Lcd_WriteData(0x03);
        Lcd_WriteData(0x10);  
       
        Lcd_WriteIndex(0x2a);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x7f);

        Lcd_WriteIndex(0x2b);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x00);
        Lcd_WriteData(0x9f);
       
        Lcd_WriteIndex(0xF0); //Enable test command  
        Lcd_WriteData(0x01);
        Lcd_WriteIndex(0xF6); //Disable ram power save mode
        Lcd_WriteData(0x00);
       
        Lcd_WriteIndex(0x3A); //65k mode
        Lcd_WriteData(0x05);
       
       
        Lcd_WriteIndex(0x29);//display on         
}


/*************************************************
º¯ÊýÃû£ºLCD_Set_Region
¹¦ÄÜ£ºÉèÖÃlcdÏÔʾÇøÓò£¬ÔÚ´ËÇøÓòдµãÊý¾Ý×Ô¶¯»»ÐÐ
Èë¿Ú²ÎÊý£ºxyÆðµãºÍÖÕµã
·µ»ØÖµ£ºÎÞ
*************************************************/
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{               
        Lcd_WriteIndex(0x2a);
        Lcd_WriteData(0x00);
        Lcd_WriteData(x_start+2);
        Lcd_WriteData(0x00);
        Lcd_WriteData(x_end+2);

        Lcd_WriteIndex(0x2b);
        Lcd_WriteData(0x00);
        Lcd_WriteData(y_start+1);
        Lcd_WriteData(0x00);
        Lcd_WriteData(y_end+1);
       
        Lcd_WriteIndex(0x2C);

}

/*************************************************
º¯ÊýÃû£ºLCD_Set_XY
¹¦ÄÜ£ºÉèÖÃlcdÏÔʾÆðʼµã
Èë¿Ú²ÎÊý£ºxy×ø±ê
·µ»ØÖµ£ºÎÞ
*************************************************/
void Lcd_SetXY(u16 x,u16 y)
{
          Lcd_SetRegion(x,y,x,y);
}

       
/*************************************************
º¯ÊýÃû£ºLCD_DrawPoint
¹¦ÄÜ£º»­Ò»¸öµã
Èë¿Ú²ÎÊý£ºÎÞ
·µ»ØÖµ£ºÎÞ
*************************************************/
void Gui_DrawPoint(u16 x,u16 y,u16 Data)
{
        Lcd_SetRegion(x,y,x+1,y+1);
        LCD_WriteData_16Bit(Data);

}   

/*****************************************
º¯Êý¹¦ÄÜ£º¶ÁTFTijһµãµÄÑÕÉ«                          
³ö¿Ú²ÎÊý£ºcolor  µãÑÕÉ«Öµ                                 
******************************************/
unsigned int Lcd_ReadPoint(u16 x,u16 y)
{
  unsigned int Data;
  Lcd_SetXY(x,y);

  //Lcd_ReadData();//¶ªµôÎÞÓÃ×Ö½Ú
  //Data=Lcd_ReadData();
  Lcd_WriteData(Data);
  return Data;
}
/*************************************************
º¯ÊýÃû£ºLcd_Clear
¹¦ÄÜ£ºÈ«ÆÁÇåÆÁº¯Êý
Èë¿Ú²ÎÊý£ºÌî³äÑÕÉ«COLOR
·µ»ØÖµ£ºÎÞ
*************************************************/
void Lcd_Clear(u16 Color)               
{       
   unsigned int i,m;
   Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
   Lcd_WriteIndex(0x2C);
   for(i=0;i<X_MAX_PIXEL;i++)
    for(m=0;m<Y_MAX_PIXEL;m++)
    {       
                  LCD_WriteData_16Bit(Color);
    }   
}


0
2020-7-2 16:39:42   评论 分享淘帖 邀请回答
1个回答
没有清屏命令的话,就只能加快数据传输的速度了
2020-7-2 18:02:57 1 评论

举报

1 条评论

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表