1、先确定屏幕的点阵结构点。

2、再确定汉字和acsII字符的数据

实物平面图

点阵结构图

显示汉字和符号时候,地址累加是按照1号框大小计算和显示;

画图的时候,地址累加是按照2号框大小计算和显示;

汉字显示坐标

X 坐标

Line1

80H

81H

82H

83H

84H

85H

86H

87H

Line2

90H

91H

92H

93H

94H

95H

96H

97H

Line3

88H

89H

8AH

8BH

8CH

8DH

8EH

8FH

Line4

98H

99H

9AH

9BH

9CH

9DH

9EH

9FH

从表格可以看出屏幕的连续地址line1-->line3-->line2-->line4

画图时的地址是:写入行地址后写入列地址,每八个横点为一个列地址,最小单位是每8个横点,并且是字节控制8个点。此时有64行每行128个横点即每行16个列

地址定位:  比如i < 64先写命令0x80--0x80+i定位行再写列0x80+列。然后写数据一个字节。(记得是这样写的,不太确定,因为没用到画图做项目,但实践过一次)

显示的字符或者汉字

首先汉字是两个字节一个汉字,ACSII字符是一个字节一个字符。并且编译器中的ACSII符号和中文的数据都是一样的。

比如字符‘1’的和显示屏的字库显示字符1的数据都是整数49。

汉字的数据也是和显示屏的数据一样。都是占用两个字节,而且两个字节数据一样。

使用原理:使用一个字符串,使用char类型指针一个写进屏幕地址。可以看汉字显示坐标。写两个字符显示一个汉字。0--127是ACSII,0xA0开头的是中文数据。程序下面会体现。

 验证中文数据:

首先:看出爬字的两个字节为0xc5c0

 其次:看C中的爬字的也是0xc5c0,运行vs2019观察得知是一样的数据

#include <stdio.h>int main()
{   char p1;const char* p = { "爬狗" };printf_s("%s",p);p1 = (char)p;printf_s("\r\n   ");for (;*p != '\0' ; p++){printf_s("\r\n %x  ",*p);}return 0;
}

得出结论:直接使用字符串进行按照字节打印输出。

 屏幕的驱动引脚表:

引脚号

引脚名称

方向

功能说明

1

GND

-

模块的电源地

2

VCC

-

模块的电源正端

3

V0

-

LCD 驱动电压输入端

4

RS(CS)

H/L

并行的指令/数据选择信号;串行的片选信号

5

R/W(SID)

H/L

并行的读写选择信号;串行的数据口

6

E(CLK)

H/L

并行的使能信号;串行的同步时钟

7

DB0

H/L

数据 0

8

DB1

H/L

数据 1

9

DB2

H/L

数据 2

10

DB3

H/L

数据 3

11

DB4

H/L

数据 4

12

DB5

H/L

数据 5

13

DB6

H/L

数据 6

14

DB7

H/L

数据 7

15

PSB

H/L

并/串行接口选择:H-并行;L-串行

16

NC

空脚

17

/RST

H/L

复位 低电平有效

18

VOUT

倍压输出脚 (VDD=+3.3V 有效)

19

LED_A

-

背光源正极(LED+5V)

20

LED_K

-

背光源负极(LED-OV)

并行和串行时序图:

并行写

并行读:用来读取繁忙与否和当前游标地址

一般屏幕显示,需要进行刷新时间,需要等待不繁忙后才能继续写

串行写:但是没有读

串口需要等待屏幕操作时间,然后再写,接下来的命令表可以体现。每个命令大概需要72us

串行数据传送共分三个字节完成: 第一字节:串口控制—格式 11111ABC

A 为数据传送方向控制:H 表示数据从 LCD 到 MCU,L 表示数据从 MCU 到 LCD B 为数据类型选择:H 表示数据是显示数据,L 表示数据是控制指令

C 固定为 0

第二字节:(并行)8 位数据的高 4 位—格式 DDDD0000 第三字节:(并行)8 位数据的低 4 位—格式 0000DDDD 串行接口时序参数:(测试条件:T=25℃  VDD=4.5V)

命令表

可以从最后一列表格看出每个命令需要的操作时间。

1、指令表 1:(RE=0:基本指令集):写入命令0x30就是这个表

指令

指令码

说明

执行时 间

( 540

KHZ)

R S

R W

DB 7

DB 6

DB 5

DB 4

DB 3

DB 2

DB 1

DB 0

清除显 示

0

0

0

0

0

0

0

0

0

1

