1602显示屏
模块来源
采购链接:
https://item.taobao.com/item.htm?spm=a21n57.1.0.0.7171523cYLjveZ&id=20090565604&ns=1&abbucket=0#detail
资料下载链接:
http://pan.baidu.com/s/1c0ARSIk
规格参数
文件1.18.2.1 屏幕规格书 工作电压:3~5V
工作电流:最大24mA
模块尺寸:12(H) x 38(V) MM
像素大小:16列2行 每一列8x8的点阵
通信协议:8位并口
移植过程
我们的目标是将例程移植至天空星GD32F407上。按照以下步骤,即可完成移植。
- 将源码导入工程;
- 根据编译报错处进行粗改;
- 修改引脚配置;
- 修改时序配置;
- 移植验证。
查看资料
在main.c文件发现对屏幕的初始化配置函数为 OLCD_Init(); ,该函数里包含了对屏幕引脚的配置、对屏幕显示方式的配置。
我们主要修改的是引脚的初始化与时序的延时修改。
移植至工程
将厂家资料路径下的1602.c文件,复制到自己的工程中。自己的工程至少需要有毫秒级延时函数。
打开自己的工程,将我们刚刚复制过来的文件导入.c文件。
然后我们新建一个1602.h文件
添加sys.h文件,它的内容主要是位带操作部分,位带操作的文件在入门手册里面的位带操作章节。
将sys.h文件复制到工程的boar目录下即可。
引脚选择
选择好引脚后,进入工程开始编写屏幕引脚初始化代码。
为了方便后续移植,我在1602.h处宏定义了每一个引脚,后续根据需要进行修改即可。
c
//-------------引脚定义--------------//
#define RCU_LCD_RS RCU_GPIOA//RS
#define PORT_LCD_RS GPIOA
#define GPIO_LCD_RS GPIO_PIN_0
#define RCU_LCD_RW RCU_GPIOA//RW
#define PORT_LCD_RW GPIOA
#define GPIO_LCD_RW GPIO_PIN_1
#define RCU_LCD_E RCU_GPIOA//E
#define PORT_LCD_E GPIOA
#define GPIO_LCD_E GPIO_PIN_2
#define RCU_LCD_DB0 RCU_GPIOA//DB0
#define PORT_LCD_DB0 GPIOA
#define GPIO_LCD_DB0 GPIO_PIN_3
#define RCU_LCD_DB1 RCU_GPIOA//DB1
#define PORT_LCD_DB1 GPIOA
#define GPIO_LCD_DB1 GPIO_PIN_4
#define RCU_LCD_DB2 RCU_GPIOE//DB2
#define PORT_LCD_DB2 GPIOE
#define GPIO_LCD_DB2 GPIO_PIN_7
#define RCU_LCD_DB3 RCU_GPIOE//DB3
#define PORT_LCD_DB3 GPIOE
#define GPIO_LCD_DB3 GPIO_PIN_8
#define RCU_LCD_DB4 RCU_GPIOE//DB4
#define PORT_LCD_DB4 GPIOE
#define GPIO_LCD_DB4 GPIO_PIN_9
#define RCU_LCD_DB5 RCU_GPIOE//DB5
#define PORT_LCD_DB5 GPIOE
#define GPIO_LCD_DB5 GPIO_PIN_10
#define RCU_LCD_DB6 RCU_GPIOE//DB6
#define PORT_LCD_DB6 GPIOE
#define GPIO_LCD_DB6 GPIO_PIN_11
#define RCU_LCD_DB7 RCU_GPIOE//DB7
#define PORT_LCD_DB7 GPIOE
#define GPIO_LCD_DB7 GPIO_PIN_12
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
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
图1.18.3.18 软件SPI引脚宏
将1602.c修改为如下代码。
c
void LCDInit(void) //LCM初始化
{
/* 开启引脚时钟 */
rcu_periph_clock_enable(RCU_LCD_RS);
rcu_periph_clock_enable(RCU_LCD_RW);
rcu_periph_clock_enable(RCU_LCD_E);
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);
/* RS配置为上拉推挽输出50MHZ模式 */
gpio_mode_set(PORT_LCD_RS,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RS);
gpio_output_options_set(PORT_LCD_RS,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_RS);
gpio_mode_set(PORT_LCD_RW,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RW);
gpio_output_options_set(PORT_LCD_RW,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_RW);
gpio_mode_set(PORT_LCD_E,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_E);
gpio_output_options_set(PORT_LCD_E,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_E);
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_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_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_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_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_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_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_mode_set(PORT_LCD_DB7,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_DB7);
gpio_output_options_set(PORT_LCD_DB7,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB7);
LCD_Data(0);
WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号
delay_1ms(5);
WriteCommandLCD(0x38,0);
delay_1ms(5);
WriteCommandLCD(0x38,0);
delay_1ms(5);
WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号
delay_1ms(5);
WriteCommandLCD(0x08,1); //关闭显示
delay_1ms(5);
WriteCommandLCD(0x01,1); //显示清屏
delay_1ms(5);
WriteCommandLCD(0x06,1); // 显示光标移动设置
delay_1ms(5);
WriteCommandLCD(0x0C,1); // 显示开及光标设置
}
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
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
将1602.h修改如下。
c
/******************************************************************************
* 测试硬件:立创开发板·GD32E230C8T6 使用主频72Mhz 晶振8Mhz
* 版 本 号: V1.0
* 修改作者: www.lckfb.com
* 修改日期: 2023年11月02日
* 功能介绍:
*****************************************************************************
* 天空星软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:【立创·GD32E230C8T6开发板】模块移植手册
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
******************************************************************************/
#ifndef __1602_H__
#define __1602_H__
#include "gd32e23x.h"
#include "board.h"
#ifndef u8
#define u8 uint8_t
#endif
#ifndef u16
#define u16 uint16_t
#endif
#ifndef u32
#define u32 uint32_t
#endif
#define RCU_LCD_RS RCU_GPIOC//RS
#define PORT_LCD_RS GPIOC
#define GPIO_LCD_RS GPIO_PIN_13
#define RCU_LCD_RW RCU_GPIOC//RW
#define PORT_LCD_RW GPIOC
#define GPIO_LCD_RW GPIO_PIN_14
#define RCU_LCD_E RCU_GPIOC//E
#define PORT_LCD_E GPIOC
#define GPIO_LCD_E GPIO_PIN_15
#define RCU_LCD_DB0 RCU_GPIOA//DB0
#define PORT_LCD_DB0 GPIOA
#define GPIO_LCD_DB0 GPIO_PIN_0
#define RCU_LCD_DB1 RCU_GPIOA//DB1
#define PORT_LCD_DB1 GPIOA
#define GPIO_LCD_DB1 GPIO_PIN_1
#define RCU_LCD_DB2 RCU_GPIOA//DB2
#define PORT_LCD_DB2 GPIOA
#define GPIO_LCD_DB2 GPIO_PIN_2
#define RCU_LCD_DB3 RCU_GPIOA//DB3
#define PORT_LCD_DB3 GPIOA
#define GPIO_LCD_DB3 GPIO_PIN_3
#define RCU_LCD_DB4 RCU_GPIOA//DB4
#define PORT_LCD_DB4 GPIOA
#define GPIO_LCD_DB4 GPIO_PIN_4
#define RCU_LCD_DB5 RCU_GPIOA//DB5
#define PORT_LCD_DB5 GPIOA
#define GPIO_LCD_DB5 GPIO_PIN_5
#define RCU_LCD_DB6 RCU_GPIOA//DB6
#define PORT_LCD_DB6 GPIOA
#define GPIO_LCD_DB6 GPIO_PIN_6
#define RCU_LCD_DB7 RCU_GPIOA//DB7
#define PORT_LCD_DB7 GPIOA
#define GPIO_LCD_DB7 GPIO_PIN_7
// 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_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 LCD_RS(x) gpio_bit_write(PORT_LCD_RS, GPIO_LCD_RS, x)//定义引脚
#define LCD_RW(x) gpio_bit_write(PORT_LCD_RW, GPIO_LCD_RW, x)
#define LCD_E(x) gpio_bit_write(PORT_LCD_E, GPIO_LCD_E, x)
//#define LCD_Data(x) {}
#define Busy 0x80 //用于检测LCD状态字中的Busy标识
#define LCD_Data(dat){\
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 ); \
}
void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD);
void LCDInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData);
#endif
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
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
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
到这里就移植完成了。
1602.c文件改成这样
c
#include "1602.h"
#include "board.h"
#define Busy 0x80 //用于检测LCD状态字中的Busy标识
//写数据
void WriteDataLCD(unsigned char WDLCD)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 0; //若晶振速度太高可以在这后加小的延时
delay_ms(2);
LCD_Data(WDLCD);
LCD_E = 1;
delay_ms(5);
LCD_E = 0;
}
//写指令
void WriteCommandLCD(unsigned char WCLCD, unsigned char BuysC) //BuysC为0时忽略忙检测
{
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
LCD_Data(WCLCD);
LCD_E = 1;
delay_ms(5);
LCD_E = 0;
}
void LCDInit(void) //LCM初始化
{
/* 开启引脚时钟 */
rcu_periph_clock_enable(RCU_LCD_RS);
rcu_periph_clock_enable(RCU_LCD_RW);
rcu_periph_clock_enable(RCU_LCD_E);
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);
/* RS配置为上拉推挽输出50MHZ模式 */
gpio_mode_set(PORT_LCD_RS,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RS);
gpio_output_options_set(PORT_LCD_RS,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_RS);
gpio_mode_set(PORT_LCD_RW,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_RW);
gpio_output_options_set(PORT_LCD_RW,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_RW);
gpio_mode_set(PORT_LCD_E,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_E);
gpio_output_options_set(PORT_LCD_E,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_E);
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_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_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_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_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_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_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_mode_set(PORT_LCD_DB7,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_LCD_DB7);
gpio_output_options_set(PORT_LCD_DB7,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_LCD_DB7);
LCD_Data(0);
WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号
delay_ms(5);
WriteCommandLCD(0x38,0);
delay_ms(5);
WriteCommandLCD(0x38,0);
delay_ms(5);
WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号
delay_ms(5);
WriteCommandLCD(0x08,1); //关闭显示
delay_ms(5);
WriteCommandLCD(0x01,1); //显示清屏
delay_ms(5);
WriteCommandLCD(0x06,1); // 显示光标移动设置
delay_ms(5);
WriteCommandLCD(0x0C,1); // 显示开及光标设置
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; // 算出指令码
WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
WriteDataLCD(DData);
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[]>=0x20) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[]); //显示单个字符
ListLength++;
X++;
}
}
}
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
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
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
移植验证
在main.c中输入代码如下
c
/*
* 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
* Change Logs:
* Date Author Notes
* 2023-11-02 LCKFB-yzh first version
*/
#include "board.h"
#include "1602.h"
int main(void)
{
board_init();
bsp_uart_init();
delay_ms(500); //启动等待,等LCD讲入工作状态
LCDInit(); //LCM初始化
delay_ms(5); //延时片刻(可不要)
while(1)
{
DisplayListChar(0, 0, (uint8_t *)"www.lckfb.com");
DisplayListChar(0, 5, (uint8_t *)"kfb");
delay_ms(1000);
}
}
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
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
移植成功案例:
代码下载
链接在开发板介绍
章节的资料下载!!