1、TFT-LCD屏简介

LCD( Liquid Crystal Display),即液晶显示器,可分为被动矩阵式和主动矩阵式两种不同的控制方式,主动矩阵式也称为 TFT( Thin Film Transistor)。 主动式 TFT 型的液晶显示器的结构较为复杂包括了:背光管、导光板、偏光板、滤光板、玻璃基板、配向膜、液晶材料和薄模式晶体管等等。

一个完整的 LCD 显示系统由三部分组成:主控系统、 LCD 显示控制器、 LCD 显示屏。市场上,高端一点的主控系统一般内部集成有 LCD 显示控制器;一般的单片机内部往往都是不集成有 LCD 显示控制器。主控内部没有集成 LCD 控制器的,一般需要外置 LCD 控制器或者使用自带有控制器的 LCD 显示屏。

2、LCD屏的参数

  • 分辨率:屏幕上能显示的像素点的个数,包括水平分辨率和垂直分辨率。我的开发板上面用的LCD屏的分辨率是固定的,固定为横向320x纵向480。即:水平方向有 320 个像素点,垂直方向有480个像素点。
  • LCD屏每一个像素点的颜色都是彩色的,可以理解每一个像素点都有3个彩色灯:红色、绿色、蓝色,将红绿蓝以不同的色彩强度进行混合就可以产生千变万化的彩色。
  • 颜色位深:表示 RGB (红绿蓝)颜色的二进制位数,常见的有 16BPP(bit per pixel)如: 16BPP 表示一个像素点的颜色使用 16 个二进制位表示。,总共是16位。
  • RGB565,用5位来表示红色、6位来表示绿色、5位来表示蓝色,关系如下图:

电脑的屏是24BPP的。

颜色位越大则可以显示的颜色的种类越多。

3、TFT-LCD控制器的原理

TFT-LCD控制器的型号是ILI9486,每一款屏都有一个数据手册来描述屏基本的原理。

ILI9486和CPU通讯的接口有很多,而我们选择用的接口是16位的并口,即需要16个数据管脚来传输数据。

3.1、ILI9486接口

  • IM[2:0]  选择接口模式的管脚

当IM2管脚接低电平,IM1管脚接高电平,IM0管脚接低电平,则选择的数据通讯接口是8080的16位并口通信接口

  • RESX 复位管脚

硬件复位TFT-LCD控制器

已经直接连接到RC复位电路

  • CSX CS:chip select

8080并口通讯的芯片选择管脚,简称片选脚

低电平:ILI9486被选中,并且可访问

高电平:ILI9486未被选中,不可访问、

  • DCX  数据命令

数据命令管脚,用于控制ILI9486接收到的16进制数是用于设置参数,还是用于显示在LCD屏上。

低电平:命令

高电平:数据(参数)

  • RDX  8080并口通讯的读数据时钟管脚

读信号管脚:主控在RDX的上升沿读取数据

  • WRX 8080并口通讯写数据时钟管脚

写信号管脚,主控在WRX的上升沿是发送数据。

  • DB[17:0]  总线管脚

8080并口通讯数据传输管脚,用于发送数据给ILI9486,也用于从ILI9486中读取数据。

由于我们选择的是RGB565的像素格式,只需要16个管脚即可传输16位数据。

我们只用到DB[15:0]

4、8080并口通信的原理

8080并口通信接口的简介8080并口传输位数可选:8/9/16/18,我们选择用16位并口传输。主要需要的管脚如下:

CSX:用于使能或者禁止ILI9486

WRX:写信号(写时钟),每一个时钟信号,主控发送16位数据

RDX:读信号(读时钟),每一个时钟信号,主控读取16位数据

DC  : 数据命令管脚,决定DB[15:0]的位数据是写到显存还是写到命令寄存器。

DB[15:0]:并口通信管脚

补充知识点:显存:水池存储水,显存是存储线显示图像文字字符数据的,显存越大可以存储的图像信息越多,显示效果越好。主控写图像文字数据到ILI9486时,其实就是写到显存中。

5、8080并口写时序

8080接口传输16位数据的时序图如下图所示:

①操作ILI9486时,必须将CSX管脚拉低

②在写数据或者写命令时,WRX通过拉低在拉高来模拟产生一个上升沿

③在写数据或者写命令时,RDX不产生脉冲该信号,而是保持为高电平

④下图中,一个WRX脉冲时钟可以传输16位数据

⑤DC是数据命令控制管脚,DB[15:0]的位数据是写到命令寄存器,还是写到显存,就是用DC管脚电平高低来进行区分的

该时序对应的伪代码如下:

(1)主控写命令的伪代码//CS管脚输出低电平//DC管脚拉低电平//WRX管脚拉电平//DB[15:0] 准备16位数据//WRX拉高电平
(2)主控写数据的伪代码//CS管脚输出低电平//DC管脚拉高电平//WRX管脚拉电平//DB[15:0] 准备16位数据//WRX拉高电平

8080 接口写像素点(数据)的时序

(1)一次传输传输一个像素点数据,一个像素点数据有16位

(2)最高的数据通过D15管脚输出,最低位的数据通过D0输出

(3)红色是高5位;绿色是中间6位,蓝色是最低5位

ILI9486的常用命令

1、主控发送0x01命令到ILI9486可以让ILI9486进行软件复位。发送命令的时序要求是:DC低电平,RDX保持高电平,WRX产生一个上升沿,D[15:8]的数值是无效的,D[7:0]的值是有效

2、列地址设置命令:

设置一个显示窗口的列地址。列地址的取值范围是[0:319]。

主控在设置列地址时的步骤如下:

①主控发送发送一条命令:0x2A

②主控发送列地址的起始地址(SC:start column),16位的起始地址分两次发送

③主控发送列地址的结束地址(EC:end column),16位的结束地址分两次发送

3、页(行)地址设置命令:

设置一个显示窗口的页(行)地址。页(行)地址的取值范围是[0:479]。

