arduino控制16位彩色显示屏绘图(ili9481驱动)

概述

在淘宝买了3.5inch_Arduino_ILI9486。
买家提供的的示例代码运行异常(只显示一半画面,绘制的图像上有很多噪点),原因是:该LCD屏幕的实际驱动是ILI9481而非ILI9486(卖家资质和精力不够,自己都不知道自己卖的是什么)。
修改原始例程以后可以正常显示文字和图形。

代码

注意,需要安装2个第三方库:MCUFRIEND_kbv和Adafruit_GFX,打开最新版arduino编辑器,依次点击【项目】》【加载库】》【管理库】,搜索相关库并手动安装即可。

#include 
#include 
//定义相关引脚
#define LCD_RESET A4
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
//定义常用颜色
#define BLACK 0xFFFF
#define RED   0x07FF
#define GREEN 0xF81F
#define BLUE  0xFFE0
#define WHITE 0x0000

MCUFRIEND_kbv tft;

void setup(void) {
  Serial.begin(9600);
  Serial.println("开始测试TFT LCD显示屏");
  tft.reset();
  Serial.println("复位!");
  uint16_t identifier = tft.readID();
  Serial.print("读取Lcd Driver Identifier:");
  Serial.println(identifier, HEX);
  tft.begin(identifier);
  tft.fillScreen(BLACK);
}


void testDrawRect(uint16_t color) {
  tft.fillScreen(BLACK);
  delay(500);
  Serial.println("正在测试:矩形绘制");
  int i;
  int max_line_length = min(tft.width(), tft.height());
  int center_x = tft.width() / 2;
  int center_y = tft.height() / 2;
  for(i=0; i
    tft.drawRect(center_x-i, center_y-i, i*2, i*2, color);//x0,y0,width,height,color
    delay(50);
  }
  delay(500);
}


void testDrawCircle(uint16_t color) {
  tft.fillScreen(BLACK);
  delay(500);
  Serial.println("正在测试:圆形绘制");
  int radius;
  int max_radius = min(tft.width(), tft.height()) / 2;
  int center_x = tft.width() / 2;
  int center_y = tft.height() / 2;
  for(radius=0; radius
    tft.drawCircle(center_x, center_y, radius, color);
    delay(50);
  }
  delay(500);
}


void testDrawTriangle(uint16_t color) {
  tft.fillScreen(BLACK);
  delay(500);
  Serial.println("正在测试:三角形绘制");
  int i;
  int max_line = min(tft.width(), tft.height()) / 2;
  int center_x = tft.width() / 2;
  int center_y = tft.height() / 2;
  for(i=0; i
    tft.drawTriangle(center_x, center_y-i*2, center_x-i, center_y+i, center_x+i, center_y+i, color);
    delay(50);
  }
  delay(500);
}


void testDrawRoundRect(uint16_t color) {
  tft.fillScreen(BLACK);
  delay(500);
  Serial.println("正在测试:圆角矩形绘制");
  int i;
  int max_line_length = min(tft.width(), tft.height());
  int center_x = tft.width() / 2;
  int center_y = tft.height() / 2;
  for(i=0; i
    tft.drawRoundRect(center_x-i, center_y-i, i*2, i*2, i/3, color);//x0,y0,width,height,color
    delay(50);
  }
  delay(500);
}


void testFillScreen() {
  tft.fillScreen(BLACK);
  delay(500);
  Serial.println("正在测试:全屏填色");
  tft.fillScreen(RED);
  delay(500);
  tft.fillScreen(GREEN);
  delay(500);
  tft.fillScreen(BLUE);
  delay(500);
  tft.fillScreen(WHITE);
  delay(500);
}


void testShowText() {
  tft.fillScreen(WHITE);
  delay(500);
  Serial.println("正在测试:文本显示");
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE, BLACK);
  tft.setTextSize(1);
  tft.println("1234567890");
  delay(500);
  tft.setTextColor(RED, BLACK);
  tft.setTextSize(2);
  tft.println("1234567890");
  delay(500);
  tft.setTextColor(GREEN, BLACK);
  tft.setTextSize(3);
  tft.println("1234567890");
  delay(500);
  tft.setTextColor(BLUE, BLACK);
  tft.setTextSize(4);
  tft.println("1234567890");
  delay(500);
  tft.setTextColor(WHITE, BLACK);
  tft.setTextSize(5);
  tft.println("1234567890");
  delay(500);
}


void test() {
  testFillScreen();

  testShowText();

  testDrawRect(RED);
  testDrawRect(GREEN);
  testDrawRect(BLUE);

  testDrawCircle(RED);
  testDrawCircle(GREEN);
  testDrawCircle(BLUE);

  testDrawTriangle(RED);
  testDrawTriangle(GREEN);
  testDrawTriangle(BLUE);

  testDrawRoundRect(RED);
  testDrawRoundRect(GREEN);
  testDrawRoundRect(BLUE);
}


void loop(void) {
  test();
}

你可能感兴趣的:(Arduino,arduino,tft,lcd,ili9481,ili9486)