MCU开发学习记录14* - 8080学习与实践(HAL库) - 控制LCD屏幕显示中英文、图片 - STM32CubeMX

名词解释:

FSMC:Flexible Static Memory Controller
LCD:Liquid Crystal Display
TFT:Thin-Film Transistor
​​

统一文章结构(数字后加*):

        第一部分: 阐述外设工作原理;第二部分:芯片参考手册对应外设的学习;第三部分:使用STM32CubeMX进行外设初始化;第四部分:添加应用代码;第五部分:附上本篇文章的工程代码的下载地址。

        本文将介绍8080、FSMC模拟8080的相关概念以及STM32CubeMX生成FSMC的配置函数,实现控制LCD屏幕显示中英文、图片。

一、什么是8080?(并行异步半双工,上升沿采样)

1.1 8080简介

1.1.1 8080介绍(Intel 8080 Parallel Interface Protocol)

        8080并行接口,也称为8080并口协议,是由Intel公司设计的一种并行、异步、半双工通信协议。该接口在扩展方面及数据传输方面具有一定的优越性,因此,尽管8080微处理器已经被逐渐淘汰,但8080的并行总线协议仍然被广泛应用于各种需要高速、近距离接口和传输方式的场景中,如CPU扩展外部的RAM和ROM,LCD、打印机等设备

1.2 8080物理层

1.2.1 8080接口

1. 控制线(四根):

· RD:写使能
        用于控制读取操作。当RD为0时,表示准备读取数据;在RD上升沿到来时,数据将被从设备中读取出来。
· WR:读使能
        用于控制写入操作。当WR为0时,表示准备写入数据;当WR上升沿到来时,数据将被写入设备。
· DC(RS):数据/命令
        用于区分传输的是命令还是数据。当RS为0时,表示传输的是读写命令;当RS为1时,表示传输的是读写数据。
· CS:片选
        用于选中要进行通信的设备。如果有多个设备连接在同一个8080接口上,可以使用译码器通过地址进行访问。

2. 数据线(8/16根):

· D[0:7]:         8 位双向数据线。
· D[0:15]:       16 位双向数据线。

1.2.2 LCD接口(ILI9341-16位8080)

LCD 信号作用
LCD_RSTLCD 复位引脚,连接 MCU 复位脚,一起复位
LCD_BLLCD 背光阴脚,控制 LCD 背光亮灭,高电平亮
LCD_CSLCD 片选,选中 LCD,低电平有效
LCD_WRLCD 写信号,上升沿有效,用于数据 / 命令写入
LCD_RDLCD 读信号,上升沿有效,用于数据 / 命令读取
LCD_RSLCD 数据 / 命令线,表示当前是读写数据还是命令
LCD_D0~D15LCD 数据线,16 位,一次可以写入一个像素

1.3 8080协议层(ILI9341-16位8080)

1.3.1 ILI9341通信协议选择(常用 16位 8080并口协议)

        

1.3.2 8080 逻辑控制(以ILI9341通信逻辑介绍)

        · CSX(低电平有效):低电平选中芯片,高电平禁用
        · RESX(低电平有效):拉低时强制复位芯片
        · WRX(数据写入触发信号):上升沿写入数据
        · RDX(数据读取发信号):上升沿读取数据
        · D/CX:
                写操作:

                D/CX=0 → 发送命令(如初始化指令0x01)。
                D/CX=1 → 发送数据(如像素颜色值0xRRGGBB)。

                读操作:
                D/CX=1 → 读取显示数据(如回读显存内容)。       

        

1.3.3 8080 写时序

· 写时序过程:

        · CS 拉低,选中
        · D/CX 为高-1(数据);低-0(命令)
        · RD 为高,禁止写
        · 在WR的上升沿(先下降后上升),写数据(D[0:7]/[0:15])到驱动IC
        · CS 拉高,取消片选
        

· 写时序详解:

        

· 应用时序:

        

1.3.4 8080 读时序

