YD-RP2040@250MHZ,1.8TFT刷到每秒34帧,有高人老师指导一下怎么进一步提高。

YD-RP2040@250MHZ,1.8TFT刷到每秒34帧,有高人老师指导一下怎么进一步提高。

#include <SPI.h>
#include "Bitmaps.h"
#define TFT_DC 4
#define TFT_RST 5

#define WHITE         	 0xFFFF
#define BLACK         	 0x0000	  
#define BLUE           	 0x001F  
#define BRED             0XF81F
#define GRED 			       0XFFE0
#define GBLUE			       0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			     0XBC40 //棕色
#define BRRED 			     0XFC07 //棕红色
#define GRAY  			     0X8430 //灰色
#define DARKBLUE      	 0X01CF	//深蓝色
#define LIGHTBLUE      	 0X7D7C	//浅蓝色  
#define GRAYBLUE       	 0X5458 //灰蓝色
#define LIGHTGREEN     	 0X841F //浅绿色
#define LGRAY 			     0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)
#define TFT_WIDTH 128
#define TFT_HIGHT 160

uint8_t TFT_GRAM[TFT_WIDTH*TFT_HIGHT*2]={0};
uint16_t TFT_GRAM_16[TFT_WIDTH*TFT_HIGHT]={0};

SPISettings spisettings(160000000, MSBFIRST, SPI_MODE0);

void Reset(void)
{
  digitalWrite(TFT_RST, 0);
  delay(100);
  digitalWrite(TFT_RST, 1);
  delay(100);
}

void Lcd_WriteIndex(uint8_t Cmd)
{
  SPI.beginTransaction(spisettings);
  
  digitalWrite(TFT_DC, 0);
  SPI.transfer(Cmd);
  
 
  SPI.endTransaction();
}



void Lcd_WriteData(uint8_t Data)
{
  SPI.beginTransaction(spisettings);
  
  
  digitalWrite(TFT_DC, 1);
  SPI.transfer(Data);
//  SPI_WriteData(Data);

  SPI.endTransaction();
}

void  Lcd_WriteData_16(uint16_t Data){
  SPI.beginTransaction(spisettings);
  
  
  digitalWrite(TFT_DC, 1);
 // SPI_WriteData(Data>>8);
//  SPI_WriteData(Data);
  SPI.transfer16(Data);

  SPI.endTransaction();
}

void Lcd_Initial(){
  Reset();//Reset before LCD Init.
		
	//LCD Init For 1.44Inch LCD Panel with ST7735R.
	Lcd_WriteIndex(0x11);//Sleep exit 
	delay (120);
		
	//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(0xC0); 
	Lcd_WriteData(0xC8);
	//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+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(0x80+2);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(0x00+3);
	Lcd_WriteData(0x00);
	Lcd_WriteData(0x80+3);
	
	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
}

void Lcd_SetRegion(unsigned int x_start,unsigned int y_start,unsigned int x_end,unsigned int y_end)
{		
	Lcd_WriteIndex(0x2a);
  SPI.beginTransaction(spisettings);
  digitalWrite(TFT_DC, 1);
	SPI.transfer(0x02);
	SPI.transfer(x_start);
	SPI.transfer(0x02);
	SPI.transfer(x_end);
  SPI.endTransaction();


	Lcd_WriteIndex(0x2b);
  SPI.beginTransaction(spisettings);
  digitalWrite(TFT_DC, 1);
	SPI.transfer(0x01);
	SPI.transfer(y_start);
	SPI.transfer(0x01);
	SPI.transfer(y_end);
	SPI.endTransaction();
	Lcd_WriteIndex(0x2c);

}
void LCD_Refresh_16(){
  digitalWrite(TFT_DC, 1);
	for (int i=0;i<TFT_WIDTH*TFT_HIGHT;i++)
	{
    
 //       	vspi.transfer(TFT_GRAM[i]>>8);
    SPI.transfer16(TFT_GRAM_16[i]);
    
	}
}
void LCD_Refresh()
{
	int i,j;
	
  //SPI.beginTransaction(spisettings);
  
  digitalWrite(TFT_DC, 1);
	for (i=0;i<TFT_WIDTH*TFT_HIGHT*2;i++)
	{
    
 //       	vspi.transfer(TFT_GRAM[i]>>8);
          SPI.transfer(TFT_GRAM[i]);
    
	}
  //SPI.endTransaction();
}

void Draw_Bmp(int x,int y,int w,int h,uint8_t *bmp){
 
  
  int k,i,j;
  k=0;
  
  for(j=0;j<h;j++)
  {
    for(i=0;i<w*2;i++){
      
      TFT_GRAM[2*x+i+(j+y)*256]=bmp[k];
     k++;
    }
   
  }
 
}
void Draw_Bmp_16(int x,int y,int w,int h,uint16_t *bmp){
  int i,j,k;
  k=0;
  for(j=0;j<h;j++){
    for(i=0;i<w;i++){
      TFT_GRAM_16[x+i+(j+y)*128]=bmp[k];
      k++;
    }
  }
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.print(F("Hello! ST77xx TFT Test"));

  pinMode(TFT_DC, OUTPUT);
  pinMode(TFT_RST, OUTPUT);

  SPI.setRX(0);
  SPI.setCS(1);
  SPI.setSCK(2);
  SPI.setTX(3);
  SPI.begin(true);

  Lcd_Initial();
  Lcd_SetRegion(0,0,TFT_WIDTH-1,TFT_HIGHT-1);
  for(int i=0;i<TFT_WIDTH*TFT_HIGHT;i++){
      TFT_GRAM_16[i]=BLUE;
    // TFT_GRAM[i*2]=RED>>8;
    // TFT_GRAM[i*2+1]=RED;
    
  }
  Serial.println(F("Initialized"));
}

void loop() {
  // put your main code here, to run repeatedly:
  uint16_t time = millis();
  
  // Draw_Bmp(10,0,106,160,bmptest);
  // LCD_Refresh();
  Draw_Bmp_16(10,0,106,160,bmp16);	
  LCD_Refresh_16();
  time = millis() - time;

  char buf[32];
  sprintf(buf,"TIME: %d  FPS: %d",time,1000/time);
  Serial.println(buf);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值