Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)相关的知识,希望对你有一定的参考价值。

Arduino UNO驱动合宙1.8"TFT SPI屏幕示例演示


  • 效果展示

驱动参考资料包

  • 来源于:http://www.lcdwiki.com/zh/1.8inch_Arduino_SPI_Module_ST7735S_SKU:MAR1801
  • 资料包中2种驱动方式:模拟SPI和硬件SPI驱动方式

1.8inch Arduino SPI Module ST7735S都是一样的驱动芯片,直接利用该资料中的代码轻松点亮合宙1.8"tff屏幕

http://www.lcdwiki.com/res/Program/Arduino_SPI/1.8inch/Arduino_SPI_ST7735S_MAR1801_V1.0/1.8inch_Arduino_SPI_Module_ST7735S_MAR1801_V1.0.zip

接线说明

/                       CS     DC   RST  SDA   CLK   VCC   GND    
//Arduino Mega2560&Uno  A5    A3    A4    A2    A1   3.3V    GND

驱动显示演示代码

模拟SPI驱动Demo不需要包含库直接编译。

#define CS   A5
#define RS   A3
#define RESET  A4
#define SDA  A2
#define SCK  A1
//LED 不用接
#define LED  A0   //if you don't need to control the LED pin,you should set it to -1 and set it to 3.3V

void Lcd_Writ_Bus(unsigned char d)

   uint8_t val = 0x80;
    while(val)
    
      if(d&val)
      
        digitalWrite(SDA,HIGH);
      
      else
      
        digitalWrite(SDA,LOW);
      
      digitalWrite(SCK,LOW);
      digitalWrite(SCK,HIGH);
      val >>= 1;
    


void Lcd_Write_Com(unsigned char VH)  
   
  *(portOutputRegister(digitalPinToPort(RS))) &=  ~digitalPinToBitMask(RS);//LCD_RS=0;
  Lcd_Writ_Bus(VH);


void Lcd_Write_Data(unsigned char VH)

  *(portOutputRegister(digitalPinToPort(RS)))|=  digitalPinToBitMask(RS);//LCD_RS=1;
  Lcd_Writ_Bus(VH);


void Lcd_Write_Com_Data(unsigned char com,unsigned char dat)

  Lcd_Write_Com(com);
  Lcd_Write_Data(dat);


void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)

  Lcd_Write_Com(0x2a);
	Lcd_Write_Data(x1>>8);
	Lcd_Write_Data(x1);
	Lcd_Write_Data(x2>>8);
	Lcd_Write_Data(x2);
  Lcd_Write_Com(0x2b);
	Lcd_Write_Data(y1>>8);
	Lcd_Write_Data(y1);
	Lcd_Write_Data(y2>>8);
	Lcd_Write_Data(y2);
	Lcd_Write_Com(0x2c); 							 