主控在设置页(行)地址时的步骤如下:

①主控发送发送一条命令:0x2B

②主控发送页(行)地址的起始地址(SP:start page),16位的起始地址分两次发送

③主控发送页(行)地址的结束地址(EP:end page),16位的结束地址分两次发送

4、写像素点数据到显存中:

主控首先发送命令0x2C,告诉ILI9486,主控即将发送像素点数据。主控可以连续地写像素点数据到TFT-LCD屏中的显存即上图中的D1[15:0]~Dx[15:0]~Dn[15:0]。

主控连续写像素点数据到显存中时,显存保存了一个像素点的数据后地址会自动递增来准备接收下一个像素点的数据

5、显存访问控制命令:

用于设置显存的增长方向,常用的是MY为0,MX为0,MV为0的模式

6、软件设计

原理图

其中注释的为库函数的配置

#include "stm32f4xx.h"
//常用的颜色
#define                 WHITE               0xFFFF
#define                 BLACK               0x0000
#define                 BLUE                0x001F
#define                 BRED              0xF81F
#define                 GRED                    0xFFE0
#define                 GBLUE                           0x07FF
#define                 RED                 0xF800
#define                 MAGENTA             0xF81F
#define                 GREEN               0x07E0
#define                 CYAN                0x7FFF
#define                 YELLOW              0xFFE0
#define                 BROWN                       0xBC40 //棕色
#define                 BRRED                       0xFC07 //棕红色
#define                 GRAY                        0x8430 //灰色
//字体取模
const unsigned char chinese_1[] =
{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*"中",0*/
/* (16 X 16 , 宋体 )*/};const unsigned char chinese_2[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x08,0x01,0x80,0x30,
0x0F,0xFF,0xFF,0xF0,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,
0x0F,0xFF,0xFF,0xE0,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,
0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*"中",0*/
/* (32 X 32 , 宋体 )*/};const unsigned char chinese_3[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x80,0x00,0x07,0x80,0x00,0x0C,0x00,0x00,0x60,0x00,0x07,0x80,0x00,0x1F,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,
0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,
0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,
0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,
0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x07,0x80,0x00,0x1E,0x00,0x00,0x60,0x00,0x07,
0x80,0x00,0x18,0x00,0x00,0x80,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"中",0*/
/* (64 X 64 , 宋体 )*/};const unsigned char char_1[] =
{
0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,/*"A",0*/
/* (8 X 16 , 宋体 )*/
};const unsigned char char_2[] =
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x02,0x80,0x06,0xC0,0x04,0xC0,0x04,0xC0,0x04,0xC0,0x0C,0x60,0x08,0x60,0x08,0x60,0x08,0x60,
0x1F,0xF0,0x10,0x30,0x10,0x30,0x10,0x30,0x30,0x30,0x20,0x18,0x20,0x18,0x60,0x18,0xF8,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"A",0*/
/* (16 X 32 , 宋体 )*/
};const unsigned char char_3[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x06,0xE0,0x00,0x00,0x0C,0xF0,0x00,
0x00,0x0C,0xF0,0x00,0x00,0x0C,0xF0,0x00,0x00,0x0C,0xF0,0x00,0x00,0x18,0x78,0x00,0x00,0x18,0x78,0x00,0x00,0x18,0x78,0x00,0x00,0x18,0x78,0x00,0x00,0x30,0x3C,0x00,0x00,0x30,0x3C,0x00,
0x00,0x30,0x3C,0x00,0x00,0x30,0x3C,0x00,0x00,0x70,0x1C,0x00,0x00,0x60,0x1E,0x00,0x00,0x60,0x1E,0x00,0x00,0x60,0x1E,0x00,0x00,0xE0,0x0E,0x00,0x00,0xC0,0x0F,0x00,0x00,0xC0,0x0F,0x00,
0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,0x01,0x80,0x0F,0x80,0x01,0x80,0x07,0x80,0x01,0x80,0x07,0x80,0x03,0x80,0x07,0x80,0x03,0x00,0x07,0xC0,0x03,0x00,0x03,0xC0,0x03,0x00,0x03,0xC0,
0x07,0x00,0x03,0xC0,0x06,0x00,0x03,0xE0,0x06,0x00,0x01,0xE0,0x06,0x00,0x01,0xE0,0x0E,0x00,0x01,0xE0,0x0E,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF8,0x7F,0xC0,0x0F,0xFE,0x7F,0xC0,0x0F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,/*"A",0*/
/* (32 X 64 , 宋体 )*/};const unsigned char anscii_8_16[ ]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x18,0x18,0x00,0x00,/*"!",1*/
/* (8 X 16 , 宋体 )*/0x00,0x12,0x36,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x24,0x24,0x24,0xFE,0x48,0x48,0x48,0xFE,0x48,0x48,0x48,0x00,0x00,/*"#",3*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x10,0x38,0x54,0x54,0x50,0x30,0x18,0x14,0x14,0x54,0x54,0x38,0x10,0x10,/*"$",4*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xA8,0x54,0x1A,0x2A,0x2A,0x2A,0x44,0x00,0x00,/*"%",5*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x50,0x6E,0xA4,0x94,0x88,0x89,0x76,0x00,0x00,/*"&",6*/
/* (8 X 16 , 宋体 )*/0x00,0x60,0x60,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
/* (8 X 16 , 宋体 )*/0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,/*"(",8*/
/* (8 X 16 , 宋体 )*/0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,/*")",9*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x10,0x10,0xD6,0x38,0x38,0xD6,0x10,0x10,0x00,0x00,0x00,0x00,/*"*",10*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,0x00,/*"+",11*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0xC0,/*",",12*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",13*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,/*".",14*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,/*"/",15*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",16*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"1",17*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,/*"2",18*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*"3",19*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,/*"4",20*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*"5",21*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"6",22*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,/*"7",23*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*"8",24*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,/*"9",25*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*":",26*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20,/*";",27*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,/*"<",28*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,/*"=",29*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,/*">",30*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3C,0x42,0x42,0x62,0x02,0x04,0x08,0x08,0x00,0x18,0x18,0x00,0x00,/*"?",31*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x38,0x44,0x5A,0xAA,0xAA,0xAA,0xAA,0xB4,0x42,0x44,0x38,0x00,0x00,/*"@",32*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,/*"A",33*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x44,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,/*"B",34*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3E,0x42,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x44,0x38,0x00,0x00,/*"C",35*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,/*"D",36*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xFC,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x42,0x42,0xFC,0x00,0x00,/*"E",37*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xFC,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x40,0x40,0xE0,0x00,0x00,/*"F",38*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3C,0x44,0x44,0x80,0x80,0x80,0x8E,0x84,0x44,0x44,0x38,0x00,0x00,/*"G",39*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"H",40*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"I",41*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,/*"J",42*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xEE,0x44,0x48,0x50,0x70,0x50,0x48,0x48,0x44,0x44,0xEE,0x00,0x00,/*"K",43*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,/*"L",44*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00,/*"M",45*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xC7,0x62,0x62,0x52,0x52,0x4A,0x4A,0x4A,0x46,0x46,0xE2,0x00,0x00,/*"N",46*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,/*"O",47*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,/*"P",48*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0xB2,0xCA,0x4C,0x38,0x06,0x00,/*"Q",49*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x7C,0x48,0x48,0x44,0x44,0x42,0xE3,0x00,0x00,/*"R",50*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x3E,0x42,0x42,0x40,0x20,0x18,0x04,0x02,0x42,0x42,0x7C,0x00,0x00,/*"S",51*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,/*"T",52*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,/*"U",53*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10,0x00,0x00,/*"V",54*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xD6,0x92,0x92,0x92,0x92,0xAA,0xAA,0x6C,0x44,0x44,0x44,0x00,0x00,/*"W",55*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,/*"X",56*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xEE,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,/*"Y",57*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x7E,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x42,0x42,0xFC,0x00,0x00,/*"Z",58*/
/* (8 X 16 , 宋体 )*/0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,/*"[",59*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x08,0x04,0x04,0x04,0x02,0x02,/*"\",60*/
/* (8 X 16 , 宋体 )*/0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,/*"]",61*/
/* (8 X 16 , 宋体 )*/0x00,0x1C,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,/*"_",63*/
/* (8 X 16 , 宋体 )*/0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00,/*"a",65*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x64,0x58,0x00,0x00,/*"b",66*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,/*"c",67*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x06,0x02,0x02,0x02,0x1E,0x22,0x42,0x42,0x42,0x26,0x1B,0x00,0x00,/*"d",68*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x40,0x42,0x3C,0x00,0x00,/*"e",69*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x7E,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"f",70*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x44,0x38,0x40,0x3C,0x42,0x42,0x3C,/*"g",71*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"h",72*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"i",73*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x78,/*"j",74*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x4E,0x48,0x50,0x68,0x48,0x44,0xEE,0x00,0x00,/*"k",75*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"l",76*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x49,0x49,0x49,0x49,0x49,0xED,0x00,0x00,/*"m",77*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"n",78*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,/*"o",79*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x64,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,/*"p",80*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x22,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,/*"q",81*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x32,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,/*"r",82*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x40,0x3C,0x02,0x42,0x7C,0x00,0x00,/*"s",83*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x10,0x10,0x0C,0x00,0x00,/*"t",84*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x42,0x46,0x3B,0x00,0x00,/*"u",85*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x10,0x10,0x00,0x00,/*"v",86*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x92,0xAA,0xAA,0x44,0x44,0x00,0x00,/*"w",87*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x24,0x18,0x18,0x18,0x24,0x76,0x00,0x00,/*"x",88*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x18,0x10,0x10,0xE0,/*"y",89*/
/* (8 X 16 , 宋体 )*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E,0x00,0x00,/*"z",90*/
/* (8 X 16 , 宋体 )*/0x00,0x03,0x04,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x00,/*"{",91*/
/* (8 X 16 , 宋体 )*/0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,/*"|",92*/
/* (8 X 16 , 宋体 )*/0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,/*"}",93*/
/* (8 X 16 , 宋体 )*/0x30,0x4C,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
/* (8 X 16 , 宋体 )*/};void Delay_ms(u16 ms)
{SysTick->CTRL &=~(1<<2);//选择时钟源为21MHZSysTick->CTRL &=~(1<<1);//禁止滴答中断SysTick->LOAD = 21000*ms; //设置重装载寄存器的值SysTick->CTRL |= (1<<0);//使能滴答定时器while(!(SysTick->CTRL&(1<<16)));//阻塞判断定时时间是否到达,判断SysTick->CTRL的位
}void Delay_us(u16 us)
{SysTick->CTRL &=~(1<<2);//选择时钟源为21MHZSysTick->CTRL &=~(1<<1);//禁止滴答中断SysTick->LOAD = 21*us; //设置重装载寄存器的值SysTick->CTRL |= (1<<0);//使能滴答定时器while(!(SysTick->CTRL&(1<<16)));//阻塞判断定时时间是否到达,判断SysTick->CTRL的位
}/******************** LCD引脚初始化函数 *******************
LCD显示屏硬件管脚对应关系:
数据线:
DB0---PD14  DB1---PD15  DB2---PD0   DB3---PD1
DB4---PE7   DB5---PE8   DB6---PE9   DB7---PE10
DB8---PE11  DB9---PE12  DB10---PE13 DB11---PE14
DB12---PE15 DB13---PD8  DB14---PD9  DB15---PD10
控制线:
WR---PD5    RD---PD4    CS---PG12   BL--PB15 ,DC --PF12
**********************************************************/
void LCD_PinInit(void)
{/* 使能LCD硬件管脚时钟 */RCC->AHB1ENR |= (1<<3);//开PDRCC->AHB1ENR |= (1<<4);//开PERCC->AHB1ENR |= (1<<6);//开PGRCC->AHB1ENR |= (1<<1);//开PBRCC->AHB1ENR |= (1<<5);//开PF/* 设置LCD硬件管脚模式 *//* DB0~DB15数据线:推挽输出  时钟50M */GPIOD->MODER |=(0X1<<(2*14))|(0X1<<(2*15));   //配置成通用输出  GPIOD->OSPEEDR |=(0X2<<(2*14))|(0X2ul<<(2*15)); //配置成输出速率50M      GPIOD->MODER |=(0X1<<(2*0))|(0X1<<(2*1));     //配置成通用输出  GPIOD->OSPEEDR |=(0X2<<(2*0))|(0X2<<(2*1));   //配置成输出速率50MGPIOE->MODER |=0x55554000;                    //配置成通用输出  GPIOE->OTYPER |= 0;                           //配置成输出推挽GPIOE->OSPEEDR |=0x55554000;                  //配置成输出速率50MGPIOD->MODER |=(0X1<<(2*8))|(0X1<<(2*9))|(0X1<<(2*10));  //配置成通用输出  GPIOD->OSPEEDR |=(0X2<<(2*1))|(0X2<<(2*1))|(0X2<<(2*1));   //配置成输出速率50M/* 控制线:推挽输出  时钟50M 空闲为高电平 */GPIOD->MODER |=(0X1<<(2*4))|(0X1<<(2*5));  //配置成通用输出  GPIOD->OSPEEDR |=(0X2<<(2*4))|(0X2<<(2*5));GPIOD->ODR |= (1<<4)|(1<<5);GPIOG->MODER |=(0X1<<(2*12));              //配置成通用输出  GPIOG->OSPEEDR |=(0X2<<(2*12));GPIOG->ODR |= (1<<12);GPIOF->MODER |=(0X1<<(2*12));              //配置成通用输出  GPIOF->OSPEEDR |=(0X2<<(2*12));GPIOF->ODR |= (1<<12);GPIOB->MODER |=(0X1<<(2*15));               //配置成通用输出  GPIOB->OSPEEDR |=(0X2ul<<(2*15));GPIOB->ODR &= ~(1<<15);     //关闭背光,在LCD初始化完后再打开//    GPIO_InitTypeDef  GPIO_InitStructure;
//  //使能PD,PE,PF,PG时钟
//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|\
//                                               RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);
//
//  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|\
//                                                          GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;
//  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
//  GPIO_InitStructure.GPIO_Speed=GPIO_Fast_Speed;
//  GPIO_Init(GPIOD, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5);
//
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//PE7~15,AF OUT
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
//  GPIO_Init(GPIOE, &GPIO_InitStructure);
//
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
//  GPIO_Init(GPIOG, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOG,GPIO_Pin_12);
//
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
//  GPIO_Init(GPIOF, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOF,GPIO_Pin_12);//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
//  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
//  GPIO_Init(GPIOB, &GPIO_InitStructure);
//  GPIO_ResetBits(GPIOB,GPIO_Pin_15);
}
/******************* LCD写命令函数 *********************************
参数:需要输入的命令
********************************************************************/
void LCD_ILI9486_CMD(u16 common)
{GPIOG->ODR &= ~(1 << 12);    //CS拉低   PG12GPIOF->ODR &= ~(1 << 12);    //D/C拉低 PF12GPIOD->ODR &= ~(1 << 5);     //WR拉低   PD5//发送16位的命令,bit15~bit0  分别在DB15~DB0管脚进行输出  /* 输出命令数据,把命令发送到数据总线 */if(common&0x01)   GPIOD->BSRRL = (1<<14);    //DB0---PD14  else GPIOD->BSRRH = (1<<14); if(common&0x02)   GPIOD->BSRRL = (1<<15);    //DB1---PD15  else GPIOD->BSRRH = (1<<15);if(common&0x04)   GPIOD->BSRRL = (1<<0);     //DB2---PD0    else GPIOD->BSRRH = (1<<0);if(common&0x08)   GPIOD->BSRRL = (1<<1);     //DB3---PD1else GPIOD->BSRRH = (1<<1);if(common&0x10)   GPIOE->BSRRL = (1<<7);     //DB4---PE7else GPIOE->BSRRH = (1<<7);if(common&0x20)   GPIOE->BSRRL = (1<<8);     //DB5---PE8   else GPIOE->BSRRH = (1<<8);if(common&0x40)   GPIOE->BSRRL = (1<<9);     //DB6---PE9else GPIOE->BSRRH = (1<<9);if(common&0x80)   GPIOE->BSRRL = (1<<10);   //DB7---PE10else GPIOE->BSRRH = (1<<10);if(common&0x0100) GPIOE->BSRRL = (1<<11); //DB8---PE11    else GPIOE->BSRRH = (1<<11);if(common&0x0200) GPIOE->BSRRL = (1<<12); //DB9---PE12else GPIOE->BSRRH = (1<<12);if(common&0x0400) GPIOE->BSRRL = (1<<13); //DB10---PE13else GPIOE->BSRRH = (1<<13);if(common&0x0800) GPIOE->BSRRL = (1<<14); //DB11---PE14else GPIOE->BSRRH = (1<<14);if(common&0x1000) GPIOE->BSRRL = (1<<15); //DB12---PE15 else GPIOE->BSRRH = (1<<15);if(common&0x2000) GPIOD->BSRRL = (1<<8);  //DB13---PD8else GPIOD->BSRRH = (1<<8);if(common&0x4000) GPIOD->BSRRL = (1<<9);  //DB14---PD9else GPIOD->BSRRH = (1<<9);if(common&0x8000) GPIOD->BSRRL = (1<<10); //DB15---PD10else GPIOD->BSRRH = (1<<10);GPIOD->ODR |= 1 << 5;        //WR拉高   PD5GPIOG->ODR |= 1 << 12;       //拉高CS    PG12//   GPIO_ResetBits(GPIOG,GPIO_Pin_12);
//  GPIO_ResetBits(GPIOF,GPIO_Pin_12);
//  GPIO_ResetBits(GPIOD,GPIO_Pin_5);
//  if(common&0x01) GPIO_SetBits(GPIOD,GPIO_Pin_14);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_14);
//  if(common&0x02) GPIO_SetBits(GPIOD,GPIO_Pin_15);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_15);
//  if(common&0x04) GPIO_SetBits(GPIOD,GPIO_Pin_0);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_0);
//  if(common&0x08) GPIO_SetBits(GPIOD,GPIO_Pin_1);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_1);
//  if(common&0x10) GPIO_SetBits(GPIOE,GPIO_Pin_7);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_7);
//  if(common&0x20) GPIO_SetBits(GPIOE,GPIO_Pin_8);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_8);
//  if(common&0x40) GPIO_SetBits(GPIOE,GPIO_Pin_9);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_9);
//  if(common&0x80) GPIO_SetBits(GPIOE,GPIO_Pin_10);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_10);
//  if(common&0x0100) GPIO_SetBits(GPIOE,GPIO_Pin_11);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_11);
//  if(common&0x0200) GPIO_SetBits(GPIOE,GPIO_Pin_12);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_12);
//  if(common&0x0400) GPIO_SetBits(GPIOE,GPIO_Pin_13);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_13);
//  if(common&0x0800) GPIO_SetBits(GPIOE,GPIO_Pin_14);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_14);
//  if(common&0x1000) GPIO_SetBits(GPIOE,GPIO_Pin_15);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_15);
//  if(common&0x2000) GPIO_SetBits(GPIOD,GPIO_Pin_8);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_8);
//  if(common&0x4000) GPIO_SetBits(GPIOD,GPIO_Pin_9);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_9);
//  if(common&0x8000) GPIO_SetBits(GPIOD,GPIO_Pin_10);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_10);
//  GPIO_SetBits(GPIOD,GPIO_Pin_5);
//  GPIO_SetBits(GPIOG,GPIO_Pin_12);
}/******************* LCD写数据函数 *********************************
参数:需要输输入待写到LCD屏的数据
********************************************************************/
void LCD_ILI9486_Parameter(u16 data)
{GPIOG->ODR &= ~(1 << 12);    //CS拉低GPIOF->ODR |= 1 << 12;       //D/C拉高GPIOD->ODR &= ~(1 << 5);     //WR拉低//发送16位的数据,bit15~bit0  分别在DB15~DB0管脚进行输出    /* 输出数据,把数据发送到数据总线 */if(data&0x01)   GPIOD->BSRRL = (1<<14); else GPIOD->BSRRH = (1<<14);if(data&0x02)   GPIOD->BSRRL = (1<<15);else GPIOD->BSRRH = (1<<15);if(data&0x04)   GPIOD->BSRRL = (1<<0);  else GPIOD->BSRRH = (1<<0);if(data&0x08)   GPIOD->BSRRL = (1<<1);  else GPIOD->BSRRH = (1<<1);if(data&0x10)   GPIOE->BSRRL = (1<<7);  else GPIOE->BSRRH = (1<<7);if(data&0x20)   GPIOE->BSRRL = (1<<8);  else GPIOE->BSRRH = (1<<8);if(data&0x40)   GPIOE->BSRRL = (1<<9);  else GPIOE->BSRRH = (1<<9);if(data&0x80)   GPIOE->BSRRL = (1<<10); else GPIOE->BSRRH = (1<<10);if(data&0x0100) GPIOE->BSRRL = (1<<11); else GPIOE->BSRRH = (1<<11);if(data&0x0200) GPIOE->BSRRL = (1<<12); else GPIOE->BSRRH = (1<<12);if(data&0x0400) GPIOE->BSRRL = (1<<13); else GPIOE->BSRRH = (1<<13);if(data&0x0800) GPIOE->BSRRL = (1<<14); else GPIOE->BSRRH = (1<<14);if(data&0x1000) GPIOE->BSRRL = (1<<15); else GPIOE->BSRRH = (1<<15);if(data&0x2000) GPIOD->BSRRL = (1<<8);  else GPIOD->BSRRH = (1<<8);if(data&0x4000) GPIOD->BSRRL = (1<<9);  else GPIOD->BSRRH = (1<<9);if(data&0x8000) GPIOD->BSRRL = (1<<10); else GPIOD->BSRRH = (1<<10);GPIOD->ODR |= 1 << 5;        //WR拉高GPIOG->ODR |= 1 << 12;       //拉高CS//   GPIO_ResetBits(GPIOG,GPIO_Pin_12);
//  GPIO_SetBits(GPIOF,GPIO_Pin_12);
//  GPIO_ResetBits(GPIOD,GPIO_Pin_5);
//  //发送 16 位数据
//  if(data&0x01) GPIO_SetBits(GPIOD,GPIO_Pin_14);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_14);
//  if(data&0x02) GPIO_SetBits(GPIOD,GPIO_Pin_15);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_15);
//  if(data&0x04) GPIO_SetBits(GPIOD,GPIO_Pin_0);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_0);
//  if(data&0x08) GPIO_SetBits(GPIOD,GPIO_Pin_1);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_1);
//  if(data&0x10) GPIO_SetBits(GPIOE,GPIO_Pin_7);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_7);
//  if(data&0x20) GPIO_SetBits(GPIOE,GPIO_Pin_8);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_8);
//  if(data&0x40) GPIO_SetBits(GPIOE,GPIO_Pin_9);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_9);
//  if(data&0x80) GPIO_SetBits(GPIOE,GPIO_Pin_10);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_10);
//  if(data&0x0100) GPIO_SetBits(GPIOE,GPIO_Pin_11);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_11);
//  if(data&0x0200) GPIO_SetBits(GPIOE,GPIO_Pin_12);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_12);
//  if(data&0x0400) GPIO_SetBits(GPIOE,GPIO_Pin_13);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_13);
//  if(data&0x0800) GPIO_SetBits(GPIOE,GPIO_Pin_14);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_14);
//  if(data&0x1000) GPIO_SetBits(GPIOE,GPIO_Pin_15);
//  else GPIO_ResetBits(GPIOE,GPIO_Pin_15);
//  if(data&0x2000) GPIO_SetBits(GPIOD,GPIO_Pin_8);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_8);
//  if(data&0x4000) GPIO_SetBits(GPIOD,GPIO_Pin_9);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_9);
//  if(data&0x8000) GPIO_SetBits(GPIOD,GPIO_Pin_10);
//  else GPIO_ResetBits(GPIOD,GPIO_Pin_10);
//  GPIO_SetBits(GPIOD,GPIO_Pin_5);
//  GPIO_SetBits(GPIOG,GPIO_Pin_12);
}
//以某个颜色清除整个LCD屏
void LCD_ClearTotalLCD(u16 color)
{u32 i;LCD_ILI9486_CMD(0x2A);           //设置列地址LCD_ILI9486_Parameter(0>>8);      LCD_ILI9486_Parameter(0&(0xFF));LCD_ILI9486_Parameter(319>>8);      LCD_ILI9486_Parameter(319&(0xFF));LCD_ILI9486_CMD(0x2B);          //设置行地址LCD_ILI9486_Parameter(0>>8);      LCD_ILI9486_Parameter(0&(0xFF));LCD_ILI9486_Parameter(479>>8);      LCD_ILI9486_Parameter(479&(0xFF));LCD_ILI9486_CMD(0x2C);         //写显存的命令for(i=0;i<(320*480);i++){LCD_ILI9486_Parameter(color); }
}
//以某个颜色填充一个LCD矩形
void LCD_FillRectangle(u16 Xstart,u16 Ystart,u16 Xend,u16 Yend,u16 color)
{u32 i;LCD_ILI9486_CMD(0x2A);           //设置列地址LCD_ILI9486_Parameter(Xstart>>8);      LCD_ILI9486_Parameter(Xstart&(0xFF));LCD_ILI9486_Parameter(Xend>>8);      LCD_ILI9486_Parameter(Xend&(0xFF));LCD_ILI9486_CMD(0x2B);          //设置行地址LCD_ILI9486_Parameter(Ystart>>8);      LCD_ILI9486_Parameter(Ystart&(0xFF));LCD_ILI9486_Parameter(Yend>>8);      LCD_ILI9486_Parameter(Yend&(0xFF));LCD_ILI9486_CMD(0x2C);         //写显存的命令for(i=0;i<((Xend-Xstart)*(Yend-Ystart));i++){LCD_ILI9486_Parameter(color); }
}
//在某个窗口显示一张图片
void LCD_ShowPicture(u16 Xstart,u16 Ystart,u16 Xend,u16 Yend,u8 *pColorData)
{u32 i;LCD_ILI9486_CMD(0x2A);           //设置列地址LCD_ILI9486_Parameter(Xstart>>8);      LCD_ILI9486_Parameter(Xstart&(0xFF));LCD_ILI9486_Parameter(Xend>>8);      LCD_ILI9486_Parameter(Xend&(0xFF));LCD_ILI9486_CMD(0x2B);          //设置行地址LCD_ILI9486_Parameter(Ystart>>8);      LCD_ILI9486_Parameter(Ystart&(0xFF));LCD_ILI9486_Parameter(Yend>>8);      LCD_ILI9486_Parameter(Yend&(0xFF));LCD_ILI9486_CMD(0x2C);         //写显存的命令for(i=0;i<((Xend-Xstart)*(Yend-Ystart));i++){LCD_ILI9486_Parameter((*pColorData)<<8|(*(pColorData+1))); pColorData+= 2;  //地址偏移2}
}
//x、y字符的一个字符的左上角的坐标
//fontSize : 字体大小:16表示 16*16的字体,32表示32*32的字体,64表示64*64的字体,
void LCD_ShowChinese(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8 *pChineseData)
{u32 i;u8 j =0;LCD_ILI9486_CMD(0x2A);           //设置列地址的起始地址LCD_ILI9486_Parameter(x>>8);      LCD_ILI9486_Parameter(x&(0xFF));/**根据字体的大小来设置列地址的结束地址**/if(fontSize==16)  {LCD_ILI9486_Parameter((x+fontSize-1)>>8);      LCD_ILI9486_Parameter((x+fontSize-1)&(0xFF));}if(fontSize==32){LCD_ILI9486_Parameter((x+fontSize-1)>>8);      LCD_ILI9486_Parameter((x+fontSize-1)&(0xFF));}if(fontSize==64){LCD_ILI9486_Parameter((x+fontSize-1)>>8);      LCD_ILI9486_Parameter((x+fontSize-1)&(0xFF));}/*****************************************************/LCD_ILI9486_CMD(0x2B);          //设置行地址的起始地址LCD_ILI9486_Parameter(y>>8);      LCD_ILI9486_Parameter(y&(0xFF));/**根据字体的大小来设置行地址的结束地址**/if(fontSize==16)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}if(fontSize==32)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}if(fontSize==64)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}    LCD_ILI9486_CMD(0x2C);         //写显存的命令for(i=0;i<(fontSize*fontSize);i++){if((*pChineseData)&(1<<(7-j))){LCD_ILI9486_Parameter(pointColor); }else{LCD_ILI9486_Parameter(backColor); }j = j + 1;if(j == 8){j = 0;pChineseData++;}}
}//x、y字符的一个字符的左上角的坐标
//fontSize : 字体大小:16表示 宽8*高16的字体,32表示宽16*高32的字体,64表示宽32*高64的字体,
void LCD_ShowChar(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8 *pCharData)
{u32 i;u8 j =0;LCD_ILI9486_CMD(0x2A);           //设置列地址的起始地址LCD_ILI9486_Parameter(x>>8);      LCD_ILI9486_Parameter(x&(0xFF));/**根据字体的大小来设置列地址的结束地址**/if(fontSize==16)  {LCD_ILI9486_Parameter((x+7)>>8);      LCD_ILI9486_Parameter((x+7)&(0xFF));}if(fontSize==32){LCD_ILI9486_Parameter((x+15)>>8);      LCD_ILI9486_Parameter((x+15)&(0xFF));}if(fontSize==64){LCD_ILI9486_Parameter((x+31)>>8);      LCD_ILI9486_Parameter((x+31)&(0xFF));}/*****************************************************/LCD_ILI9486_CMD(0x2B);          //设置行地址的起始地址LCD_ILI9486_Parameter(y>>8);      LCD_ILI9486_Parameter(y&(0xFF));/**根据字体的大小来设置行地址的结束地址**/if(fontSize==16)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}if(fontSize==32)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}if(fontSize==64)  {LCD_ILI9486_Parameter((y+fontSize-1)>>8);      LCD_ILI9486_Parameter((y+fontSize-1)&(0xFF));}  LCD_ILI9486_CMD(0x2C);         //写显存的命令for(i=0;i<((fontSize/2)*fontSize);i++){if((*pCharData)&(1<<(7-j))){LCD_ILI9486_Parameter(pointColor); }else{LCD_ILI9486_Parameter(backColor); }j = j + 1;if(j == 8){j = 0;pCharData++;}}
}void LCD_ShowString(u16 x,u16 y,u8 fontSize,u16 pointColor,u16 backColor,u8*pStr)
{u8 offSet;while(*pStr != '\0'){offSet = *pStr - ' ';  //求得偏移 ,等效于 offSet = *pStr - 32; LCD_ShowChar(x,y,fontSize,pointColor,backColor,(u8*)&anscii_8_16[offSet*16]);x+=8; //x轴坐标偏移pStr++;}
}void LCD_ShowPoint(u16 x,u16 y,u16 color)
{//2A  确定横坐标 x的范围LCD_ILI9486_CMD(0X2a); LCD_ILI9486_Parameter (x>>8);//起始横坐标LCD_ILI9486_Parameter (x);LCD_ILI9486_Parameter (x>>8);//终止横坐标LCD_ILI9486_Parameter (x);//2b  确定纵坐标 y的范围LCD_ILI9486_CMD(0X2b); LCD_ILI9486_Parameter (y>>8);//起始纵坐标LCD_ILI9486_Parameter (y);LCD_ILI9486_Parameter (y>>8);//终止纵坐标LCD_ILI9486_Parameter (y);//2c 填充颜色LCD_ILI9486_CMD(0X2c);LCD_ILI9486_Parameter (color);}//显示十字
void LCD_ShowCross(u16 x, u16 y, u16 color)
{u16 i;for(i=x-10; i<x+10; i++){LCD_ShowPoint(i, y, color);}for(i=y-10; i<y+10; i++){LCD_ShowPoint( x,i, color);}
}
/**********************
LCD初始化函数
***********************/
void LCD_Init(void)
{LCD_PinInit();//************* Reset LCD Driver ****************//Delay_ms(120); // Delay 120 ms//************* Start Initial Sequence **********//LCD_ILI9486_CMD(0x01);          //软件复位LCD_ILI9486_CMD(0x13);          //开启正常模式LCD_ILI9486_CMD(0xB4); LCD_ILI9486_Parameter(0x00);    LCD_ILI9486_CMD(0XF2);LCD_ILI9486_Parameter(0x18);LCD_ILI9486_Parameter(0xA3);LCD_ILI9486_Parameter(0x12);LCD_ILI9486_Parameter(0x02);LCD_ILI9486_Parameter(0XB2);LCD_ILI9486_Parameter(0x12);LCD_ILI9486_Parameter(0xFF);LCD_ILI9486_Parameter(0x10);LCD_ILI9486_Parameter(0x00);LCD_ILI9486_CMD(0XF8);LCD_ILI9486_Parameter(0x21);LCD_ILI9486_Parameter(0x04);LCD_ILI9486_CMD(0XF9);LCD_ILI9486_Parameter(0x00);LCD_ILI9486_Parameter(0x08);LCD_ILI9486_CMD(0x3A);LCD_ILI9486_Parameter(0x05);   //设置16位BPPLCD_ILI9486_CMD(0xB4);LCD_ILI9486_Parameter(0x01);//0x00LCD_ILI9486_CMD(0xB6);LCD_ILI9486_Parameter(0x02);LCD_ILI9486_Parameter(0x22);LCD_ILI9486_CMD(0xC1);LCD_ILI9486_Parameter(0x41);LCD_ILI9486_CMD(0xC5);LCD_ILI9486_Parameter(0x00);LCD_ILI9486_Parameter(0x07);//0X18LCD_ILI9486_CMD(0xE0);LCD_ILI9486_Parameter(0x0F);LCD_ILI9486_Parameter(0x1F);LCD_ILI9486_Parameter(0x1C);LCD_ILI9486_Parameter(0x0C);LCD_ILI9486_Parameter(0x0F);LCD_ILI9486_Parameter(0x08);LCD_ILI9486_Parameter(0x48);LCD_ILI9486_Parameter(0x98);LCD_ILI9486_Parameter(0x37);LCD_ILI9486_Parameter(0x0A);LCD_ILI9486_Parameter(0x13);LCD_ILI9486_Parameter(0x04);LCD_ILI9486_Parameter(0x11);LCD_ILI9486_Parameter(0x0D);LCD_ILI9486_Parameter(0x00);LCD_ILI9486_CMD(0xE1);LCD_ILI9486_Parameter(0x0F);LCD_ILI9486_Parameter(0x32);LCD_ILI9486_Parameter(0x2E);LCD_ILI9486_Parameter(0x0B);LCD_ILI9486_Parameter(0x0D);LCD_ILI9486_Parameter(0x05);LCD_ILI9486_Parameter(0x47);LCD_ILI9486_Parameter(0x75);LCD_ILI9486_Parameter(0x37);LCD_ILI9486_Parameter(0x06);LCD_ILI9486_Parameter(0x10);LCD_ILI9486_Parameter(0x03);LCD_ILI9486_Parameter(0x24);LCD_ILI9486_Parameter(0x20);LCD_ILI9486_Parameter(0x00);LCD_ILI9486_CMD(0x11);   //退出睡眠LCD_ILI9486_CMD(0x36);
//  LCD_ILI9486_Parameter(0x08);   //设置RGB,含排线的屏LCD_ILI9486_Parameter(0x00);   //设置RGB,不含排线的屏LCD_ILI9486_CMD(0x36);
//  LCD_ILI9486_Parameter(0x08);   //设置RGB,含排线的屏LCD_ILI9486_Parameter(0x00);   //设置RGB,不含排线的屏LCD_ILI9486_CMD(0x36);
//  LCD_ILI9486_Parameter(0x08);   //设置RGB,含排线的屏LCD_ILI9486_Parameter(0x00);   //设置RGB,不含排线的屏Delay_ms(120);LCD_ILI9486_CMD(0x29);   //开启显示/* 以下由用户按实际编写 */LCD_ILI9486_CMD(0x20);          //关闭颜色反转LCD_ILI9486_CMD(0x3A);          //发送命令设置液晶屏颜色位深LCD_ILI9486_Parameter(0x05);    //设置颜色位深16BPPLCD_ILI9486_CMD(0x36);          //发送命令设置LCD扫描方向LCD_ILI9486_Parameter(0x08);//LCD_Clear(0,319,0,479,RED);  //清屏GPIOB->ODR |= 1 << 15;          //开LCD背光灯//    GPIO_SetBits(GPIOB,GPIO_Pin_15);          //开LCD背光灯
}
void  LCD_Show(void)
{LCD_ClearTotalLCD(RED);LCD_FillRectangle(0,0,319,240,BLUE);LCD_ShowChinese(250,10,16,RED,WHITE,(u8 *)chinese_1);LCD_ShowChinese(250,30,32,RED,WHITE,(u8 *)chinese_2);LCD_ShowChinese(250,70,64,RED,WHITE,(u8 *)chinese_3);LCD_ShowString(10,10,16,RED,WHITE,"I believe I can fly");LCD_ShowString(10,30,16,RED,WHITE,"I believe I touch the Sky");
}
int main(void)
{LCD_Init();LCD_Show();
}

stm32(十八)TFT-LCD相关推荐

  1. STM32 FSMC接口驱动4.3寸TFT LCD屏

    STM32 FSMC接口驱动4.3寸TFT LCD屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏. 这里以STM32F103VET ...

  2. 【正点原子FPGA连载】 第二十九章TFT LCD画板实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  3. STM32 驱动4.3寸TFT LCD 触摸屏

    STM32 驱动4.3寸TFT LCD 触摸屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏.触摸屏是在显示屏上覆盖一层触摸感应的外 ...

  4. STM32复习笔记(十八) —— 高级定时器(输出比较)

    STM32复习笔记(十八) -- 高级定时器(输出比较) 1.配置步骤 1)选择计数器时钟 (内部,外部,预分频器) 2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中 3)可设 ...

  5. TFT LCD显示原理详解

    <什么是液晶> 我们一般认为物体有三态:固态.液态.气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一):                 ...

  6. DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V

    DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V 前言 IMG2LCD软件生成RGB565格式图片 使用取模软件对图片取模 实验结果 ...

  7. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  8. 【正点原子MP157连载】第三十九章 LCD驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  10. 37种传感器(十八)无源蜂鸣器模块+Stduino NanoUNO

    37种传感器(十八)之无源蜂鸣器模块+Stduino Nano&UNO 本文转载自:http://www.stduino.com/forum.php?mod=viewthread&ti ...