将 DDRAM 填满“20H”,并且 设定 DDRAM 的地址计数器

(AC)到“00H”

4.6ms

地址归 位

0

0

0

0

0

0

0

0

1

X

设定 DDRAM 的地址计数器

(AC)到“00H”,并且将游 标移到开头原点位置;这个指 令并不改变 DDRAM 的内容

4.6ms

进入点 设定

0

0

0

0

0

0

0

1

I/D

S

指定在资料的读取与写入时, 设定游标移动方向及指定显示 的移位

72us

显示状 态 开/关

0

0

0

0

0

0

1

D

C

B

D=1:整体显示 ON C=1:游标 ON B=1:游标位置 ON

72us

游标或 显示移 位控制

0

0

0

0

0

1

S/ C

R/ L

X

X

设定游标的移动与显示的移位 控制位元;这个指令并不改变 DDRAM 的内容

72us

功能设 定

0

0

0

0

1

DL

X

0

RE

X

X

DL=1 (必须设为 1) RE=1: 扩充指令集动作 RE=0: 基本指令集动作

72us

设 定

CGRA

M 地 址

0

0

0

1

AC 5

AC 4

AC 3

AC 2

AC 1

AC 0

设定 CGRAM 地址到地址计数 器(AC)

72us

设 定 DDRA M

地址

0

0

1

AC 6

AC 5

AC 4

AC 3

AC 2

AC 1

AC 0

设定 DDRAM 地址到地址计数 器(AC)

72us

读取忙 碌标志

(BF) 和地址

0

1

BF

AC 6

AC 5

AC 4

AC 3

AC 2

AC 1

AC 0

读取忙碌标志(BF)可以确认 内部动作是否完成,同时可以 读出地址计数器(AC)的值

0us

写资料 到 RAM

1

0

D7

D6

D5

D4

D3

D2

D1

D0

写 入 资 料 到 内 部 的 RAM

( DDRAM/CGRAM/IRAM/G DRAM)

72us

读 出

RAM

1

1

D7

D6

D5

D4

D3

D2

D1

D0

从 内 部 RAM   读 取 资 料

( DDRAM/CGRAM/IRAM/G

72us

的值

DRAM)

指令表—2:(RE=1:扩充指令集)写入命令0x34就是这个表

指令

指令码

说明

执 行 时 间

(540KHZ)

RS

R

W

DB

7

DB

6

DB

5

DB

4

DB

3

DB

2

DB

1

DB

0

待 命 模 式

0

0

0

0

0

0

0

0

0

1

将  DDRAM  填 满 “ 20H ”, 并 且 设 定 DDRAM 的地址计数 器(AC)到“00H”

72us

卷 动 地 址 或 IRAM 地

址选择

0

0

0

0

0

0

0

0

1

SR

SR=1:允许输入垂直 卷动地址 SR=0:允许输入 IRAM 地址

72us

反 白 选 择

0

0

0

0

0

0

0

1

R1

R0

选择 4 行中的任一行 作反白显示,并可决定 反白与否

72us

睡 眠 模 式

0

0

0

0

0

0

1

SL

X

X

SL=1:脱离睡眠模式 SL=0:进入睡眠模式

72us

扩 充 功 能设定

0

0

0

0

1

1

X

1

RE

G

0

RE=1: 扩充指令集动 作

RE=0: 基本指令集动 作

G=1 :绘图显示 ON G=0  :绘图显示 OFF

72us

设 定

IRAM 地

址 或 卷 动地址

0

0

0

1

AC 5

AC 4

AC 3

AC 2

AC 1

AC0

SR=1:AC5—AC0 为

垂直卷动地址 SR=0:AC3—AC0 为 ICON IRAM 地址

72us

设 定 绘 图 RAM

地址

0

0

1

AC 6

AC 5

AC 4

AC 3

AC 2

AC 1

AC0

设定 CGRAM 地址到 地址计数器(AC)

72us

这个表的命令不够详细有些命令没有具体说明,官方手册也是如此。详细使用需要自己验证。一般几个命令够用了如下:

  1. 清除显 示
  2. 地址归 位
  3. 显示状 态 开/关
  4. 游标或 显示移 位控制
  5. 设 定 DDRA M地址
  6. 读取忙 碌标志(BF) 和地址
  7. 扩 充 功 能设定
  8. 设 定 绘 图 RAM地址

驱动程序如下:

/******************************   以下为12864 管脚的定义 ***************************************/
/*******************************                         ***************************************/
#define SERIAL 1
#define PARALLEL  2
#define MODE  PARALLEL#define   PSB(n)   GPIO_WriteBit(GPIOA, GPIO_Pin_8,(BitAction) n);//H并行   L串行#define   RS(n)    GPIO_WriteBit(GPIOA, GPIO_Pin_10,(BitAction) n); //并行H数据 L命令
#define   CS(n)    GPIO_WriteBit(GPIOA, GPIO_Pin_10, (BitAction) n) //串行片选1有效#define   LED_K(n)    GPIO_WriteBit(GPIOA, GPIO_Pin_11,(BitAction) n);// 背光负,0 接通地
#define   LCD_RST(n)  GPIO_WriteBit(GPIOA, GPIO_Pin_12,(BitAction) n); //LCD复位 0有效#define   RW(n)    GPIO_WriteBit(GPIOF, GPIO_Pin_0,(BitAction) n);//并行 0写 1读
#define   EN(n)    GPIO_WriteBit(GPIOF, GPIO_Pin_1,(BitAction) n);//并行 0 1 0 边沿信号
#define   SID(n)    GPIO_WriteBit(GPIOF, GPIO_Pin_0, (BitAction) n) //串行 信号线
#define   CLK(n)    GPIO_WriteBit(GPIOF, GPIO_Pin_1, (BitAction) n) //串行 时钟线#define   LD0(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_0,(BitAction) n);//并行数据位
#define   LD1(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_1,(BitAction) n);
#define   LD2(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_2,(BitAction) n);
#define   LD3(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction) n);
#define   LD4(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_4,(BitAction) n);
#define   LD5(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_5,(BitAction) n);
#define   LD6(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_6,(BitAction) n);
#define   LD7(n)    GPIO_WriteBit(GPIOC, GPIO_Pin_7,(BitAction) n);
#include "main.h"#if MODE==PARALLELvoid bus_check()  //芯片繁忙检测
{GPIO_InitTypeDef GPIO_InitStruct;RS(0);   RW(1);    LD0(1);  //并行数据位7位拉高LD1(1);LD2(1);LD3(1);LD4(1);LD5(1);LD6(1);LD7(1);EN(1);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //并行数据引脚改为输入GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;  GPIO_Init(GPIOC, &GPIO_InitStruct);
//  delay_ms(2);while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7)==1);//读取最高位,为0就是不繁忙GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;         //改为输出GPIO_Init(GPIOC, &GPIO_InitStruct);EN(0);}void led12864_init()
{GPIO_InitTypeDef GPIO_InitStruct;RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOC, ENABLE);RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOF, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;  //并行数据脚初始化GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;  GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 |GPIO_Pin_11 | GPIO_Pin_12 ;//PSB RS LED_K  LCD_RSTGPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;   // RW ENGPIO_Init(GPIOF, &GPIO_InitStruct);PSB(1);//并行选择LED_K(0);  LCD_RST(0);//复位LCD_RST(1);//delay_ms(5);write_commoned(0x30);//启动基本命令write_commoned(0x04);//游标移动方向write_commoned(0x0e);//游标显示或者反显write_commoned(0x01);//清屏write_commoned(0x02);//地址和游标回归首行首列write_commoned(0x80);//显示地址回归首行首列//  write_data(0xbb);
//  write_data(0xb6);}void write_commoned(unsigned char data)
{bus_check();RS(0);//命令 RW(0);//写EN(0);LD0(((data>>0)&0x01));LD1(((data>>1)&0x01));LD2(((data>>2)&0x01));LD3(((data>>3)&0x01));LD4(((data>>4)&0x01));LD5(((data>>5)&0x01));LD6(((data>>6)&0x01));LD7(((data>>7)&0x01));EN(1);EN(0);}void write_data(unsigned char data)
{bus_check();RS(1);//s数据RW(0);//写EN(0);LD0(((data>>0)&0x01));LD1(((data>>1)&0x01));LD2(((data>>2)&0x01));LD3(((data>>3)&0x01));LD4(((data>>4)&0x01));LD5(((data>>5)&0x01));LD6(((data>>6)&0x01));LD7(((data>>7)&0x01));   EN(1);EN(0);}void test(unsigned char data)
{unsigned char i,j;write_commoned(0x01);write_commoned(0x34);for(i=0;i<32;i++){write_commoned(0x80+i);write_commoned(0x80);for(j=0;j<32;j++){write_data(data);}}write_commoned(0x36);write_commoned(0x30);}#endif/*  hang 显示在屏幕第几行                     value should 1-4lie  第几个格子,一个格子可容纳两个字符  value should 0-7*a   指向的字符指针,可以是字符串chang  显示字符长度
*/
void display(unsigned char hang , unsigned char lie ,char *a , unsigned char chang)
{static unsigned char temp_data;switch( hang)//每一行的起始坐标是不一样的{case 1:temp_data = 0x80;break;  //第一行case 2:temp_data = 0x90;break;  //第二行case 3:temp_data = 0x88;break;  //第三行case 4:temp_data = 0x98;break;  //第四行default :return;}if(lie > 8){ return; }//一个列可以容纳两个acsII字符;write_commoned( temp_data + lie); //显示定位行列for(;*a != '\0'&&chang>0; a++,chang--){write_data( (unsigned char)*a);}}

串行程序代码:跟上面的并行共用宏定义


#if MODE==SERIALvoid led12864_init( void )
{GPIO_InitTypeDef GPIO_InitStruct;RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA, ENABLE);RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOF, ENABLE);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 |GPIO_Pin_11 | GPIO_Pin_12 ;//PSB RS LED_K  LCD_RSTGPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;   // RW EN GPIO_Init(GPIOF, &GPIO_InitStruct);CLK(0);SID(0);CS(1) ;PSB(0);LCD_RST(1);delay_us( 1000);//物理复位,需要等待点时间write_commoned( 0x30); /*功能设置:一次送8位数据,基本指令集*/ write_commoned( 0x04); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/write_commoned( 0x0e);  /*显示设定:开显示,显示光标,当前显示位反白闪动*/ write_commoned( 0x01);  /*清DDRAM*/ delay_ms( 5);               /* 等待4.6ms清屏完毕*/write_commoned( 0x02); /*DDRAM地址归位*/ write_commoned( 0x80); /*把显示地址设为0X80,即为第一行的首位*/
//  write_data( 0x7f);    //显示一个字符
//  write_commoned( 0x90); //第二行
//  write_data( 0xbb); //显示一个汉字
//  write_data( 0xb6);  }void write_byte( unsigned char data)
{   static unsigned char i = 0;CS(1) ;CLK(0);delay_us(72); //串行每个写都基本需要72us反应,代替了并行的繁忙等待for(i = 0; i < 8; i++){if((data&0x80) == 0x80){ SID(1);}else  { SID(0);}data = data<<1;CLK(1);CLK(0);    }CS(0) ;
}void write_commoned( unsigned char data)
{write_byte( 0xf8);   //写命令固定格式write_byte( 0xf0&data); //命令的高四write_byte( ((0x0f&data)<<4) ); //命令的低四
}void write_data( unsigned char data)
{write_byte( 0xfa);//写数据的固定格式write_byte( 0xf0&data); //写数据的高四write_byte( ((0x0f&data)<<4) );//写数据的低四
}void test( unsigned char data)
{static unsigned char i = 0,j = 0;write_commoned( 0x01);//清屏delay_us( 46000);//清屏固定等待4.6mswrite_commoned( 0x34);for(i = 0;i < 64;i++){  write_commoned( 0x80+i); write_commoned( 0x80); for(j = 0; j < 32; j++){ write_data( data);}}write_commoned( 0x36);write_commoned( 0x30);}#endif/*画图函数*/void write_picture(unsigned char *p)
{static unsigned char i = 0,j = 0;
//  write_commoned( 0x01);write_commoned( 0x34);//关闭绘画for(i = 0;i < 32; i++) //打印第一第三行{  write_commoned( 0x80+i); //点的行定位          write_commoned( 0x80);   //点的列定位  行的每八个点为下一个列 for(j = 0; j < 16; j++){write_data( *p);p++;// write_commoned( 0x36);}}for(i = 0;i < 32; i++)//打印第二第四行{  write_commoned( 0x80+i); write_commoned( 0x88); for(j = 0; j < 16; j++){write_data( *p);p++;// write_commoned( 0x36);}}write_commoned( 0x36);//开启绘画write_commoned( 0x30);//开启基本命令
}

在使用屏幕的时候的总结:无法单独定位到某个字节的位置,比如:0x80首行首列,0x81是首行第二列。但是首行首列和首行第二列之间存在两个字节的空间。所以地址不能定位到空间中的第二个字节的位置 。

或者这样说:地址定位只能按照两个字节大小来定位。

带中文字库的12864驱动笔记相关推荐

  1. 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】

    转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...

  2. 带中文字库的12864LCD显示程序

    //带中文字库的12864LCD显示程序 #include <reg52.H> #include <intrins.H> #define uchar unsigned char ...

  3. mipi接口 1280(RGB)*720 LCD屏开发驱动笔记帖

    ps:创业开发产品,自学笔记,不一定适合教材性的阅读,零碎整理,自我总结用 材料:4.1寸lcd屏两块,屏自带触控,屏幕资料具备,rk3399和MK8788开发版上分别开发. 开发环境: 1]rk33 ...

  4. 嵌入式Linux驱动笔记(五)------学习platform设备驱动

    你好!这里是风筝的博客, 欢迎和我一起交流. 设备是设备,驱动是驱动. 如果把两个糅合写一起,当设备发生变化时,势必要改写整个文件,这是非常愚蠢的做法.如果把他们分开来,当设备发生变化时,只要改写设备 ...

  5. 荣耀笔记本Linux刷win10,笔者亲自带你体验,荣耀笔记本该怎么刷Win10系统?

    原标题:笔者亲自带你体验,荣耀笔记本该怎么刷Win10系统? 2019年双十一购物狂欢节已经落下帷幕,荣耀笔记本MagicBook斩获了京东平台16.1英寸轻薄本销量.销售额双冠军,可见小伙伴还是对荣 ...

  6. Linux 自带的LED 灯驱动实验

    目录 Linux 内核自带LED 驱动使能 Linux 内核自带LED 驱动简介 LED 灯驱动框架分析 module_platform_driver 函数简析 gpio_led_probe 函数简析 ...

  7. 嵌入式Linux驱动笔记--转自风筝丶

    为了阅读学习方便,将系列博客的网址进行粘贴,感谢原博客的分享. 嵌入式Linux驱动笔记(一)------第一个LED驱动程序 嵌入式Linux驱动笔记(二)------定时器 嵌入式Linux驱动笔 ...

  8. charging hw bq25601充电驱动笔记

    charging hw bq25601充电驱动笔记 #include "../bq25601.h"/* ====================================== ...

  9. AI公开课:19.05.30 瞿炜-新东方AI研究院院长《做懂教育的AI:把未来带进现实》课堂笔记以及个人感悟

    AI公开课:19.05.30 瞿炜-新东方AI研究院院长<做懂教育的AI:把未来带进现实>课堂笔记以及个人感悟 导读      瞿炜博士,先后毕业于北京理工大学 .中国科学院大学.美国伊利 ...

最新文章

  1. windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
  2. 2021第六届数维杯大学生数学建模竞赛赛题_B 中小城市地铁运营与建设优化设计
  3. 最长递增子序列Python解法
  4. 操作系统内存管理问题集锦
  5. CSS3 多列布局的column-gap 和 column-rule属性
  6. GitOps—通过CI/CD自动化构建虚拟机模版
  7. 约翰冯诺依曼发明了什么_编程是什么——冯诺依曼结构计算机的出现
  8. java添加java_home环境变量_如何正确设置jdk环境变量JAVA_HOME?
  9. 机器学习和深度学习资源汇总(陆续更新)
  10. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON9简易测试系统
  11. 百度“有啊”困局之源:流量到交易的转化
  12. java 微信公众号发红包_【微信支付】现金红包开发者文档
  13. 电口模块(Copper SFP)、xSFP+ Cable、光模块有什么区别
  14. 各大官网的隐藏彩蛋,我感觉自己打开了新世界的大门...
  15. 软件工程导论—总体设计
  16. oracle科目余额表的查询,科目余额表查询 · selfaccount-services · 看云
  17. matlab 莫比乌斯曲面,神奇的莫比乌斯带,只有一个曲面可以无限循环
  18. 《赵成的运维体系管理课》学习笔记(4)——稳定性保障
  19. fourier feature networks
  20. 从“住”到“行” 恒大投资NEVS的背后逻辑 | 一点财经

热门文章

  1. 面试中人事问题以及回答
  2. 小白学JS,利用JavaScripty验证通过15位和18位身份证验证性别
  3. php mpm,ubuntu切换为apache+php-fpm+mpm_event
  4. 八皇后问题(又名: 高斯八皇后)
  5. Online Generation of Collision-Free Trajectories for Quadrotor Flight in Unknown Cluttered Environme
  6. upp(统一流程平台)项目范围说明书
  7. vue-cli和Element-UI搭配web前端
  8. Apache Flink_JZZ_MBY
  9. 树莓派4b使用vncview连接报错:Cannot currently show the desktop
  10. php 显示时间动态效果,使用h5 canvas实现时钟的动态效果