void Lcd_Init(void)

  digitalWrite(RESET,HIGH);
  delay(5); 
  digitalWrite(RESET,LOW);
  delay(15);
  digitalWrite(RESET,HIGH);
  delay(15);

  digitalWrite(CS,LOW);  //CS

    Lcd_Write_Com(0x11);
    delay(120);
    Lcd_Write_Com(0xB1);  
    Lcd_Write_Data(0x05); 
    Lcd_Write_Data(0x3C); 
    Lcd_Write_Data(0x3C); 
    Lcd_Write_Com(0xB2);  
    Lcd_Write_Data(0x05); 
    Lcd_Write_Data(0X3C); 
    Lcd_Write_Data(0X3C); 
    Lcd_Write_Com(0xB3);  
    Lcd_Write_Data(0x05); 
    Lcd_Write_Data(0x3C); 
    Lcd_Write_Data(0x3C); 
    Lcd_Write_Data(0x05);
    Lcd_Write_Data(0x3C);
    Lcd_Write_Data(0x3C);
    Lcd_Write_Com(0xB4); 
    Lcd_Write_Data(0x03);
    Lcd_Write_Com(0xC0);  
    Lcd_Write_Data(0x28); 
    Lcd_Write_Data(0x08);
    Lcd_Write_Data(0x04);   
    Lcd_Write_Com(0xC1);  
    Lcd_Write_Data(0xC0);
    Lcd_Write_Com(0xC2); 
    Lcd_Write_Data(0x0D); 
    Lcd_Write_Data(0X00); 
    Lcd_Write_Com(0xC3);  
    Lcd_Write_Data(0x8D); 
    Lcd_Write_Data(0x2A);    
    Lcd_Write_Com(0xC4);   
    Lcd_Write_Data(0x8D);   
    Lcd_Write_Data(0xEE); 
    Lcd_Write_Com(0xC5);   
    Lcd_Write_Data(0x1A); 
    Lcd_Write_Com(0x17);   
    Lcd_Write_Data(0x05);   
    Lcd_Write_Com(0x36);    
    Lcd_Write_Data(0xD8);  
    Lcd_Write_Com(0xE0);
    Lcd_Write_Data(0x03); 
    Lcd_Write_Data(0x22); 
    Lcd_Write_Data(0x07); 
    Lcd_Write_Data(0x0A); 
    Lcd_Write_Data(0x2E); 
    Lcd_Write_Data(0x30); 
    Lcd_Write_Data(0x25); 
    Lcd_Write_Data(0x2A); 
    Lcd_Write_Data(0x28); 
    Lcd_Write_Data(0x26); 
    Lcd_Write_Data(0x2E); 
    Lcd_Write_Data(0x3A); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x01); 
    Lcd_Write_Data(0x03);
    Lcd_Write_Data(0x13); 
    Lcd_Write_Com(0xE1);
    Lcd_Write_Data(0x04); 
    Lcd_Write_Data(0x16); 
    Lcd_Write_Data(0x06); 
    Lcd_Write_Data(0x0D); 
    Lcd_Write_Data(0x2D); 
    Lcd_Write_Data(0x26); 
    Lcd_Write_Data(0x23); 
    Lcd_Write_Data(0x27); 
    Lcd_Write_Data(0x27); 
    Lcd_Write_Data(0x25); 
    Lcd_Write_Data(0x2D); 
    Lcd_Write_Data(0x3B); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x01); 
    Lcd_Write_Data(0x04);
    Lcd_Write_Data(0x13); 
    Lcd_Write_Com(0x3A);    
    Lcd_Write_Data(0x05); 			
    Lcd_Write_Com(0x29); 
    digitalWrite(CS,HIGH);


void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
	
  unsigned int i,j;
  digitalWrite(CS,LOW);
  Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(RS,HIGH);
  l=l+x;
  Address_set(x,y,l,y);
  j=l*2;
  for(i=1;i<=j;i++)
  
    Lcd_Write_Data(c>>8);
    Lcd_Write_Data(c);
  
  digitalWrite(CS,HIGH);   


void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
	
  unsigned int i,j;
  digitalWrite(CS,LOW);
  Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(RS,HIGH);
  l=l+y;
  Address_set(x,y,x,l);
  j=l*2;
  for(i=1;i<=j;i++)
   
    Lcd_Write_Data(c>>8);
    Lcd_Write_Data(c);
  
  digitalWrite(CS,HIGH);   


void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)

  H_line(x  , y  , w, c);
  H_line(x  , y+h, w, c);
  V_line(x  , y  , h, c);
  V_line(x+w, y  , h, c);


void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)

  unsigned int i;
  for(i=0;i<h;i++)
  
    H_line(x  , y  , w, c);
    H_line(x  , y+i, w, c);
  


int RGB(int r,int g,int b)

  return r << 16 | g << 8 | b;


void LCD_Clear(unsigned int j)                   
	
  unsigned int i,m;
  digitalWrite(CS,LOW);
  Address_set(0,0,127,159);
  for(i=0;i<128;i++)
    for(m=0;m<160;m++)
    
      Lcd_Write_Data(j>>8);
      Lcd_Write_Data(j);
    
  digitalWrite(CS,HIGH);   


void setup()

  pinMode(A0,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(A4,OUTPUT);
  pinMode(A5,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);

  digitalWrite(A0, HIGH);
  digitalWrite(A3, HIGH);
  digitalWrite(A4, HIGH);
  digitalWrite(A5, HIGH);
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  
  Lcd_Init();
  


void loop()
  
   LCD_Clear(0xf800);
   LCD_Clear(0x07E0);
   LCD_Clear(0x001F);
   LCD_Clear(0x0); 
  for(int i=0;i<300;i++)
  
    Rect(random(127),random(159),random(127),random(159),random(65535)); // rectangle at x, y, with, hight, color
  
  
//  LCD_Clear(0xf800);


以上是关于Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)的主要内容,如果未能解决你的问题,请参考以下文章

Arduino框架下合宙ESP32C3 +1.8“TFT液晶屏通过TFT_eSPI库驱动显示

Arduino框架下合宙ESP32C3 +1.8“tft 网络时钟

Arduino框架下通过TFT_eSPI库驱动ESP32+合宙1.54“ 电子墨水屏(e-paper)显示

STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)

1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例

MicroPython ESP321.8“tft ST7735带中文驱动显示示例