Arduino Mega TFT LCD 480x320 Color Display shield with Library and Code

TFT LCD 480x320 Color Display shield with Arduino Mega 2560

This TFT LCD 3.5-inch color display supports 480x320 pixel resolutions. This is the demo preview of the EXTRA Big TFT LCD 480x320 Color Display for Arduino Mega 2560 with Library and Example Code. The display is based on the ILI9481 graphics controller. This TFT display module can be directly inserted into Arduino Mega 2560. 

Arduino Mega TFT LCD 480x320 Color Display shield
Arduino Mega TFT LCD 480x320 Color Display shield


Specification of EXTRA Big TFT LCD 480x320 Color Display for Arduino Mega 2560:

  1. Screen size 3.5" - 480 X 320 Pixels
  2. Support Arduino Mega2560 directly
  3. Control IC: ILI9846
  4. Compatible with 3.3/5V operation voltage level
  5. Full-angle IPS TFT panel
  6. With SD card Socket
  7. Interface: 16 Bit parallel interface

Watch Video Documentation of the Arduino Mega TFT LCD 480x320 Color Display shield:

The Example Code and Library:

We have to install a library to operate the TFT Display with Arduino Mega. Before trying the examples, you need to copy the LCDWIKI library in the Install libraries directory of the test package to the libraries folder of the Arduino project directory (the default Arduino project directory is C:\Users\Administrator\ Documents\Arduino\libraries);

The Example Code: 

Try the example code to display the following colligate effect. 

Arduino Mega TFT LCD 480x320 Color Display shield
Arduino Mega TFT LCD 480x320 Color Display Example

Here is the Arduino Mega 2560 code:

