屏幕怎么驱动
有个官方的资料,可以了解到是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库不完整,缺少很多文件,所以,我们要完整的库文件
下载并覆盖文件夹中的库
然后就可以正常的编译了
试一下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();
}