· 读时序过程:

        · CS 拉低,选中
        · D/CX 为高-1(数据);低-0(命令)
        · WR 为高,禁止写
        · 在RD的上升沿(先下降后上升),读线上的数据(D[0:7]/[0:15])
        · CS 拉高,取消片选
        

· 读时序详解:

        

· 应用时序:

        

1.4 8080实现数据输入和读取(以8位 8080为例)

        后续LCD连接为16位 8080,使用GPIO模拟8080(效率偏低)。开发板内置FSMC接口,后续实践使用FSMC接口。

1.4.1 GPIO模拟8位 8080协议代码 - 写

**
 * @brief       通过拼凑的方法向OLED输出一个8位数据
 * @param       data: 要输出的数据
 * @retval      无
 */
static void 8080_data_out(uint8_t data)
{
    uint16_t dat = data & 0X0F;
    GPIOC->ODR &= ~(0XF << 6);          /* 清空6~9 */
    GPIOC->ODR |= dat << 6;             /* D[3:0]-->PC[9:6] */

    GPIOC->ODR &= ~(0X1 << 11);         /* 清空11 */
    GPIOC->ODR |= ((data >> 4) & 0x01) << 11;

    GPIOB->ODR &= ~(0X1 << 6);          /* 清空6 */
    GPIOB->ODR |= ((data >> 5) & 0x01) << 6;

    GPIOE->ODR &= ~(0X3 << 5);          /* 清空5,6 */
    GPIOE->ODR |= ((data >> 6) & 0x01) << 5;
    GPIOE->ODR |= ((data >> 7) & 0x01) << 6;
}

/**
 * @brief       写入一个字节
 * @param       data: 要输出的数据
 * @param       cmd: 数据/命令标志 0,表示命令;1,表示数据;
 * @retval      无
 */
static void 8080_wr_byte(uint8_t data, uint8_t cmd)
{
    OLED_RS(cmd);
    OLED_CS(0);
    OLED_WR(0);
    8080_data_out(data);
    OLED_WR(1);
    OLED_CS(1);
    OLED_RS(1);
}

1.4.2 GPIO模拟8位 8080协议代码 - 读

/**
 * @brief       从数据引脚读取8位数据
 * @retval      读取到的8位数据
 */
static uint8_t 8080_data_in(void)
{
    uint8_t data = 0;
    // 读取 D0-D3 从 PC6-PC9
    data |= (GPIOC->IDR >> 6) & 0x0F;
    // 读取 D4 从 PC11
    data |= ((GPIOC->IDR >> 11) & 0x01) << 4;
    // 读取 D5 从 PB6
    data |= ((GPIOB->IDR >> 6) & 0x01) << 5;
    // 读取 D6 从 PE5
    data |= ((GPIOE->IDR >> 5) & 0x01) << 6;
    // 读取 D7 从 PE6
    data |= ((GPIOE->IDR >> 6) & 0x01) << 7;
    return data;
}

/**
 * @brief       读取一个字节
 * @param       cmd: 数据/命令标志 0,表示命令;1,表示数据;
 * @retval      读取到的8位数据
 */
static uint8_t 8080_rd_byte(uint8_t cmd)
{
    uint8_t data;
    // 设置控制信号
    OLED_RS(cmd);
    OLED_CS(0);
    OLED_RD(0);
    // 读取数据
    data = 8080_data_in();
    // 恢复控制信号
    OLED_RD(1);
    OLED_CS(1);
    OLED_RS(1);
    return data;
}

二、什么是FSMC?

2.1 FSMC简介

2.1.1 FSMC介绍

        FSMC(Flexible Static Memory Controller,灵活静态存储器控制器)​​ 是嵌入式系统中用于扩展外部存储器的专用硬件模块。它通过标准接口简化了不同静态存储器的访问控制,其核心功能可总结如下:
1.  ​广泛兼容性​
        · 支持连接SRAM、ROM、NorFlash、PSRAM等常用静态存储器
        · 可对接16位PC卡兼容设备,覆盖主流存储介质