#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
//the definiens of 16bit mode as follow:
//if the IC model is known or the modules is unreadable,you can use this constructed function
LCDWIKI_KBV my_lcd(ILI9486,40,38,39,-1,41); //model,cs,cd,wr,rd,reset
//display main surface
unsigned long show_text(void)
{
unsigned long time_start = micros();
my_lcd.Set_Draw_color(32, 0,255);
my_lcd.Fill_Rectangle(0, 0, my_lcd.Get_Display_Width()-1, 14);
my_lcd.Set_Text_colour(0, 255, 0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(1);
my_lcd.Print_String("* Universal Color TFT Display Library *", CENTER, 3);
my_lcd.Set_Draw_color(128, 128, 128);
my_lcd.Fill_Rectangle(0, my_lcd.Get_Display_Height()-15, my_lcd.Get_Display_Width()-1, my_lcd.Get_Display_Height()-1);
my_lcd.Set_Text_colour(255, 255, 255);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(1);
my_lcd.Print_String("<http://abcdefghijklmnopq.1234567890.com>", CENTER, my_lcd.Get_Display_Height()-11);
my_lcd.Set_Draw_color(255, 0, 0);
my_lcd.Draw_Rectangle(0, 15, my_lcd.Get_Display_Width()-1, my_lcd.Get_Display_Height()-16);
return micros() - time_start;
}
//display triangle functions
unsigned long show_triangle_function(void)
{
uint16_t i;
unsigned long time_start = micros();
// Draw crosshairs
my_lcd.Set_Draw_color(0, 0, 255);
my_lcd.Draw_Fast_VLine(my_lcd.Get_Display_Width()/2-1, 16, my_lcd.Get_Display_Height()- 32);
my_lcd.Draw_Fast_HLine(1, my_lcd.Get_Display_Height()/2-1, my_lcd.Get_Display_Width()-2);
for(i = 1;i <= (my_lcd.Get_Display_Height()- 32)/2/10;i++)
{
my_lcd.Draw_Fast_HLine(my_lcd.Get_Display_Width()/2-1-2, my_lcd.Get_Display_Height()/2-1-i*10, 5);
my_lcd.Draw_Fast_HLine(my_lcd.Get_Display_Width()/2-1-2, my_lcd.Get_Display_Height()/2-1+i*10, 5);
}
for(i = 1;i <= (my_lcd.Get_Display_Width()-2)/2/10;i++)
{
my_lcd.Draw_Fast_VLine(my_lcd.Get_Display_Width()/2-1-i*10, my_lcd.Get_Display_Height()/2-1-2, 5);
my_lcd.Draw_Fast_VLine(my_lcd.Get_Display_Width()/2-1+i*10, my_lcd.Get_Display_Height()/2-1-2, 5);
}
// Draw sin lines
my_lcd.Set_Text_colour(0, 255, 255);
my_lcd.Set_Text_Back_colour(0,0,0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(0);
my_lcd.Print_String("sin",5,17);
my_lcd.Set_Draw_color(0, 255, 255);
for (i=1; i<my_lcd.Get_Display_Width()-2; i++)
{
my_lcd.Draw_Pixel(i,my_lcd.Get_Display_Height()/2-1+(sin(((i*1.13)*3.14)/180)*95));
}
// Draw cos lines
my_lcd.Set_Text_colour(0, 255, 0);
my_lcd.Set_Text_Back_colour(0,0,0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(0);
my_lcd.Print_String("cos",5,25);
my_lcd.Set_Draw_color(0, 255, 0);
for (i=1; i<my_lcd.Get_Display_Width()-2; i++)
{
my_lcd.Draw_Pixel(i,my_lcd.Get_Display_Height()/2-1+(cos(((i*1.13)*3.14)/180)*95));
}
// Draw tan lines
my_lcd.Set_Text_colour(255, 255, 0);
my_lcd.Set_Text_Back_colour(0,0,0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(0);
my_lcd.Print_String("tan",5,33);
my_lcd.Set_Draw_color(255, 255, 0);
for (i=1; i<my_lcd.Get_Display_Width()-2; i++)
{
my_lcd.Draw_Pixel(i,my_lcd.Get_Display_Height()/2-1+(tan(((i*1.13)*3.14)/180)*10));
}
// Draw cot lines
my_lcd.Set_Text_colour(255, 0, 0);
my_lcd.Set_Text_Back_colour(0,0,0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(0);
my_lcd.Print_String("cot",5,41);
my_lcd.Set_Draw_color(255, 0, 0);
for (i=1; i<my_lcd.Get_Display_Width()-2; i++)
{
my_lcd.Draw_Pixel(i,my_lcd.Get_Display_Height()/2-1+1/(tan(((i*1.13)*3.14)/180)*0.1));
}
return micros()-time_start;
}
// Draw a moving sinewave
unsigned long show_sinewave(void)
{
uint16_t buf[my_lcd.Get_Display_Width()-2],x = 1,i,y;
unsigned long time_start = micros();
int16_t wid = my_lcd.Get_Display_Width();
int16_t t;
float k;
if(wid == 320)
{
t = 20;
k = 1.1;
}
else
{
t = 15;
k = 0.7;
}
my_lcd.Set_Draw_color(0, 0, 255);
my_lcd.Draw_Fast_VLine(my_lcd.Get_Display_Width()/2-1, 16, my_lcd.Get_Display_Height()- 32);
my_lcd.Draw_Fast_HLine(1, my_lcd.Get_Display_Height()/2-1, my_lcd.Get_Display_Width()-2);
for (i=1; i<((my_lcd.Get_Display_Width()-2)*t); i++)
{
x++;
if (x==my_lcd.Get_Display_Width()-1)
{
x=1;
}
if (i>my_lcd.Get_Display_Width()-1)
{
if ((x==my_lcd.Get_Display_Width()/2-1)||(buf[x-1]==my_lcd.Get_Display_Height()/2-1))
{
my_lcd.Set_Draw_color(0, 0, 255);
}
else
{
my_lcd.Set_Draw_color(0, 0, 0);
}
my_lcd.Draw_Pixel(x,buf[x-1]);
}
my_lcd.Set_Draw_color(255, 64, 255);
y=my_lcd.Get_Display_Height()/2-1+(sin(((i*k)*3.14)/180)*(90-(i/100)));
my_lcd.Draw_Pixel(x,y);
buf[x-1]=y;
}
return micros()- time_start;
}
// Draw some filled rectangles
unsigned long show_fill_rectangle(void)
{
uint16_t i;
unsigned long time_start = micros();
uint16_t side_len = (my_lcd.Get_Display_Height()-40)/5;
uint16_t x_spec = (my_lcd.Get_Display_Width()-5*side_len)/2;
uint16_t y_spec = (my_lcd.Get_Display_Height()-5*side_len)/2;
for(i = 0;i<5;i++)
{
switch (i)
{
case 0:
my_lcd.Set_Draw_color(255,0,255);
break;
case 1:
my_lcd.Set_Draw_color(255,0,0);
break;
case 2:
my_lcd.Set_Draw_color(0,255,0);
break;
case 3:
my_lcd.Set_Draw_color(0,0,255);
break;
case 4:
my_lcd.Set_Draw_color(255,255,0);
break;
default:
break;
}
my_lcd.Fill_Rectangle(x_spec+i*side_len-1, y_spec+i*side_len-1, x_spec+(i+1)*side_len-1, y_spec+(i+1)*side_len-1);
my_lcd.Fill_Rectangle(x_spec+i*side_len-1, y_spec+(5-i)*side_len-1, x_spec+(i+1)*side_len-1, y_spec+(4-i)*side_len-1);
}
return micros()- time_start;
}
// Draw some filled round rectangles
unsigned long show_fill_round_rectangle(void)
{
uint16_t i;
unsigned long time_start = micros();
uint16_t side_len = (my_lcd.Get_Display_Height()-40)/5;
uint16_t x_spec = (my_lcd.Get_Display_Width()-5*side_len)/2;
uint16_t y_spec = (my_lcd.Get_Display_Height()-5*side_len)/2;
for(i = 0;i<5;i++)
{
switch (i)
{
case 0:
my_lcd.Set_Draw_color(255,0,255);
break;
case 1:
my_lcd.Set_Draw_color(255,0,0);
break;
case 2:
my_lcd.Set_Draw_color(0,255,0);
break;
case 3:
my_lcd.Set_Draw_color(0,0,255);
break;
case 4:
my_lcd.Set_Draw_color(255,255,0);
break;
default:
break;
}
my_lcd.Fill_Round_Rectangle(x_spec+i*side_len-1, y_spec+i*side_len-1, x_spec+(i+1)*side_len-1, y_spec+(i+1)*side_len-1,10);
my_lcd.Fill_Round_Rectangle(x_spec+i*side_len-1, y_spec+(5-i)*side_len-1, x_spec+(i+1)*side_len-1, y_spec+(4-i)*side_len-1,10);
}
return micros()- time_start;
}
// Draw some filled circles
unsigned long show_fill_circle(void)
{
uint16_t i;
unsigned long time_start = micros();
uint16_t r_len = (my_lcd.Get_Display_Height()-40)/5/2;
uint16_t x_spec = (my_lcd.Get_Display_Width()-5*r_len*2)/2;
uint16_t y_spec = (my_lcd.Get_Display_Height()-5*r_len*2)/2;
for(i = 0;i<5;i++)
{
switch (i)
{
case 0:
my_lcd.Set_Draw_color(255,0,255);
break;
case 1:
my_lcd.Set_Draw_color(255,0,0);
break;
case 2:
my_lcd.Set_Draw_color(0,255,0);
break;
case 3:
my_lcd.Set_Draw_color(0,0,255);
break;
case 4:
my_lcd.Set_Draw_color(255,255,0);
break;
default:
break;
}
my_lcd.Fill_Circle(x_spec+r_len+i*r_len*2-1, y_spec+r_len+i*r_len*2-1,r_len);
my_lcd.Fill_Circle(x_spec+r_len+i*r_len*2-1, y_spec+(5-i)*r_len*2-r_len-1,r_len);
}
return micros()- time_start;
}
// Draw some filled triangles
unsigned long show_fill_triangle(void)
{
uint16_t i;
unsigned long time_start = micros();
uint16_t h_len = (my_lcd.Get_Display_Height()-40)/5;
uint16_t side_len = (h_len*115)/100;
uint16_t x_spec = (my_lcd.Get_Display_Width()-5*side_len)/2;
uint16_t y_spec = (my_lcd.Get_Display_Height()-5*h_len)/2;
for(i = 0;i<5;i++)
{
switch (i)
{
case 0:
my_lcd.Set_Draw_color(255,0,255);
break;
case 1:
my_lcd.Set_Draw_color(255,0,0);
break;
case 2:
my_lcd.Set_Draw_color(0,255,0);
break;
case 3:
my_lcd.Set_Draw_color(0,0,255);
break;
case 4:
my_lcd.Set_Draw_color(255,255,0);
break;
default:
break;
}
my_lcd.Fill_Triangle(x_spec+i*side_len-1,y_spec+(i+1)*h_len-1,x_spec+side_len/2+i*side_len-1,y_spec+i*h_len-1,x_spec+(i+1)*side_len-1,y_spec+(i+1)*h_len-1);
my_lcd.Fill_Triangle(x_spec+i*side_len-1,y_spec+(5-i)*h_len-1,x_spec+side_len/2+i*side_len-1,y_spec+(4-i)*h_len-1,x_spec+(i+1)*side_len-1,y_spec+(5-i)*h_len-1);
}
return micros()- time_start;
}
// Draw some lines in a pattern
unsigned long show_grid_lines(void)
{
uint16_t i;
unsigned long time_start = micros();
int16_t wid = my_lcd.Get_Display_Width();
float k;
if(wid == 320)
{
k = 1.44;
}
else
{
k = 1.6;
}
my_lcd.Set_Draw_color(255,0,0);
for (i=16; i<my_lcd.Get_Display_Height()-17; i+=5)
{
my_lcd.Draw_Line(1, i, (i*k)-10, my_lcd.Get_Display_Height()-17);
}
my_lcd.Set_Draw_color(255,0,0);
for (i=my_lcd.Get_Display_Height()-17; i>16; i-=5)
{
my_lcd.Draw_Line(my_lcd.Get_Display_Width()-2, i, (i*k)-11, 16);
}
my_lcd.Set_Draw_color(0,255,255);
for (i=my_lcd.Get_Display_Height()-16; i>16; i-=5)
{
my_lcd.Draw_Line(1, i, (my_lcd.Get_Display_Height()-17)*k+10-(i*k), 16);
}
my_lcd.Set_Draw_color(0,255,255);
for (int i=15; i<my_lcd.Get_Display_Height()-17; i+=5)
{
my_lcd.Draw_Line(my_lcd.Get_Display_Width()-2, i, (my_lcd.Get_Display_Height()-17)*k+10-(i*k), my_lcd.Get_Display_Height()-17);
}
return micros()- time_start;
}
// Draw some random pixels
unsigned long show_random_pixels(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 10000;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Pixel(2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34));
}
return micros()- time_start;
}
// Draw some random lines
unsigned long show_random_lines(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 300;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Line(2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34));
}
return micros()- time_start;
}
// Draw some random rectangles
unsigned long show_random_rectangles(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 150;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Rectangle(2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34));
}
return micros()- time_start;
}
// Draw some random round rectangles
unsigned long show_random_round_rectangles(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 150;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Round_Rectangle(2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),5);
}
return micros()- time_start;
}
// Draw some random circles
unsigned long show_random_circles(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 150;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Circle(41+random(my_lcd.Get_Display_Width()-82), 56+random(my_lcd.Get_Display_Height()-112), random(40));
}
return micros()- time_start;
}
// Draw some random triangles
unsigned long show_random_triangles(void)
{
uint16_t i;
unsigned long time_start = micros();
for(i = 0;i< 150;i++)
{
my_lcd.Set_Draw_color(random(255),random(255),random(255));
my_lcd.Draw_Triangle(2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34),2+random(my_lcd.Get_Display_Width()-4),17+random(my_lcd.Get_Display_Height()-34));
}
return micros()- time_start;
}
// Draw some random bit maps
unsigned long show_random_bit_map(void)
{
uint16_t buf[48],i;
unsigned long time_start = micros();
int16_t len = (my_lcd.Get_Display_Height()*3/4)/6;
for(i = 0;i< 48; i++)
{
my_lcd.Set_Draw_color(random(255), random(255), random(255));
buf[i] = my_lcd.Get_Draw_color();
}
for(i = 1;i<=6;i++)
{
my_lcd.Draw_Bit_Map(my_lcd.Get_Display_Width()/2-1-((len/2)*4/3)*i, my_lcd.Get_Display_Height()/2-1-(len/2)*i, 8, 6, buf, i*(len/6));
delay(100);
}
return micros()- time_start;
}
//Clear the screen
void clear_screen(void)
{
delay(2000);
my_lcd.Set_Draw_color(0, 0, 0);
my_lcd.Fill_Rectangle(1, 16, my_lcd.Get_Display_Width()-2, my_lcd.Get_Display_Height()-17);
}
unsigned long (*show_function[])(void) =
{
show_text,
show_triangle_function,
show_sinewave,
show_fill_rectangle,
show_fill_round_rectangle,
show_fill_circle,
show_fill_triangle,
show_grid_lines,
show_random_pixels,
show_random_lines,
show_random_rectangles,
show_random_round_rectangles,
show_random_circles,
show_random_triangles,
show_random_bit_map,
};
uint8_t *show_str[]=
{
"show text :",
"show triangle function :",
"show sinewave :",
"show fill rectangle :",
"show fill round rectangle :",
"show fill circle :",
"show fill triangle :",
"show grid lines :",
"show random pixels :",
"show random lines :",
"show random rectangles :",
"show random round rectangles :",
"show random circles :",
"show random triangles :",
"show random bit_map :"
};
//display the running time of programs
unsigned long show_total_time(void)
{
uint16_t i;
unsigned long buf[15];
unsigned long time_start = micros();
for(i = 0;i< 15;i++)
{
buf[i] = show_function[i]();
clear_screen();
}
for(i = 0;i<15; i++)
{
my_lcd.Set_Text_colour(255, 165, 0);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(1);
my_lcd.Print_String(show_str[i], (my_lcd.Get_Display_Width()-260)/2-1, (my_lcd.Get_Display_Height()-150)/2+i*10-1);
my_lcd.Set_Text_colour(0, 255, 0);
my_lcd.Print_Number_Int(buf[i], (my_lcd.Get_Display_Width()-260)/2-1+200, (my_lcd.Get_Display_Height()-150)/2+i*10-1, 0, ' ', 10);
}
delay(5000);
return micros()- time_start;
}
//display ending and total running time
void show_end(unsigned long run_time)
{
my_lcd.Fill_Screen(0, 255, 255);
my_lcd.Set_Draw_color(255, 0, 0);
my_lcd.Fill_Round_Rectangle(my_lcd.Get_Display_Width()/2-1-120+1, my_lcd.Get_Display_Height()/2-1-60+1, my_lcd.Get_Display_Width()/2-1+120-1, my_lcd.Get_Display_Height()/2-1+60-1,5);
my_lcd.Set_Text_colour(0, 255, 255);
my_lcd.Set_Text_Size(1);
my_lcd.Set_Text_Mode(1);
my_lcd.Print_String("Running over!", CENTER, my_lcd.Get_Display_Height()/2-1-40);
my_lcd.Print_String("That's ok!", CENTER, my_lcd.Get_Display_Height()/2-1-30);
my_lcd.Print_String("After a few seconds,", CENTER, my_lcd.Get_Display_Height()/2-1-20);
my_lcd.Print_String("it will restart.", CENTER, my_lcd.Get_Display_Height()/2-1-10);
my_lcd.Print_String("Please wait ...", CENTER, my_lcd.Get_Display_Height()/2-1);
my_lcd.Set_Text_colour(255, 255, 0);
my_lcd.Print_String("Total runtime(us): ", my_lcd.Get_Display_Width()/2-1-90, my_lcd.Get_Display_Height()/2-1+40);
my_lcd.Set_Text_colour(0, 255, 0);
my_lcd.Print_Number_Int(run_time, my_lcd.Get_Display_Width()/2-1+30, my_lcd.Get_Display_Height()/2-1+40, 0, ' ', 10);
delay(10000);
}
void setup()
{
my_lcd.Init_LCD();
my_lcd.Fill_Screen(0x0);
my_lcd.Set_Rotation(1);
}
void loop()
{
unsigned long total_time;
my_lcd.Fill_Screen(0x0);
total_time = show_total_time();
show_end(total_time);
}