最新文章

  1. 再见,Python 2.x
  2. BERT模型从训练到部署全流程
  3. python读取文件解码失败
  4. 第二章 MCS-51单片机硬件结构与工作原理
  5. PHPStrom的快捷键突然失效解决方案
  6. 数组黑科技(偏性能方面)未完待更新...
  7. K8s 学习者绝对不能错过的最全知识图谱(内含 56个知识点链接)
  8. Python中的简单图案打印程序
  9. oracle 数据库字段html显示正常text显示不全,layui表格字段表格显示不全(自适应)...
  10. UTC/GMT 时间转换
  11. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题
  12. mac 电脑连接不上github_Mac版爱思助手【手机投屏直播】工具使用教程
  13. 腾达U12无线网卡驱动安装教程
  14. jsp登陆界面链接mysql_用jsp实现网站登录界面的制作,并连接数据库
  15. 输出200以内所有素数(质数),5个一换行
  16. 【HUSTOJ】1047: 字符图形3-平行四边形
  17. 状态机的编写(使用C++)
  18. 这3种管理者是“企业毒瘤”,须根除
  19. 微信公众号网页授权登陆
  20. spring in action学习-第一章 spring之旅

热门文章

  1. 百度世界推出“轻应用” :人人都可开发
  2. 泛微oa系统什么框架_泛微OA系统怎么样?与其他OA相比呢?
  3. Spring MVC ajax请求
  4. 程序员学金融-金融科普(4)-净资产收益率
  5. 苹果手机需要清理垃圾吗?
  6. python实用程序育儿法下载_Python高级编程
  7. ROS学习笔记(二)launch文件初步使用
  8. 获取Linux系统的网卡ip地址
  9. 腾讯防水墙php接入,PHP实现腾讯防水墙验证码校验
  10. 【2021年度总结】不断学习的卡卡