1.14 4.0 寸 ILI9488 彩屏
1.14.1 模块来源
4.0 寸 tft lcd 液晶屏 320\*480 4.0lcd 彩色液晶屏 ili9488 驱动并口
资料下载链接:
https://pan.baidu.com/s/1DWdbVY9WcOLYKITB_zdjFg
资料提取码:8888
1.14.2 规格参数
资料来源看 1.14.1 的资料下载链接。
工作电压: 3.3V
工作电流: 120MA
模块尺寸: 62.0(H) x 106.57(V) MM
像素大小: 320(H) x 480(V)RGB
驱动芯片: ILI9488
通信协议: 16 位并口
管脚数量: 24 Pin(2.54mm 间距排针)
1.14.3 移植过程
我们的目标是将例程移植至梁山派 GD32F470 上。按照以下步骤,即可完成移植。
- 将源码导入工程;
- 根据编译报错处进行粗改;
- 修改引脚配置;
- 修改时序配置;
- 移植验证。
1.14.3.1 查看资料
打开厂家资料例程。具体路径见 图 1.14.3.1 例程路径
在 main.c 文件发现对屏幕的初始化配置函数为 LCD_Init(); ,该函数里包含了对屏幕引脚的配置、对屏幕显示方式的配置。
我们主要修改的是引脚的初始化与时序的修改。
1.14.3.2 移植至工程
将厂家资料路径下的【LCD】文件夹和 User 文件夹下的 GUI.c、GUI.h、test.c 和 test.h,复制到自己的工程中。自己的工程至少需要有毫秒级延时函数。(工程可以参考文件 1.14.3.2 空白工程下载)
打开自己的工程,将我们刚刚复制过来的文件导入.c 和.h 文件。
选择导入复制过来的文件夹里面的全部.c 文件。
导入完成后,工程目录下会出现新导入的文件。(原工程目录见图 1.14.3.5 C 文件导入步骤)
添加.h 路径
在弹出的路径窗口,选择添加新路径
添加完成之后,显示如下。
尝试编译,发现有错误。错误内容为找不到 sys.h 这个文件。
将 gui.h 文件下的 sys.h 改为 gd32f4xx.h,还要将lcd.h文件下的 sys.h 改为 gd32f4xx.h。
(在左边将 lcd.c 和 GUI.c 的工程目录展开,就发现有 lcd.h 和 GUI.h)
再编译发现还有错误,错误内容分别为标识符“u8”、“u16”、“u32”未定义和找不到 delay.h 这个文件。
图 1.14.3.15 标识符未定义错误
分别在 lcd_init.h 与 lcd.h 文件中定义三个宏,u32、u16 与 u8。
#ifndef u8
#define u8 uint8_t
#endif
#ifndef u16
#define u16 uint16_t
#endif
#ifndef u32
#define u32 uint32_t
#endif
2
3
4
5
6
7
8
9
10
11
在源代码中使用 delay.h 的主要作用是给屏幕初始化时提供一定的延时,确保初始化成功。主要使用的函数是 delay_ms,进行毫秒级延时。
将 lcd.c、GUI.c 与 test.c 文件中的头文件 delay.h 改为自己的延时函数头文件,这里我使用的是 systick.h;再将文件中使用到的延时函数 delay_ms 替换为自己的毫秒级延时,这里替换为 delay_1ms。
#include "systick.h"
#define delay_ms delay_1ms
2
再编译发现只剩下 LCD 引脚初始化的内容报错,接下来我们要进行引脚选择。
1.14.3.3 引脚选择
该屏幕需要设置 24 个接口,具体接口说明见 文件规格书。
因为使用的是软件并行口,所以除了特殊引脚外,其他引脚都可以设置。时序部分厂家已经完成,我们只需要将引脚和延时配置好即可。所以对应接入的屏幕引脚请按照你的需要。这里选择的引脚见表 1.14.3.2 16 位并行接线。
屏幕 | 开发板 |
---|---|
1-VCC | 3.3V |
2-GND | GND |
3-BLK | PF9 |
4-RES | PF7 |
5-CS | PF6 |
6-DC | PC3 |
7-WR | PF8 |
8-RD | PA0 |
9-DB0 | PA1 |
10-DB1 | PA2 |
11-DB2 | PC1 |
12-DB3 | PC2 |
13-DB4 | PF10 |
14-DB5 | PA3 |
15-DB6 | PA4 |
16-DB7 | PA5 |
表 1.14.3.2 8 位并行接线
选择好引脚后,进入工程开始编写屏幕引脚初始化代码。
为了方便后续移植,我在 lcd_init.h 处宏定义了每一个引脚,后续根据需要进行修改即可。
//-----------------LCD端口移植----------------
#define RCU_LCD_RD RCU_GPIOA//RD
#define PORT_LCD_RD GPIOA
#define GPIO_LCD_RD GPIO_PIN_0
#define RCU_LCD_WR RCU_GPIOF//WR
#define PORT_LCD_WR GPIOF
#define GPIO_LCD_WR GPIO_PIN_8
#define RCU_LCD_CS RCU_GPIOF//CS
#define PORT_LCD_CS GPIOF
#define GPIO_LCD_CS GPIO_PIN_6
#define RCU_LCD_DC RCU_GPIOC //DC/RS
#define PORT_LCD_DC GPIOC
#define GPIO_LCD_DC GPIO_PIN_3
#define RCU_LCD_RES RCU_GPIOF//RES
#define PORT_LCD_RES GPIOF
#define GPIO_LCD_RES GPIO_PIN_7
#define RCU_LCD_BLK RCU_GPIOF//BLK/BL
#define PORT_LCD_BLK GPIOF
#define GPIO_LCD_BLK GPIO_PIN_9
#define RCU_LCD_DB0 RCU_GPIOA//DB0
#define PORT_LCD_DB0 GPIOA
#define GPIO_LCD_DB0 GPIO_PIN_1
#define RCU_LCD_DB1 RCU_GPIOA//DB1
#define PORT_LCD_DB1 GPIOA
#define GPIO_LCD_DB1 GPIO_PIN_2
#define RCU_LCD_DB2 RCU_GPIOC//DB2
#define PORT_LCD_DB2 GPIOC
#define GPIO_LCD_DB2 GPIO_PIN_1
#define RCU_LCD_DB3 RCU_GPIOC//DB3
#define PORT_LCD_DB3 GPIOC
#define GPIO_LCD_DB3 GPIO_PIN_2
#define RCU_LCD_DB4 RCU_GPIOF//DB4
#define PORT_LCD_DB4 GPIOF
#define GPIO_LCD_DB4 GPIO_PIN_10
#define RCU_LCD_DB5 RCU_GPIOA//DB5
#define PORT_LCD_DB5 GPIOA
#define GPIO_LCD_DB5 GPIO_PIN_3
#define RCU_LCD_DB6 RCU_GPIOA//DB6
#define PORT_LCD_DB6 GPIOA
#define GPIO_LCD_DB6 GPIO_PIN_4
#define RCU_LCD_DB7 RCU_GPIOA//DB7
#define PORT_LCD_DB7 GPIOA
#define GPIO_LCD_DB7 GPIO_PIN_5
#define RCU_LCD_DB8 RCU_GPIOA//DB8
#define PORT_LCD_DB8 GPIOA
#define GPIO_LCD_DB8 GPIO_PIN_6
#define RCU_LCD_DB9 RCU_GPIOA//DB9
#define PORT_LCD_DB9 GPIOA
#define GPIO_LCD_DB9 GPIO_PIN_7
#define RCU_LCD_DB10 RCU_GPIOC//DB10
#define PORT_LCD_DB10 GPIOC
#define GPIO_LCD_DB10 GPIO_PIN_4
#define RCU_LCD_DB11 RCU_GPIOC//DB11
#define PORT_LCD_DB11 GPIOC
#define GPIO_LCD_DB11 GPIO_PIN_5
#define RCU_LCD_DB12 RCU_GPIOB//DB12
#define PORT_LCD_DB2 GPIOB
#define GPIO_LCD_DB12 GPIO_PIN_0
#define RCU_LCD_DB13 RCU_GPIOB//DB13
#define PORT_LCD_DB13 GPIOB
#define GPIO_LCD_DB13 GPIO_PIN_1
#define RCU_LCD_DB14 RCU_GPIOB//DB14
#define PORT_LCD_DB14 GPIOB
#define GPIO_LCD_DB14 GPIO_PIN_10
#define RCU_LCD_DB15 RCU_GPIOB//DB15
#define PORT_LCD_DB15 GPIOB
#define GPIO_LCD_DB15 GPIO_PIN_11
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
将 lcd_init.c 源代码中的**void LCD_GPIO_Init(void)**修改为如下代码。
void LCD_GPIO_Init(void)
{
/* 使能时钟 */
rcu_periph_clock_enable(RCU_LCD_RD);
rcu_periph_clock_enable(RCU_LCD_WR);
rcu_periph_clock_enable(RCU_LCD_CS);
rcu_periph_clock_enable(RCU_LCD_DC);
rcu_periph_clock_enable(RCU_LCD_RES);
rcu_periph_clock_enable(RCU_LCD_BLK);
rcu_periph_clock_enable(RCU_LCD_DB0);
rcu_periph_clock_enable(RCU_LCD_DB1);
rcu_periph_clock_enable(RCU_LCD_DB2);
rcu_periph_clock_enable(RCU_LCD_DB3);
rcu_periph_clock_enable(RCU_LCD_DB4);
rcu_periph_clock_enable(RCU_LCD_DB5);
rcu_periph_clock_enable(RCU_LCD_DB6);
rcu_periph_clock_enable(RCU_LCD_DB7);
rcu_periph_clock_enable(RCU_LCD_DB8);
rcu_periph_clock_enable(RCU_LCD_DB9);
rcu_periph_clock_enable(RCU_LCD_DB10);
rcu_periph_clock_enable(RCU_LCD_DB11);
rcu_periph_clock_enable(RCU_LCD_DB12);
rcu_periph_clock_enable(RCU_LCD_DB13);
rcu_periph_clock_enable(RCU_LCD_DB14);
rcu_periph_clock_enable(RCU_LCD_DB15);
/* 配置RD */
gpio_mode_set(PORT_LCD_RD,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RD);
gpio_output_options_set(PORT_LCD_RD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_RD);
gpio_bit_write(PORT_LCD_RD, GPIO_LCD_RD, SET);
/* 配置WR */
gpio_mode_set(PORT_LCD_WR,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_WR);
gpio_output_options_set(PORT_LCD_WR,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_WR);
gpio_bit_write(PORT_LCD_WR, GPIO_LCD_WR, SET);
/* 配置DC */
gpio_mode_set(PORT_LCD_DC,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_DC);
gpio_output_options_set(PORT_LCD_DC,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_DC);
gpio_bit_write(PORT_LCD_DC, GPIO_LCD_DC, SET);
/* 配置CS */
gpio_mode_set(PORT_LCD_CS,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_CS);
gpio_output_options_set(PORT_LCD_CS,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_CS);
gpio_bit_write(PORT_LCD_CS, GPIO_LCD_CS, SET);
/* 配置RES */
gpio_mode_set(PORT_LCD_RES,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RES);
gpio_output_options_set(PORT_LCD_RES,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_LCD_RES);
gpio_bit_write(PORT_LCD_RES, GPIO_LCD_RES, SET);
/* 配置BLK */
gpio_mode_set(PORT_LCD_BLK, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_BLK);
gpio_output_options_set(PORT_LCD_BLK, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_BLK);
gpio_bit_write(PORT_LCD_BLK, GPIO_LCD_BLK, SET);
/* 配置DB0 */
gpio_mode_set(PORT_LCD_DB0, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB0);
gpio_output_options_set(PORT_LCD_DB0, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB0);
gpio_bit_write(PORT_LCD_DB0, GPIO_LCD_DB0, SET);
/* 配置DB1 */
gpio_mode_set(PORT_LCD_DB1, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB1);
gpio_output_options_set(PORT_LCD_DB1, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB1);
gpio_bit_write(PORT_LCD_DB1, GPIO_LCD_DB1, SET);
/* 配置DB2 */
gpio_mode_set(PORT_LCD_DB2, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB2);
gpio_output_options_set(PORT_LCD_DB2, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB2);
gpio_bit_write(PORT_LCD_DB2, GPIO_LCD_DB2, SET);
/* 配置DB3 */
gpio_mode_set(PORT_LCD_DB3, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB3);
gpio_output_options_set(PORT_LCD_DB3, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB3);
gpio_bit_write(PORT_LCD_DB3, GPIO_LCD_DB3, SET);
/* 配置DB4 */
gpio_mode_set(PORT_LCD_DB4, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB4);
gpio_output_options_set(PORT_LCD_DB4, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB4);
gpio_bit_write(PORT_LCD_DB4, GPIO_LCD_DB4, SET);
/* 配置DB5 */
gpio_mode_set(PORT_LCD_DB5, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB5);
gpio_output_options_set(PORT_LCD_DB5, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB5);
gpio_bit_write(PORT_LCD_DB5, GPIO_LCD_DB5, SET);
/* 配置DB6 */
gpio_mode_set(PORT_LCD_DB6, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB6);
gpio_output_options_set(PORT_LCD_DB6, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB6);
gpio_bit_write(PORT_LCD_DB6, GPIO_LCD_DB6, SET);
/* 配置DB7 */
gpio_mode_set(PORT_LCD_DB11, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB11);
gpio_output_options_set(PORT_LCD_DB11, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB11);
gpio_bit_write(PORT_LCD_DB11, GPIO_LCD_DB11, SET);
/* 配置DB8 */
gpio_mode_set(PORT_LCD_DB8, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB8);
gpio_output_options_set(PORT_LCD_DB8, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB8);
gpio_bit_write(PORT_LCD_DB8, GPIO_LCD_DB8, SET);
/* 配置DB9 */
gpio_mode_set(PORT_LCD_DB9, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB9);
gpio_output_options_set(PORT_LCD_DB9, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB9);
gpio_bit_write(PORT_LCD_DB9, GPIO_LCD_DB9, SET);
/* 配置DB10 */
gpio_mode_set(PORT_LCD_DB10, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB10);
gpio_output_options_set(PORT_LCD_DB10, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB10);
gpio_bit_write(PORT_LCD_DB10, GPIO_LCD_DB10, SET);
/* 配置DB11 */
gpio_mode_set(PORT_LCD_DB11, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB11);
gpio_output_options_set(PORT_LCD_DB11, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB11);
gpio_bit_write(PORT_LCD_DB11, GPIO_LCD_DB11, SET);
/* 配置DB12 */
gpio_mode_set(PORT_LCD_DB12, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB12);
gpio_output_options_set(PORT_LCD_DB12, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, PORT_LCD_DB12);
gpio_bit_write(PORT_LCD_DB12, PORT_LCD_DB12, SET);
/* 配置DB13 */
gpio_mode_set(PORT_LCD_DB13, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB13);
gpio_output_options_set(PORT_LCD_DB13, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB13);
gpio_bit_write(PORT_LCD_DB13, GPIO_LCD_DB13, SET);
/* 配置DB14 */
gpio_mode_set(PORT_LCD_DB14, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB14);
gpio_output_options_set(PORT_LCD_DB14, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB14);
gpio_bit_write(PORT_LCD_DB14, GPIO_LCD_DB14, SET);
/* 配置DB15 */
gpio_mode_set(PORT_LCD_DB15, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_LCD_DB15);
gpio_output_options_set(PORT_LCD_DB15, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB15);
gpio_bit_write(PORT_LCD_DB15, GPIO_LCD_DB15, SET);
}
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
将 lcd_init.h 中的LCD 端口定义 宏,修改为图 1.14.3.22 样式。
#define LCD_CS_SET gpio_bit_write(PORT_LCD_CS, GPIO_LCD_CS, SET)//CS// GPIOA->BSRR=1<<0 //片选端口 PA0
#define LCD_RS_SET gpio_bit_write(PORT_LCD_DC, GPIO_LCD_DC, SET)//DC //GPIOA->BSRR=1<<1 //数据/命令 PA1
#define LCD_WR_SET gpio_bit_write(PORT_LCD_WR, GPIO_LCD_WR, SET)//WR//GPIOA->BSRR=1<<2 //写数据 PA2
#define LCD_RD_SET gpio_bit_write(PORT_LCD_RD, GPIO_LCD_RD, SET)//RD//GPIOA->BSRR=1<<3 //读数据 PA3
#define LCD_RST_SET gpio_bit_write(PORT_LCD_RES, GPIO_LCD_RES, SET)//RES //GPIOA->BSRR=1<<4 //复位 PA4
#define LCD_CS_CLR gpio_bit_write(PORT_LCD_CS, GPIO_LCD_CS, RESET)//CSGPIOA->BRR=1<<0 //片选端口 PA0
#define LCD_RS_CLR gpio_bit_write(PORT_LCD_DC, GPIO_LCD_DC, RESET)//DCGPIOA->BRR=1<<1 //数据/命令 PA1
#define LCD_WR_CLR gpio_bit_write(PORT_LCD_WR, GPIO_LCD_WR, RESET)//WRGPIOA->BRR=1<<2 //写数据 PA2
#define LCD_RD_CLR gpio_bit_write(PORT_LCD_RD, GPIO_LCD_RD, RESET)//RDGPIOA->BRR=1<<3 //读数据 PA3
#define LCD_RST_CLR gpio_bit_write(PORT_LCD_RES, GPIO_LCD_RES, RESET)//RES GPIOA->BRR=1<<4 //复位 PA4
2
3
4
5
6
7
8
9
10
11
因为是并口屏,传输 8 位的数据,是一根线一个位,8 个位数据就是 8 根线。所以我们需要将一个 8 位的数据,装载到 8 根数据线上。在** lcd_init.h** 中添加以下代码,方便后续的数据传输和端口修改。
// x ? 置1 : 置0
#define PIN_HIGH_OR_LOW(port,gpio,x) {((x) ? (GPIO_OCTL(port)|=(uint32_t)(gpio)) : (GPIO_OCTL(port)&=~(uint32_t)(gpio)));}
// 先清除该位,空出位置 根据x判断是设置位还是清除位
#define BIT_DB15(x) { GPIO_OCTL(PORT_LCD_DB15) &= ((uint32_t)~(GPIO_LCD_DB15)); PIN_HIGH_OR_LOW( PORT_LCD_DB15, GPIO_LCD_DB15, x) }
#define BIT_DB14(x) { GPIO_OCTL(PORT_LCD_DB14) &= ((uint32_t)~(GPIO_LCD_DB14)); PIN_HIGH_OR_LOW( PORT_LCD_DB14, GPIO_LCD_DB14, x) }
#define BIT_DB13(x) { GPIO_OCTL(PORT_LCD_DB13) &= ((uint32_t)~(GPIO_LCD_DB13)); PIN_HIGH_OR_LOW( PORT_LCD_DB13, GPIO_LCD_DB13, x) }
#define BIT_DB12(x) { GPIO_OCTL(PORT_LCD_DB12) &= ((uint32_t)~(GPIO_LCD_DB12)); PIN_HIGH_OR_LOW( PORT_LCD_DB12, GPIO_LCD_DB12, x) }
#define BIT_DB11(x) { GPIO_OCTL(PORT_LCD_DB11) &= ((uint32_t)~(GPIO_LCD_DB11)); PIN_HIGH_OR_LOW( PORT_LCD_DB11, GPIO_LCD_DB11, x) }
#define BIT_DB10(x) { GPIO_OCTL(PORT_LCD_DB10) &= ((uint32_t)~(GPIO_LCD_DB10)); PIN_HIGH_OR_LOW( PORT_LCD_DB10, GPIO_LCD_DB10, x) }
#define BIT_DB9(x) { GPIO_OCTL(PORT_LCD_DB9) &= ((uint32_t)~(GPIO_LCD_DB9)); PIN_HIGH_OR_LOW( PORT_LCD_DB9, GPIO_LCD_DB9, x) }
#define BIT_DB8(x) { GPIO_OCTL(PORT_LCD_DB8) &= ((uint32_t)~(GPIO_LCD_DB8)); PIN_HIGH_OR_LOW( PORT_LCD_DB8, GPIO_LCD_DB8, x) }
#define BIT_DB7(x) { GPIO_OCTL(PORT_LCD_DB7) &= ((uint32_t)~(GPIO_LCD_DB7)); PIN_HIGH_OR_LOW( PORT_LCD_DB7, GPIO_LCD_DB7, x) }
#define BIT_DB6(x) { GPIO_OCTL(PORT_LCD_DB6) &= ((uint32_t)~(GPIO_LCD_DB6)); PIN_HIGH_OR_LOW( PORT_LCD_DB6, GPIO_LCD_DB6, x) }
#define BIT_DB5(x) { GPIO_OCTL(PORT_LCD_DB5) &= ((uint32_t)~(GPIO_LCD_DB5)); PIN_HIGH_OR_LOW( PORT_LCD_DB5, GPIO_LCD_DB5, x) }
#define BIT_DB4(x) { GPIO_OCTL(PORT_LCD_DB4) &= ((uint32_t)~(GPIO_LCD_DB4)); PIN_HIGH_OR_LOW( PORT_LCD_DB4, GPIO_LCD_DB4, x) }
#define BIT_DB3(x) { GPIO_OCTL(PORT_LCD_DB3) &= ((uint32_t)~(GPIO_LCD_DB3)); PIN_HIGH_OR_LOW( PORT_LCD_DB3, GPIO_LCD_DB3, x) }
#define BIT_DB2(x) { GPIO_OCTL(PORT_LCD_DB2) &= ((uint32_t)~(GPIO_LCD_DB2)); PIN_HIGH_OR_LOW( PORT_LCD_DB2, GPIO_LCD_DB2, x) }
#define BIT_DB1(x) { GPIO_OCTL(PORT_LCD_DB1) &= ((uint32_t)~(GPIO_LCD_DB1)); PIN_HIGH_OR_LOW( PORT_LCD_DB1, GPIO_LCD_DB1, x) }
#define BIT_DB0(x) { GPIO_OCTL(PORT_LCD_DB0) &= ((uint32_t)~(GPIO_LCD_DB0)); PIN_HIGH_OR_LOW( PORT_LCD_DB0, GPIO_LCD_DB0, x) }
#define DATAOUT(dat)
{
BIT_DB15( (dat>>15)&0x01 );
BIT_DB14( (dat>>14)&0x01 );
BIT_DB13( (dat>>13)&0x01 );
BIT_DB12( (dat>>12)&0x01 );
BIT_DB11( (dat>>11)&0x01 );
BIT_DB10( (dat>>10)&0x01 );
BIT_DB9( (dat>>9)&0x01 );
BIT_DB8( (dat>>8)&0x01 );
BIT_DB7( (dat>>7)&0x01 );
BIT_DB6( (dat>>6)&0x01 );
BIT_DB5( (dat>>5)&0x01 );
BIT_DB4( (dat>>4)&0x01 );
BIT_DB3( (dat>>3)&0x01 );
BIT_DB2( (dat>>2)&0x01 );
BIT_DB1( (dat>>1)&0x01 );
BIT_DB0( (dat>>0)&0x01 );
}
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
将 lcd.c 中的 void LCD_Init(void) 函数里 用于背光控制的 LCD_LED = 1 换为
gpio_bit_write(RCU_LCD_RES, GPIO_LCD_RES, SET);
将读取颜色的函数注释。
到这里就移植完成了,请移步到 1.14.4 节进行移植验证。
1.14.4 移植验证
在 main.c 中输入代码如下
#include "gd32f4xx.h"
#include "systick.h"
#include "LCD.h"
#include "test.h"
int main(void)
{
float t = 0;
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config();//滴答定时器初始化 1ms
LCD_Init();
LCD_Fill(0,0,320,480,YELLOW);
while(1)
{
main_test();
Test_Color();
Test_FillRec();
Test_Circle();
English_Font_test();
Chinese_Font_test();
Pic_test();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
上电效果
移植成功案例