3.5寸ILI9488彩色触摸屏
模块来源
规格参数
工作电压:3.3V
工作电流:20MA
模块尺寸:56.34(H) x 98.00(W)
像素大小:320(H) x 480(V)RGB
驱动芯片:ILI9488
通信协议:SPI
使用管脚数量:14 Pin(2.54mm间距排针)
硬件连接
- VCC:连接到开发板的5V
- GND:连接到开发板的GND。
- CS:芯片选择,连接到开发板的10号引脚。
- RESET:重置,连接到开发板的9号引脚。
- DC (或RS ):数据/命令控制,连接到开发板的8号引脚。
- SDI/MOSI (或TFT_MOSI):主设备输出,从设备输入,连接到开发板的11号引脚。
- SCK (或TFT_SCK):时钟,连接到开发板的13号引脚。
- LED:背光控制,可以直接连接到开发板的A3或者3.3V或5V,通过一个电阻限流,或者连接到一个PWM输出以控制亮度。
- SDO/MISO (或TFT_MISO):主设备输入,从设备输出,如果你需要从TFT读数据,该线需要连接到开发板的12号引脚,本例程中未使用到该引脚,并且该引脚也没有作用。
- T_CLK:触摸屏时钟,连接到开发板的6号引脚。
- T_CS:触摸屏芯片选择,连接到开发板的7号引脚。
- T_DIN:触摸屏数据输入,连接到开发板的4号引脚。
- T_DO:触摸屏数据输出,连接到开发板的5号引脚。
- T_IRQ:触摸屏中断,连接到开发板的3号引脚。
使用方法
,如果使用ATMEGA328P控制该屏幕,需要使用电平转换模块或者修改短接屏幕上的一对焊盘。我们实际测试时发现,当我们没有使用电平转换模块直接接到显示屏幕上,发现它根本无法运行,要么无法显示,要么显示一半是花屏。这是因为屏幕的引脚只能输入3.3V高电平。而开发板输出具有5V的高电平。
因为我们没有电平转换模块,因此采用屏幕厂家提供的方法:短路法。
该短路方法操作简单,布线短,不需要外接设备。缺点是模块在运行过程中会产生大量的热量。
短路方法是将J1组件位置短路(如下图所示),并在模块背面进行焊锡。短路后运行模块VCC引脚必须连接5V电源(未连接3.3V电源)。
安装库文件
将以上压缩包解压,并放在工程文件夹下。
官方例程参考:https://github.com/imageguy/projects/tree/main/touchscreen/lcdwiki
编写代码
c
/******************************************************************************
* 测试硬件:ColorEasyDuino开发板
* 版 本 号: V1.0
* 修改作者: www.lckfb.com
* 修改日期: 2024年03月28日
* 功能介绍:
*****************************************************************************
* 开发板软硬件资料与相关项目软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
******************************************************************************/
#include "LCDWIKI_SPI.h" //Hardware-specific library
#include "LCDWIKI_TOUCH.h" //touch screen library
LCDWIKI_SPI mylcd = LCDWIKI_SPI(ILI9488_18,10,9,8,A3); //hardware spi, cs, cd, reset, led
LCDWIKI_TOUCH my_touch(7,6,5,4,3); //tcs,tclk,tdout,tdin,tirq
//define some colour values
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
void setup()
{
mylcd.Init_LCD(); //屏幕初始化
mylcd.Fill_Screen(BLACK); //全屏显示黑
//触摸初始化
my_touch.TP_Init(mylcd.Get_Rotation(),mylcd.Get_Display_Width(),mylcd.Get_Display_Height());
mylcd.Set_Text_Mode(0);
//display 1 times string
mylcd.Fill_Screen(0x0000);
mylcd.Set_Text_colour(RED);
mylcd.Set_Text_Back_colour(BLACK);
mylcd.Set_Text_Size(1);
mylcd.Print_String("Hello World!", 0, 0);
mylcd.Print_Number_Float(01234.56789, 2, 0, 8, '.', 0, ' ');
mylcd.Print_Number_Int(0xDEADBEF, 0, 16, 0, ' ',16);
}
void loop(void)
{
my_touch.TP_Scan(0);
if (my_touch.TP_Get_State()&TP_PRES_DOWN)
{
mylcd.Print_String("x = ", 0, 64);
mylcd.Print_Number_Float(double(my_touch.x), 4, 64, 64, '.', 0, ' ');
mylcd.Print_String("y = ", 0, 84);
mylcd.Print_Number_Float(double(my_touch.y), 4, 64, 84, '.', 0, ' ');
}
delay(5);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62