For more Arduino Mega Code for TFT LCD 480x320 Color Display shield, click on download.

Summary

480x320 TFT LCD display shield is a great display module for Arduino mega. The connections are straightforward. The Arduino program and necessary library are also available. This display can be used for any DIY embedded system project based on Arduino mega 2560. Thanks for reading the article. 

For more Robotics Projects, click here.

4 Comments

  1. Does this display shield support touch input, and if it does, how can I implement touch functionality in my projects?

    ReplyDelete
    Replies
    1. Yes, the Arduino Mega TFT LCD 480x320 Color Display shield often comes with touch screen functionality. To implement touch functionality in your projects, use the following Arduino code:
      #include
      #include
      #include

      #define TFT_CS 10 // TFT chip select
      #define TFT_DC 9 // TFT data/command
      #define TS_CS 8 // Touchscreen chip select

      #define TFT_WIDTH 480
      #define TFT_HEIGHT 320

      Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
      Adafruit_TouchScreen ts = Adafruit_TouchScreen(TS_CS, 320, 240);

      void setup() {
      tft.begin();
      }

      void loop() {
      TS_Point p = ts.getPoint();
      if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
      // Touch detected
      int16_t x = p.x;
      int16_t y = p.y;

      // Do something with x and y, e.g., display them on the TFT screen
      tft.fillScreen(ILI9341_BLACK);
      tft.setCursor(10, 10);
      tft.setTextColor(ILI9341_WHITE);
      tft.setTextSize(2);
      tft.println("X: " + String(x));
      tft.println("Y: " + String(y));
      }
      }

      Delete

Post a Comment