2. ​高效数据转换​
        · 自动将32位AHB总线协议转换为8/16位外设协议
        · 内置写操作FIFO缓冲
3. ​灵活配置能力​
        · 4个独立存储区域,各区域有专属片选和时序配置(所有外部存储器共享地址、FSMC 一次只能访问一 个外部器件。)
        · 可程序化设定等待周期(最长15时钟)、总线周转等时序参数
        · 支持读写独立时序设置,适配不同存储器要求
4. ​实时控制特性​
        · 提供外设异步等待信号接口,动态延长访问周期
        · 提供字节通道选择和写使能信号,优化SRAM/PSRAM操作
        · 支持突发模式访问同步器件(Nor/PSRAM),提升传输效率

2.1.2 FSMC框图

  1. · FSMC 的总线
            CPU 和其它 AHB
    总线主设备可通过该 AHB 从设备接口访问外部静态存储器。
    · 时钟源
  2. STM32 内部的 FSMC 控制单元
  3. 公共信号硬件的引脚
  4. NOR/PSRAM信号控制线

        在控制 LCD 时,使用的是类似异步、地址与数据线独立的 NOR FLASH 控制方式,所以实际上CLK、NWAITNADV 引脚并没有使用到。

        

2.1.3 FSMC外部器件映射  

        使用FSMC外接存储器,其存储单元是映射到STM32的内部寻址空间的。从FSMC角度看,可以把外部存储器划分为固定大小为256M字节的四个存储块,FSMC 总共管理 1GB 空间。
        

         

2.2 FSMC基础

2.2.1 FSMC与LCD连接

        

2.2.2 FSMC Bank储存管理

2.2.3 HADDR与FSMC_A关系(LCD以16位数据线为例)

        HADDR总线是转换到外部存储器的内部AHB地址线(从CPU通过AHB总线到外部信号线之间的关系)。HADDR是字节地址,而存储器访问不都是按字节访问,接到在存储器的地址线与其数据宽度相关。即LCD显存以 ​半字(2字节)​​ 为单位访问,其物理地址线 Addr_LCD实际对应HADDR的高位部分(忽略最低1位)

        LCD使用16位数据线的结论:
                HADDR(字节地址)=FSMC逻辑地址×数据宽度字节数
        对于16位数据宽度:
                addr(HADDR)= 2 * addr(fsmc)

        

2.2.4 通用时序规则 - 信号同步

1. 所有的控制器输出信号在内部时钟 (HCLK) 的上升沿变化

2. 在同步模式(读取或写入)下,输出的数据在 HCLK 的上升沿变化。无论 CLKDIV 值为何,所有输出均会按以下方式变化:
        当出现 FSMC_CLK 时钟的下降沿时,NOEL/NWEL/NEL/NADVL/NADVH/NBLL/ 地址有效输出可发生变化。
        当出现 FSMC_CLK 时钟的上升沿时,NOEH/NWEH/NEH/NOEH/NBLH/ 地址有效输出可发生变化。

2.3 NOR Flash/PSRAM 控制器异步事务(仅介绍模式1和A)

        NOR/PSRAM控制器产生的异步时序就有5种,总体分为两类:一类是模式1,其他为拓展模式。拓展模式相对模式1来说读写时序时间参数设置可以不同,满足存储器读写时序不一样需求。

        如果使能扩展模式(FSMC_BCRx 寄存器中的 EXTMOD 位置 1),则最多可提供四种扩展模式(A、B、C 和 D)。可以混合使用 A、B、C 和 D 模式来进行读取和写入操作。 例如,可以在模式 A 下执行读取操作,而在模式 B 下执行写入操作。
        如果禁用扩展模式(FSMC_BCRx 寄存器中的 EXTMOD 位复位),则 FSMC 可以在模式 1 或模式 2 下运行,如下所述:

        · 当选择 SRAM/CRAM 存储器类型时,模式 1 为默认模式(FSMC_BCRx 寄存器中MTYP = 0x0 或 0x01)。
        · 当选择 NOR 存储器类型时,模式 2 为默认模式(FSMC_BCRx 寄存器中 MTYP = 0x10)

        对于异步突发访问方式,FSMC 主要设置 3 个时间参数:地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)。FSMC 综合了 SRAM/ROM、PSRAM 和 NOR Flash 产品的信号特点,定义了 4 种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数。

        
        

