合宙Air101 的LCD和按键怎么用Arudino IDE驱动

屏幕怎么驱动

有个官方的资料,可以了解到是ST7735,屏幕的分辨率

https://doc.openluat.com/wiki/21?wiki_page_id=2672

 

有个库但是这个库是LuatOS的,所以我这边没啥用

https://gitee.com/openLuat/LuatOS/tree/master/demo/lvgl/Air101

想要驱动,需要安装一个库,下载后放在Arduino的Library文件夹下面

https://github.com/adafruit/Adafruit-ST7735-Library

但是选择会出现这个情况,找不到文件 fatal error: Adafruit_SPITFT.h: No such file or directory

原因是Arduino IDE自带的这个Adafruit-GFX-Library库不完整,缺少很多文件,所以,我们要完整的库文件

GitHub - adafruit/Adafruit-GFX-Library: Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from

下载并覆盖文件夹中的库

然后就可以正常的编译了

试一下DEMO代码

#include <Adafruit_GFX.h>  

#include <Adafruit_ST7735.h>


#define TFT_SCLK 2  //SCL

#define TFT_MOSI 3  //SDA

#define TFT_RST  10 //RES 

#define TFT_DC   6  //DC

#define TFT_CS   7  //CS

  

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 


void setup(void) {

  tft.initR(INITR_BLACKTAB);

  tft.fillScreen(ST7735_RED);

  tft.setTextColor(ST7735_YELLOW);

  tft.setTextSize(2);

  tft.setCursor(24,0);

  tft.print("Hello");

}


void loop(void) {

}

不过这个库配合下直接驱动,显示x坐标需要偏移24

如果说黑屏

那么通常是因为烧录设置有问题,主要注意Flash Mode设置为 DIO

关于按键

首先要了解,五轴方向键的左,上,中心,下这五个分别对应IO为IO6,IO8,IO4,IO5,右是IO13

直接上测试代码,这里我发现RKEY有点问题

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>

#define TFT_SCLK 2  //SCL
#define TFT_MOSI 3  //SDA
#define TFT_RST  10 //RES  
#define TFT_DC   6  //DC
#define TFT_CS   7  //CS

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define BUTTON_LEFT   13
#define BUTTON_UP     8
#define BUTTON_CENTER 4
#define BUTTON_DOWN   5
#define BUTTON_RIGHT  9

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

int scroll_delay = 100;  // 滚动速度,单位毫秒
 void testpin();
void setup(void) {
  // 初始化左上中下按键
pinMode(BUTTON_LEFT, INPUT);
pinMode(BUTTON_UP, INPUT);
pinMode(BUTTON_CENTER, INPUT);
pinMode(BUTTON_DOWN, INPUT);
pinMode(BUTTON_RIGHT, INPUT);


  Serial.begin(9600);

  tft.initR(INITR_BLACKTAB); 
  tft.setRotation(3);  // 竖屏显示
  tft.fillScreen(ST7735_RED);
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2);
  tft.setCursor(24,0);
  tft.print("Hello");
  Serial.print("Begin");
 //delay(100);
}

int pointX = SCREEN_WIDTH / 2;
int pointY = SCREEN_HEIGHT / 2;
void drawpin()
{
  int leftState = digitalRead(BUTTON_LEFT);
  int upState = digitalRead(BUTTON_UP);
  int centerState = digitalRead(BUTTON_CENTER);
  int downState = digitalRead(BUTTON_DOWN);
  int rightState = digitalRead(BUTTON_RIGHT);
  
  // 根据按键状态改变小点位置
  if (leftState == LOW) {
    pointX--;
  }
  if (rightState == LOW) {
    pointX++;
  }
  if (upState == LOW) {
    pointY--;
  }
  if (downState == LOW) {
    pointY++;
  }
  if(centerState == LOW)
  {
    tft.fillScreen(ST7735_BLACK);
  }
  // 边界检查,防止小点移出屏幕
  if (pointX < 0) {
    pointX = 0;
  }
  if (pointX > SCREEN_WIDTH - 1) {
    pointX = SCREEN_WIDTH - 1;
  }
  if (pointY < 0) {
    pointY = 0;
  }
  if (pointY > SCREEN_HEIGHT - 1) {
    pointY = SCREEN_HEIGHT - 1;
  }
  
  // 清空屏幕
  //tft.fillScreen(ST7735_BLACK);
  
  // 绘制小点
  tft.drawPixel(pointX, pointY, ST7735_WHITE);

  delay(50);  // 延时一段时间,防止过快刷新屏幕
}


 void testpin()
 {
  Serial.print("LEFT: ");
  Serial.print(digitalRead(BUTTON_LEFT));
  Serial.print("\tUP: ");
  Serial.print(digitalRead(BUTTON_UP));
  Serial.print("\tCENTER: ");
  Serial.print(digitalRead(BUTTON_CENTER));
  Serial.print("\tDOWN: ");
  Serial.print(digitalRead(BUTTON_DOWN));
  Serial.print("\tRIGHT: ");
  Serial.println(digitalRead(BUTTON_RIGHT));
 
  delay(100);
 }

 void testpinlcd()
 {
  tft.setTextSize(1); // 设置文本大小为1
  // tft.fillRect(0, 10, SCREEN_WIDTH, SCREEN_HEIGHT-10, ST7735_BLACK);

  tft.setCursor(0, 24);
  tft.setTextColor(ST7735_WHITE);
  tft.setTextSize(1);
  tft.println("Button Status:");
  tft.print("LEFT_BUTTON: ");
  tft.println(digitalRead(BUTTON_LEFT));
  tft.print("UP_BUTTON: ");
  tft.println(digitalRead(BUTTON_UP));
  tft.print("CENTER_BUTTON: ");
  tft.println(digitalRead(BUTTON_CENTER));
  tft.print("DOWN_BUTTON: ");
  tft.println(digitalRead(BUTTON_DOWN));
  tft.print("RIGHT_BUTTON: ");
  tft.println(digitalRead(BUTTON_RIGHT));
  delay(100);
 }
void loop(void) {
 
  testpinlcd();
}

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值