2.3.1 模式 1 - SRAM/PSRAM (CRAM)

  • 基本异步访问模式​:
    模式1是FSMC最基础的异步时序配置,适用于大多数低速或标准速度的NOR Flash或PSRAM器件。
  • 时序简单​:
    不插入额外的等待周期(Wait State),读写时序由ADDSET(地址建立时间)和DATAST(数据保持时间)直接控制。

        

        

2.3.2 模式 A - SRAM/PSRAM (CRAM) OE 切换

  • 扩展异步访问模式​:
    模式A在模式1的基础上增加了地址保持时间(ADDHOLD)​,适用于对时序要求更严格的存储器。
  • 更复杂的时序控制​:
    允许独立配置ADDSETADDHOLDDATAST,从而更精细地适配存储器的时序需求。
  • 适用场景​:
    存储器需要较长的地址保持时间,或接口时序中存在信号抖动问题(如高速总线或长走线)。

        

        

        

2.4 NOR/PSRAM 控制寄存器

        NOR/PSRAM 控制寄存器必须按字(32 位)进行访问。

2.4.1 SRAM/NOR-Flash 片选控制寄存器 1..4 (FSMC_BCR1..4)

  • EXTMOD:扩展模式使能位,控制是否允许读写不同的时序。

    读和写用不同的时序,该位设置为1

  • WREN:写使能位。

    向TFTLCD写入数据,该位设置1

  • MWID[1:0]:存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。

    00,表示8位数据模式;01表示16位数据模式;10和11保留。

  • MTYP[1:0]:存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。

    00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。

  • MBKEN:存储块使能位。

    该位设置1

        

        

        

2.4.2 SRAM/NOR-Flash 片选时序寄存器 1..4 (FSMC_BTR1..4)

如果未设置EXTMOD位,则读写共用这个时序寄存器! - (FSMC_BCRx)

  • ACCMOD[1:0]:访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
  • DATAST[7:0]:数据保持时间,等于DATAST(+1)个HCLK时钟周期,DATAST最大为255。

    注:(+1) - STM32F1的FSMC性能存在问题,F4不需要

    对于ILI9341来说,其实就是RD低电平持续时间,最小为355ns。 对于F1,一个HCLK = 13.9ns(1/72M),设置为15 对于F4,一个HCLK = 6ns(1/168M),设置为60

  • ADDSET[3:0]:地址建立时间。表示ADDSET(+1)个HCLK时钟周期,ADDSET最大为15。

    对于ILI9341来说,相当于RD高电平持续时间,为90ns。 F1即使设置为0,RD也有超过90ns的高电平,这里设置为1。F4对该位设置为15。

        

        

        

2.4.3 SRAM/NOR-Flash 写入时序寄存器 1..4 (FSMC_BWTR1..4)

  • ACCMOD[1:0]:访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
  • DATAST[7:0]:数据保持时间,等于DATAST(+1)个HCLK时钟周期,DATAST最大为255。

    对于ILI9341来说,其实就是WR低电平持续时间,最小为15ns。
    对于F1,一个HCLK = 13.9ns,设置为3
    对于F4,一个HCLK = 6ns,设置为9

  • ADDSET[3:0]:地址建立时间。表示ADDSET(+1)个HCLK时钟周期,ADDSET最大为15。

    对于ILI9341来说,相当于WR高电平持续时间,为15ns。
    F1即使设置为1,WR也有超过15ns的高电平,这里设置为1。
    F4对该位设置为8。

        

        

2.4.4 FSMC寄存器组合说明

  • 在ST官方提供的寄存器定义里面,并没有定义FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等这个单独的寄存器,而是将他们进行了一些组合,规则如下:
  • FSMC_BCRx和FSMC_BTRx,组合成BTCR[8]寄存器组,他们的对应关系如下:
    BTCR[0]对应FSMC_BCR1,BTCR[1]对应FSMC_BTR1
    BTCR[2]对应FSMC_BCR2,BTCR[3]对应FSMC_BTR2
    BTCR[4]对应FSMC_BCR3,BTCR[5]对应FSMC_BTR3
    BTCR[6]对应FSMC_BCR4,BTCR[7]对应FSMC_BTR4
  • FSMC_BWTRx则组合成BWTR[7]寄存器组,他们的对应关系如下:
    BWTR[0]对应FSMC_BWTR1,BWTR[2]对应FSMC_BWTR2,
    BWTR[4]对应FSMC_BWTR3,BWTR[6]对应FSMC_BWTR4,
    BWTR[1]、BWTR[3]和BWTR[5]保留,没有用到

三、LCD介绍

参考文章如下:
        成像光学:LCD的工作原理与结构图解 - 龙雪 - 博客园

3.1 显示器简介

3.1.1 液晶显示器(LCD)

        LCD(Liquid Crystal Display,液晶显示器)是一种基于液晶材料特性的主流显示技术。其核心由液态晶体构成,这种有机化合物在电场作用下会调整分子排列,从而控制光线透过率,配合彩色滤光片形成红、绿、蓝子像素的色彩组合。每个像素通过三原色混合实现丰富色彩表现。

        

        相较于旧式CRT显示器,LCD具有显著优势:
                1. 超薄时尚的物理形态;
                2. 低功耗特性(约为CRT的1/3);
                3. 更高信息承载量;
                4. 无闪烁更护眼。这使得LCD广泛应用于电视、电脑、手机等电子设备。

        但存在三个主要局限:
                1. 依赖背光源导致亮度损耗;
                2. 视角较窄(侧面观看效果下降);
                3. 响应速度较低(动态画面可能出现拖影)。当前主流已升级为LED背光技术(本质仍是LCD的改进形态),而OLED等新技术正在逐步突破这些限制。

        下图为野火手册的LCD的显示结构。

        

3.1.2 LED和OLED显示器

LED 点阵显示器:
        不存在以上液晶显示器的问题,LED 点阵彩色显示器的单个像素点内包含红绿 蓝三色 LED 灯,显示原理类似我们实验板上的 LED 彩灯,通过控制红绿蓝颜色的强度进行混色, 实现全彩颜色输出,多个像素点构成一个屏幕。

OLED(Organic Light Emitting Diode,有机发光二极管显示器)​​:
        每个像素独立发光,无需背光。有机材料通电自发光,通过红、绿、蓝子像素亮度调节色彩。OLED 显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。待到生产工艺更加成熟时,必将取代现在液晶显示器的地位。

        下图为野火手册的OLED的显示结构。

3.1.3 显示器参数

1. 像素(Pixel)
        成像最小单元,每个像素由红(R)、绿(G)、蓝(B)子像素构成,通过混合三原色呈现丰富色彩。以下是关于 ​高像素密度(PPI - Pixels Per Inch)定义​:PPI 表示 ​每英寸屏幕对角线长度上分布的像素数量,是衡量屏幕细腻度的核心指标。

        

        · 水平像素数​:分辨率中的列像素值(如分辨率 1920×1080 中,水平像素为 1920)
        · 垂直像素数​:分辨率中的行像素值(如分辨率 1920×1080 中,垂直像素为 1080)
        · 屏幕对角线尺寸​:以英寸为单位(1英寸=2.54厘米)

2. 分辨率(Resolution)
        【行像素 × 列像素】表示屏幕总像素数。
        · 1920×1080​(Full HD):横向1920像素,纵向1080像素
        · 2560×1440​(2K):横向2560像素,纵向1440像素

3. 色彩深度(Color Depth)​
        单像素可显示颜色数量,单位为bit(位)。
        计算公式:颜色种类 = 2^{bit数}
        1bit​:单色屏;​8bit​:256色

4. 显示器尺寸(Screen Size)
        屏幕对角线长度,单位英寸(1英寸≈2.54厘米)
        · 24英寸​(主流办公)
        · 27英寸​(设计/电竞黄金尺寸)
        · 32英寸以上​(4K/8K超高清需求

5. 点距(Pixel Pitch)​
        相邻像素中心间距,单位毫米(mm)。计算公式:
        
        · 小点距​(如0.2mm):手机/专业显示器,适合近距离观看
        · 大点距​(如5mm):户外LED屏,需远距离观看避免颗粒感

3.2 LCD原理图

名称功能
CSTFT-LCD 片选信号。
WR向 TFT-LCD 写入数据。
RD从 TFT-LCD 读取数据。
D[15:0]16 位双向数据线。
RST硬复位 TFT-LCD。
RS命令 / 数据标志(0,读写命令;1,读写数据)。
LCD_BL背光灯控制。

        

3.2 LCD控制器芯片(IL9341)

3.2.1 LCD控制器时序

        

3.2.2 FSMC PASRAM模式 与 8080接口对应

        使用其中一条地址线来确定数据/命令选择。

        

3.2.3 LCD颜色储存方式

        ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341 18 位数据线与 MCU 16 位数据线以及 LCD GRAM 的对应关系如图 25.1.2.1 所示:

        

3.2.4 ILI9341常用命令

        下图为正点原子开发手册的内容。

        

四、基于HAL库配置FSMC(LCD)外设

4.1 原理图分析

        

4.2 基于STM32CubeMX配置外设

        

五、字模生成方法及中文和图片显示函数

5.1 中文和图片显示函数

5.1.1 中文显示函数

/**
 * @brief       显示中文
 * @param       x,y         : 起始坐标
 * @param       index       : 汉字索引(在字库中的位置)
 * @param       size        : 字体大小 16/24/32
 * @param       mode        : 叠加方式(1); 非叠加方式(0);
 * @param       color       : 汉字颜色
 * @retval      无
 * 逐列式,阴码,顺向(高位在前)
 */

void lcd_show_chinese(uint16_t x, uint16_t y, uint16_t index, uint8_t size, uint8_t mode, uint16_t color)
{
    uint8_t temp, t1;
    uint16_t y0 = y;
    uint8_t *pfont = NULL;
    uint32_t csize = 0; // 每个汉字占用的字节数

    // 根据字体大小选择字库
    switch (size)
    {
    case 16:
        pfont = (uint8_t *)chinese_1616[index * 2];
        csize = 32; // 16x16 点阵,32字节/字
        break;
    case 24:
        pfont = (uint8_t *)chinese_2424[index * 3];
        csize = 72; // 24x24 点阵,72字节/字
        break;
    case 32:
        pfont = (uint8_t *)chinese_3232[index * 4];
        csize = 128; // 32x32 点阵,128字节/字
        break;
    default:
        return;
    }

    for (uint16_t t = 0; t < csize; t++)
    {
        temp = pfont[t]; // 获取点阵数据

        // 每个字节处理8个像素点
        for (t1 = 0; t1 < 8; t1++)
        {
            if (temp & 0x80)
            { // 高位在前
                lcd_draw_point(x, y, color);
            }
            else if (mode == 0)
            {
                lcd_draw_point(x, y, g_back_color);
            }

            temp <<= 1;
            y++;

            if ((y - y0) == size)
            { // 换列处理
                y = y0;
                x++;
                break;
            }
        }
    }
}

5.1.2 图片显示函数

/**
 * @brief       显示RGB565格式图片
 * @param       x,y   : 图片起始坐标
 * @param       width : 图片宽度
 * @param       height: 图片高度
 * @param       img   : 图片数据指针(RGB565数组)
 * @retval      无
 */
void lcd_show_image(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t *img)
{
    // lcd_set_window(x, y, width, height);    // 设置显示窗口
    // lcd_write_ram_prepare();                // 准备写入GRAM
    
    uint32_t index = 0;
    uint32_t totalpoint = width;

    totalpoint *= height;  /* 得到总点数 */
    lcd_set_cursor(x, y); /* 设置光标位置 */
    lcd_write_ram_prepare();      /* 开始写入GRAM */

    for (index = 0; index < totalpoint; index++)
    {
        if(index % width == 0){  // 换行
            lcd_set_cursor(x, y + index / width); /* 设置光标位置 */
            lcd_write_ram_prepare();      /* 开始写入GRAM */
        }
        
        LCD->LCD_RAM = img[index];
    }
    
}

5.2 字模生成方法

5.1.1 中文字模生成

1. 字库取模方法

2. 字库数据

const unsigned char chinese_1616[][16]=
{
{0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x0F,0xFE,0x70,0x00,0x04,0x08,0x18,0x30,},
{0x70,0xC2,0x10,0x02,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00,},/*"你",0*/
{0x00,0x00,0x00,0x00,0x08,0x82,0x0F,0x44,0x78,0x28,0x08,0x30,0x0F,0xCC,0x00,0x00,},
{0x21,0x00,0x21,0x02,0x21,0x02,0x27,0xFE,0x29,0x00,0x31,0x00,0x01,0x00,0x00,0x00,},/*"好",1*/
{0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x20,0x10,0x20,0x1F,0xF0,0x00,0x04,0x23,0x08,},
{0x2D,0x10,0x21,0x60,0x21,0x82,0x21,0x02,0x3F,0xFE,0x21,0x00,0x21,0x00,0x00,0x00,},/*"呀",2*/
};

const unsigned char chinese_2424[][24]=
{
{0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x01,0x80,0x01,0x0E,0xFF,0xFE,0x3C,0x00,0x00,},
{0x70,0x00,0x08,0x20,0x10,0x30,0x00,0x60,0xC0,0x01,0x83,0x80,0x07,0x0E,0x04,0x3E,0x08,0x04,0x32,0x00,0x02,0x22,0x00,0x03,},
{0x02,0xFF,0xFE,0x02,0x40,0x00,0x02,0x00,0x00,0x02,0x08,0x00,0x02,0x44,0x00,0x02,0x83,0x00,0x07,0x01,0xC0,0x03,0x00,0xF0,},/*"你",0*/
};

const unsigned char chinese_3232[][32]=
{
{0x00,0x00,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x0F,0xBF,0xFF,0xFF,0x3E,0x20,0x00,0x00,},
{0xF8,0x00,0x00,0x00,0xE0,0x00,0x00,0x08,0xC0,0x02,0x00,0x30,0x00,0x0C,0x00,0xC0,0x00,0x18,0x03,0x80,0x00,0x70,0x1F,0x00,0x01,0xC0,0xFC,0x00,0x0F,0x81,0xF0,0x02,},
{0x7F,0x00,0xC0,0x02,0xF9,0x00,0x80,0x03,0xE1,0x00,0x00,0x01,0x41,0x00,0x00,0x03,0x01,0x3F,0xFF,0xFF,0x01,0x3F,0xFF,0xFF,0x01,0x10,0x00,0x00,0x01,0x00,0x00,0x00,},
{0x01,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x01,0x00,0x40,0x00,0x01,0x10,0x30,0x00,0x01,0x60,0x1C,0x00,0x03,0xC0,0x0F,0x00,0x03,0x80,0x07,0xC0,0x01,0x80,0x03,0xF0,},/*"你",0*/
};

5.1.2 图片字模生成

5.3 最终LCD效果显示图

六、本文的工程文件下载链接

工程Github下载链接:https://github.com/chipdynkid/MCU-DL-STM32
(国内)工程Gitcode下载链接https://gitcode.com/chipdynkid/MCU-DL-STM32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值