【正点原子STM32】OLED实验(OLED显示屏、ATK_OLED模块,OLED驱动原理、SSD1306工作时序(8080时序),OLED驱动芯片,字符显示原理、字模生成软件,OLED基本驱动步骤)

这篇具有很好参考价值的文章主要介绍了【正点原子STM32】OLED实验(OLED显示屏、ATK_OLED模块,OLED驱动原理、SSD1306工作时序(8080时序),OLED驱动芯片,字符显示原理、字模生成软件,OLED基本驱动步骤)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、OLED显示屏介绍

  • 1.1、ATK_OLED模块介绍
  • 1.2、ATK_OLED模块引脚说明(8080并口模式)
  • 1.3、OLED模块硬件连接

二、OLED驱动原理

  • 2.1、SSD1306工作时序(8080时序)
  • 2.2、SSD1306工作时序(8080时序)–写时序

三、OLED驱动芯片简介

  • 3.1、什么是GRAM?
  • 3.2、什么是页地址模式?
  • 3.3、解决显示覆盖问题?
  • 3.4、GRAM实现代码
  • 3.5、GRAM和OLED屏幕坐标对应关系表
  • 3.6、画点函数实现代码

四、字符显示原理

  • 4.1、什么是ASCII字符?
  • 4.2、什么是内码(编码)?
  • 4.3、如何将字符显示在OLED上?
  • 4.4、字符显示代码(精简)
  • 4.5、ASCII字库制作(16*16)

五、OLED基本驱动步骤
六、编程实战
七、总结

一、OLED显示屏介绍

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
OLED(Organic Light-Emitting Diode)显示屏是一种利用有机发光二极管制成的显示技术。与传统的LCD(Liquid Crystal Display)显示屏相比,OLED具有许多优点和一些缺点。

优点:

  1. 自发光:OLED屏幕每个像素点都是发光的,不需要额外的背光源,因此具有更高的发光效率。

  2. 低功耗:因为OLED只在需要的像素点发光,而不需要像LCD那样通过背光光源进行筛选,所以在显示暗色画面时可以大幅降低功耗,节能环保。

  3. 高对比度:OLED屏幕具有极高的对比度,因为黑色像素可以完全关闭,而白色像素可以发出非常亮的光,这使得OLED屏幕在显示深色和亮色之间的差异更加清晰,色彩更加鲜艳。

缺点:

  1. 烧屏:长时间显示相同的图像会导致该图像在屏幕上留下痕迹,即所谓的“烧屏”现象。这在某些情况下可能会降低显示屏的寿命。

  2. 价格昂贵:由于制造成本较高,OLED显示屏通常比LCD屏幕更昂贵,这使得它在某些应用领域的普及受到一定限制。

  3. 低频频闪:一些OLED显示屏在低亮度下可能存在频闪问题,可能会引起一些用户的不适。

应用场景:

  1. 手机/平板电脑:由于OLED显示屏的薄、轻、灵活等特点,它被广泛应用于高端智能手机和平板电脑的显示屏上。

  2. 电视:OLED电视具有出色的画质表现,逐渐成为高端电视市场的主流产品之一。

  3. 手表/手环:OLED显示屏由于其小尺寸、低功耗等特点,被广泛应用于智能手表、智能手环等可穿戴设备上。

总的来说,尽管OLED显示屏具有一些缺点,但其优越的显示效果和广泛的应用前景使得它在显示技术领域有着重要的地位。

1.1、ATK_OLED模块介绍

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
ATK_OLED模块是一款高性能的OLED显示模块,具有以下特点和功能:

  • 尺寸和分辨率:该模块尺寸较小,为0.96英寸,分辨率为128×64像素,适合于一些对显示尺寸要求较小的场景。

  • 高亮度:模块具有高亮度的特点,能够在不同环境下清晰显示内容。

  • 集成升压电路:内部集成了DCDC升压电路,只需3.3V的供电就可以正常工作,简化了外部电路设计。

  • 驱动IC:采用了SSD1306驱动IC,该驱动IC具有稳定性好、兼容性强的特点,可以保证模块的稳定性和可靠性。

  • 通信接口:支持多种通信接口,包括8位6800并口、8位8080并口、4线SPI以及IIC(I2C)等四种方式,可以根据实际需求选择合适的接口进行通信。

  • 接口配置:通过BS1和BS2引脚的配置,可以选择不同的通信接口方式,具体配置如下:

    • 8位8080并口:BS1=1,BS2=1
    • 8位6800并口:BS1=0,BS2=1
    • 4线SPI:BS1=0,BS2=0
    • IIC:BS1=1,BS2=0

通过以上特点和接口配置,ATK_OLED模块可以广泛应用于各种需要小尺寸、高亮度显示的场景,如嵌入式系统、手持设备、智能穿戴等领域。

1.2、ATK_OLED模块引脚说明(8080并口模式)

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
在ATK_OLED模块的8080并口模式下,共有13个引脚,其中8个用于数据传输,5个用于控制信号。以下是各引脚的说明:

  1. CS(Chip Select):OLED片选信号,用于选择OLED模块,低电平有效。

  2. WR(Write):向OLED写入数据的控制信号。

  3. RD(Read):向OLED读取数据的控制信号。

  4. D[7:0]:8位双向数据线,用于传输数据。

  5. RST(Reset)RES:硬复位OLED模块的控制信号,低电平有效,用于将OLED模块复位到初始状态。

  6. DC(Data/Command):数据/命令标志线,用于区分发送的是数据还是命令。当DC为低电平时,表示发送的是命令;当DC为高电平时,表示发送的是数据。

这些引脚的功能和控制信号用于控制OLED模块的工作状态和数据传输,通过正确配置这些引脚以及发送相应的控制信号和数据,可以实现对OLED模块的控制和显示操作。

1.3、OLED模块硬件连接

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

二、OLED驱动原理

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
OLED屏的驱动原理主要涉及以下几个方面:

  1. 驱动芯片选择:选择适合的OLED驱动芯片是驱动OLED屏的第一步。常用的OLED驱动芯片包括SSD1306、SSD1351、SH1106等,根据需要选择合适的驱动芯片。

  2. 时序控制:根据所选的驱动芯片的通信接口(如8080时序、6800时序、SPI、I2C等),实现相应的时序控制。这包括控制数据/命令信号、写入数据、读取数据等操作的时序要求。

  3. 初始化序列:每款OLED屏都有自己的初始化序列,用于初始化屏幕的各种参数和设置。这个序列一般由OLED屏厂家提供,需要在驱动程序中正确执行,以确保屏幕正常工作。

  4. 绘图功能实现:通过画点函数和读点函数来实现对屏幕上的像素点进行操作。画点函数用于向屏幕指定位置写入像素点的颜色,而读点函数则用于读取屏幕上指定位置的像素点的颜色信息。基于这两个函数,可以实现各种图形绘制、文字显示等功能。

在驱动OLED屏时,需要根据驱动芯片的规格书和屏幕的特性来编写相应的驱动程序。通过正确控制时序、执行初始化序列以及实现绘图功能,可以使OLED屏正常显示所需的图像和文字内容。

2.1、SSD1306工作时序(8080时序)

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
以下是SSD1306在8080并口时序下的基本读/写过程:

写入数据过程

  1. 设置DC为高电平,表示写入数据。
  2. 拉低片选信号,选中SSD1306。
  3. 设置WR为低电平,准备写入数据。
  4. 将待写入的数据放置在数据线D[7:0]上。
  5. 拉高WR,产生上升沿,将数据写入SSD1306内部。

读取数据过程

  1. 设置DC为低电平,表示读取命令。
  2. 拉低片选信号,选中SSD1306。
  3. 设置RD为低电平,准备读取数据。
  4. 在RD的上升沿,数据从SSD1306输出到数据线D[7:0]上。

在以上过程中,DC信号用于区分写入数据和命令。片选信号用于选中SSD1306芯片,确保数据传输的目标正确。WR信号用于控制写入数据的时机,RD信号用于控制读取数据的时机。通过正确控制这些信号的时序,可以实现与SSD1306芯片的可靠通信。

2.2、SSD1306工作时序(8080时序)–写时序

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
在8080并口时序下,针对SSD1306的写时序如下所示:

  1. 设置DC引脚电平:根据需要,如果要写入数据,则将DC引脚置高;如果要写入命令,则将DC引脚置低。

  2. 拉低CS引脚:将CS引脚拉低,以选中SSD1306芯片。

  3. 拉低WR引脚:将WR引脚拉低,表示准备写入数据。

  4. 准备数据:将待写入的数据放置在数据线上(D[7:0])。

  5. 拉高WR引脚:在WR引脚产生上升沿时,将数据写入到SSD1306内部。

  6. 释放CS引脚:释放CS引脚,不再选中SSD1306芯片。

  7. 释放DC引脚:根据需要,释放DC引脚,将其置为高电平(如果前面是写入数据)或者置为低电平(如果前面是写入命令)。

需要注意的是,在WR引脚产生上升沿时,数据才会被正确写入到SSD1306芯片内部。同时,保持RD引脚处于高电平状态,因为在写操作中一般不需要读取数据。
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
SSD1306的写时序函数,具体步骤如下:

  1. void oled_data_out(uint8_t data): 这个函数用于将数据写入到数据端口(D[7:0])。在这个函数中,首先读取GPIOC的输出数据寄存器(ODR),然后根据掩码操作将低8位清零,再将传入的数据(data)的低8位与之前的高8位进行或运算,最终将结果写入到GPIOC的输出数据寄存器中,即完成了数据的输出操作。

  2. void oled_wr_byte(uint8_t data, uint8_t cmd): 这个函数用于向SSD1306写入一个字节的数据或命令。根据传入的cmd参数决定是写入数据还是写入命令。具体的步骤如下:

    • OLED_RS(cmd): 设置DC引脚的电平,用于区分是写入数据还是写入命令。
    • OLED_CS(0): 拉低片选线,选中SSD1306芯片。
    • OLED_WR(0): 拉低WR线,表示准备写入数据或命令。
    • oled_data_out(data): 调用oled_data_out函数,将数据写入到数据端口(D[7:0])。
    • OLED_WR(1): 在WR引脚上升沿时,将数据发送到SSD1306芯片。
    • OLED_CS(1): 取消片选信号,结束对SSD1306的访问。
    • OLED_RS(1): 释放DC引脚,恢复默认状态。

通过这些步骤,可以完成向SSD1306写入数据或命令的操作。

void oled_data_out(uint8_t data)
{
    // 将传入的data数据通过掩码与当前GPIOC寄存器的低8位进行组合,保留低8位不变,高8位置0
    GPIOC->ODR = (GPIOC->ODR & 0xFF00) | (data & 0x00FF);
}

void oled_wr_byte(uint8_t data, uint8_t cmd)
{   
    OLED_RS(cmd);       // 判断传入的cmd参数,决定DC引脚的电平状态,表示数据类型或者命令类型
    OLED_CS(0);         // 将片选信号置低,选中SSD1306芯片
    
    OLED_WR(0);         // 将WR引脚置低,准备写入数据
    oled_data_out(data);// 调用oled_data_out函数,将数据写入到GPIOC寄存器的低8位数据线
    
    OLED_WR(1);         // 在WR引脚上升沿时,数据被写入到SSD1306内部
    
    OLED_CS(1);         // 取消片选,释放SSD1306芯片
    OLED_RS(1);         // 释放RS线,恢复为默认状态,用于区分后续的数据类型或者命令类型
}

三、OLED驱动芯片简介

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
OLED驱动芯片(如SSD1306)是用于控制OLED显示屏的关键组件,它负责管理显示的内容、亮度、对比度等参数,并将数据传输到OLED屏幕上以实现图像或文本的显示。

以下是SSD1306驱动芯片常用的几个命令:

  1. 0xAE / 0xAF - 设置显示开关

    • D7:控制GRAM的写入位置,通常为1。
    • D6:控制显示开关。
    • X0:0为关闭显示,1为开启显示。
  2. 0xB0 ~ 0xB7 - 设置页地址

    • X2, X1, X0:设置页地址,范围通常为07,对应页07。
  3. 0x00 ~ 0x0F - 设置列地址(L4)

    • X3, X2, X1, X0:设置8位列地址的低四位。
  4. 0x10 ~ 0x1F - 设置列地址(H4)

    • X3, X2, X1, X0:设置8位列地址的高四位。

这些命令可以用于设置SSD1306的工作模式、显示状态以及显示内容的位置等。例如,通过设置页地址和列地址,可以指定要在OLED屏幕上显示的内容的位置。同时,SSD1306还支持多种内存地址模式,包括页地址模式、水平地址模式和垂直地址模式,以满足不同场景下的需求。

通过发送相应的命令和数据,单片机可以控制SSD1306芯片,并最终控制OLED显示屏显示出相应的图像或文本内容。

3.1、什么是GRAM?

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
GRAM是图形显示数据RAM(Graphic Display Data RAM)的缩写,用于存储要在显示屏上显示的图像或文本的位模式数据。它是一块位映射的静态RAM,大小为128×64位,可以分为8页,每页对应显示屏的一行像素。GRAM保存的数据决定了OLED显示屏上每个像素点的状态,从而实现图像或文本的显示。

以下是一些常用的SSD1306命令,用于配置GRAM的参数和工作模式:

  1. 0xA0 / 0xA1 - 设置段重映射

    • A0:列地址0映射到SEG0。
    • A1:列地址127映射到SEG0。
  2. 0xC0 / 0xC8 - 设置列输出扫描方向

    • C0:正常模式,从COM0向COM63扫描。
    • C8:重映射模式,从COM63向COM0扫描。

通过这些命令,可以调整GRAM的工作模式和参数,以满足不同的显示需求。例如,可以设置扫描方向、段重映射等参数,以正确显示图像或文本在OLED屏幕上的位置和方向。

3.2、什么是页地址模式?

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
页地址模式是一种内存地址模式,用于操作图形显示数据RAM(GRAM)。在页地址模式下,GRAM被分割成多个页面,每个页面包含固定数量的列。通过设置页地址和列地址,可以访问GRAM中特定页面的像素数据。

具体来说,页地址模式的工作方式如下:

  1. 发送内存地址模式命令(0x20):这个命令用于设置内存地址模式,以便指定将要发送的地址模式类型。

  2. 发送页地址模式命令(0x02):这个命令用于选择页地址模式。一旦设置了页地址模式,后续的操作将按照页地址模式进行。

在页地址模式下,列地址指针会自动递增。当列地址指针到达列结束地址时,它会重置为开始地址,但页地址指针保持不变。这意味着在访问下一页GRAM内容之前,用户必须手动设置新的页面和列地址。

举例来说,如果要访问页地址为0xB2,列地址为0x0310的像素数据,首先需要将内存地址模式设置为页地址模式,然后发送页地址为0xB2的命令,接着发送列地址低位为0x03,列地址高位为0x10的命令,最后可以读取或写入GRAM中对应位置的像素数据。

3.3、解决显示覆盖问题?

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
解决显示覆盖问题的方法是在操作前先更新单片机内部的GRAM(图形显示数据RAM),确保单片机内部的数据与实际显示的数据一致。这可以通过以下步骤实现:

  1. 读取需要修改的位置的数据:在进行任何绘图操作之前,首先读取要绘制的位置的当前数据状态,即0或1。

  2. 修改数据:根据需要绘制的图形,对读取的数据进行修改,确保新绘制的图形与原有数据不会发生冲突。

  3. 写入数据:将修改后的数据写入单片机内部的GRAM中。这一步需要确保单片机内部的GRAM与实际显示的OLED屏幕的GRAM保持同步,以避免显示覆盖问题。

在实现上述步骤时,需要注意以下几点:

  • 对于一些SRAM较小的单片机,内存可能不足以容纳整个GRAM。在这种情况下,建议使用并口模式,因为它可以直接操作外部的GRAM,而不需要将数据先存储在单片机内部。

  • 如果单片机支持读模式读取GRAM数据并且能够直接写入GRAM,可以采用读-改-写的方式来解决显示覆盖问题。这样可以避免先读取数据到单片机内部,再修改和写入的额外开销。

通过以上方法,可以有效地解决显示覆盖问题,确保图形绘制的准确性和连续性。

3.4、GRAM实现代码

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

static uint8_t g_oled_gram[128][8];    // OLED的显存,128列,8页

void oled_refresh_gram(void) 
{   
    uint8_t i, n;
    // 遍历8页数据
    for (i = 0; i < 8; i++)
    {
        oled_wr_byte(0xb0 + i, OLED_CMD);// 设置页地址(0~7)
        oled_wr_byte(0x00, OLED_CMD);    // 设置显示位置的列低地址
        oled_wr_byte(0x10, OLED_CMD);    // 设置显示位置的列高地址

        // 遍历128列数据
        for (n = 0; n < 128; n++)
        {
            oled_wr_byte(g_oled_gram[n][i], OLED_DATA);    // 将显存中对应位置的数据写入到OLED中
        }
    }
}

3.5、GRAM和OLED屏幕坐标对应关系表

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
在OLED屏幕中,每个像素点的显示状态通常由一个字节(8位)来表示,因此需要将屏幕分成多个页面,每个页面有128列,每列有8行,每一行代表一个像素点的状态。

根据这个规则,可以使用一个二维数组来表示整个屏幕的显存,数组名为OLED_GRAM,数组的每个元素表示一个像素点的状态。在二维数组中,第一个索引表示列(x轴),第二个索引表示页(y轴/8)。

对于一个通用的点(x, y)置1的表达式为:

OLED_GRAM[x][y / 8] |= 1 << (y % 8);

这条表达式的含义是将第x列、第y行对应的字节的第(y % 8)位(即该字节的第y % 8位)置1,实现了在屏幕上将坐标为(x, y)的像素点设置为亮(或者说点亮该像素点)的功能。

3.6、画点函数实现代码

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

/**
 * @brief 在OLED屏幕上绘制一个像素点
 * 
 * @param x 横坐标(范围:0~127)
 * @param y 纵坐标(范围:0~63)
 * @param dot 点的状态,1表示画实心点,0表示清除该点
 */
void oled_draw_point(uint8_t x, uint8_t y, uint8_t dot) 
{	
    uint8_t pos, bx, temp = 0;
    
    if (x > 127 || y > 63)	// 判断坐标是否超出屏幕范围
        return;	// 超出范围了,直接返回
    
    pos = y / 8; 		// 计算页地址
    bx = y % 8; 		// 计算y在对应字节里面的位置
    temp = 1 << bx;		// 转换后y对应的bit位置
    
    if (dot)	// 画实心点
        g_oled_gram[x][pos] |= temp;  // 将temp与显存中的对应位置的数据进行或操作
    else
        g_oled_gram[x][pos] &= ~temp;  // 将temp按位取反后与显存中对应位置的数据进行与操作,实现清除该点的功能
}

这段代码实现了一个画点函数,用于在OLED屏幕上绘制一个像素点,其坐标为(x, y),dot为1表示画实心点,为0表示清除该点。

具体实现如下:

  • 首先判断坐标(x, y)是否超出屏幕范围,如果超出范围则直接返回。
  • 计算出y坐标在显存中对应的页地址pos(即y坐标所在的字节)以及在该字节中的位置bx(即y坐标对应的位)。
  • 将1左移bx位,得到temp,即表示要绘制的像素点在对应字节中的位置。
  • 如果dot为1,则将temp与显存中的对应位置的数据进行或操作,实现画实心点的功能;如果dot为0,则将temp按位取反后与显存中对应位置的数据进行与操作,实现清除该点的功能。

这样,调用该函数就可以在OLED屏幕上实现绘制点的功能。

四、字符显示原理

4.1、什么是ASCII字符?

ASCII码:http://c.biancheng.net/c/ascii/
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

4.2、什么是内码(编码)?

参考资料:http://www.cnblogs.com/gavin-num1/p/5170247.html
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

4.3、如何将字符显示在OLED上?

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
显示字符在OLED上通常需要以下步骤:

  1. 准备字库: 字库是字符的点阵数据集合,它包含了每个字符在显示屏上的像素点布局。这些点阵数据可以预先生成,或者从外部资源中加载。

  2. 将字符转换为点阵数据: 单片机根据字符的ASCII码或其他编码,从字库中查找对应的点阵数据。每个字符都会有一个对应的点阵表示。

  3. 在OLED屏幕上绘制字符: 将获取的点阵数据按照字符的宽度和高度,在OLED屏幕上对应的位置绘制像素点。可以通过循环逐个像素点绘制,或者利用硬件加速功能一次性绘制整个字符。

  4. 字符之间的间距: 根据需要,可以在字符之间留出一定的间距,以提高字符显示的清晰度和美观度。通常,ASCII字符的宽度可以取汉字宽度的一半作为参考。

通过这些步骤,就可以在OLED屏幕上显示出各种字符和文字了。

// 定义字符A的16*8点阵数据
uint8_t oled_ascii_1608[] =
{  
    0x00, 0x04, 0x00, 0x3C, 0x03, 0xC4, 0x1C, 0x40,
    0x07, 0x40, 0x00, 0xE4, 0x00, 0x1C, 0x00, 0x04
};

// 在OLED上显示字符
void oled_show_char(uint8_t x, uint8_t y, char ch)
{
    uint8_t i, j;
    
    // 根据字符获取在ASCII码表中的索引
    uint8_t index = ch - 'A';
    
    // 根据索引找到对应字符的点阵数据
    uint8_t *ascii_data = &oled_ascii_1608[index * 16];
    
    // 在屏幕上显示字符
    for (i = 0; i < 16; i++)
    {
        for (j = 0; j < 8; j++)
        {
            // 检查点阵数据的每一位,如果为1,则在屏幕上对应位置画点
            if (ascii_data[i] & (1 << j))
            {
                oled_draw_point(x + j, y + i, 1);  // 画实心点
            }
            else
            {
                oled_draw_point(x + j, y + i, 0);  // 清除点
            }
        }
    }
}

4.4、字符显示代码(精简)

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

uint8_t temp, t1, t;
uint8_t y0 = y;            /* 保存y的初始值 */

for(t = 0; t < 16; t++)    /* 总共16个字节,要遍历一遍 */
{
    temp = oled_ascii_1608[t];    /* 依次获取点阵数据 */

    for(t1 = 0; t1 < 8; t1++)
    {
        if(temp & 0X80)         /* 这个点有效,需要画出来 */
            oled_draw_point(x, y, mode);
        else                    /* 这个点无效,不需要画出来 */
            oled_draw_point(x, y, !mode);
 
        temp <<= 1;             /* 将低位数据移位到高位,丢弃最高位数据 */
        y++;                    /* y坐标自增 */

        if((y - y0) == 16)      /* 显示完一列了 */
        {
            y = y0;             /* y坐标复位 */
            x++;                /* x坐标递增 */
            break;              /* 跳出for循环 */
        }
    }
}

4.5、ASCII字库制作(16*16)

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

五、OLED基本驱动步骤

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
这是一个简单的OLED基本驱动步骤,用于在单片机上驱动OLED显示屏:

  1. 确定IO连接关系

    • 查阅开发板的OLED接口原理图,确定OLED与单片机之间的连接关系,包括数据线和控制线的接口。
  2. 初始化IO口

    • 根据连接关系,初始化连接OLED的各个IO口,确保单片机可以与OLED通信。
  3. 编写8080接口函数

    • 编写能够发送数据和命令到OLED的8080并口接口函数,包括发送数据、命令的函数。
  4. 编写OLED初始化函数

    • 编写oled_init函数,根据OLED的数据手册或者厂家提供的初始化序列,配置OLED的各项参数,确保OLED能够正常工作。
  5. 编写OLED画点函数

    • 编写oled_draw_point函数,该函数用于在OLED的任意位置绘制一个像素点,通常会根据需要转换成屏幕的坐标,然后调用底层的驱动函数实现像素点的绘制。

这些步骤是基本的OLED驱动过程,在实际应用中可能会根据具体需求进行调整和扩展。

六、编程实战

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片

oled.c

#include "stdlib.h"
#include "./BSP/OLED/oled.h"
#include "./BSP/OLED/oledfont.h"
#include "./SYSTEM/delay/delay.h"

static uint8_t g_oled_gram[128][8];  /* OLED的显存 */

/**
 * @brief   更新显存数据到OLED屏幕
 * @param   无
 * @retval  无
 */
void oled_refresh_gram(void)
{
    uint8_t i, n;

    for (i = 0; i < 8; i++)
    {
        oled_wr_byte(0xb0 + i, OLED_CMD);  /* 设置页地址(0~7)*/
        oled_wr_byte(0x00, OLED_CMD);      /* 设置显示位置-列低地址 */ 
        oled_wr_byte(0x10, OLED_CMD);      /* 设置显示位置-列高地址 */
        
        for (n = 0; n < 128; n++)
        {
            oled_wr_byte(g_oled_gram[n][i], OLED_DATA);
        }
    }
}

/**
 * @brief   在指定坐标画点
 * @param   x: x坐标
 *          y: y坐标
 *          dot: 画点还是清除点(1:画点,0:清除点)
 * @retval  无
 */
void oled_draw_point(uint8_t x, uint8_t y, uint8_t dot) 
{
    uint8_t pos, bx, temp = 0;
    
    if (x > 127 || y > 63)  return;    /* 超出范围了 */
    
    pos = y / 8;    /*  页地址 */
    bx = y % 8;     /*  计算y在对应字节里面的位置 */
    temp = 1 << bx; /*  转换后y对应的bit位置 */

    if (dot)    /*  画实心点 */
        g_oled_gram[x][pos] |= temp;
    else
        g_oled_gram[x][pos] &= ~temp;
}

/* 16*16大小,字符A的点阵数据数组:*/
uint8_t oled_ascii_1608[] =
{
    0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,
    0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04
};

/**
 * @brief   在OLED屏幕上显示字符
 * @param   x: 字符左上角的x坐标
 *          y: 字符左上角的y坐标
 *          mode: 显示模式(1:正常显示,0:反相显示)
 * @retval  无
 */
void oled_show_char_test(uint8_t x, uint8_t y, uint8_t mode)
{
    uint8_t temp, t1, t;
    uint8_t y0 = y;                 /* 保存y的初值 */

    for (t = 0; t < 16; t++)        /* 总共16个字节,要遍历一遍 */
    {
        temp = oled_ascii_1608[t];  /* 依次获取点阵数据 */

        for (t1 = 0; t1 < 8; t1++)
        {
            if (temp & 0X80)    /* 这个点有效,需要画出来 */
                oled_draw_point(x, y, mode);
            else                /* 这个点无效,不需要画出来 */
                oled_draw_point(x, y, !mode);

            temp <<= 1;         /* 低位数据往高位移位,最高位数据直接丢弃 */
            y++;                /* y坐标自增 */

            if ((y - y0) == 16) /* 显示完一列了 */
            {
                y = y0;         /* y坐标复位 */
                x++;            /* x坐标递增 */
                break;          /* 跳出 for循环 */
            }
        }
    }
}

/**
 * @brief   初始化OLED(SSD1306)
 * @param   无
 * @retval  无
 */
void oled_init(void)
{
    GPIO_InitTypeDef gpio_init_struct;
    
    /* 使能端口时钟 */
    __HAL_RCC_GPIOC_CLK_ENABLE(); 
    __HAL_RCC_GPIOD_CLK_ENABLE(); 
    __HAL_RCC_GPIOG_CLK_ENABLE(); 
    
    /* PC0 ~ 7 设置 */
    gpio_init_struct.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_init_struct.Mode = GPIO_MODE_OUTPUT_PP;  /* 推挽输出 */
    gpio_init_struct.Pull = GPIO_PULLUP;          /* 上拉 */
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM;  /* 中速 */
    HAL_GPIO_Init(GPIOC, &gpio_init_struct);       /* PC0 ~ 7 设置 */

    /* PD3, PD6 设置 */
    gpio_init_struct.Pin = GPIO_PIN_3 | GPIO_PIN_6; 
    HAL_GPIO_Init(GPIOD, &gpio_init_struct); /* PD3, PD6 设置 */
    
    /* WR/RD/RST引脚模式设置 */
    gpio_init_struct.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
    HAL_GPIO_Init(GPIOG, &gpio_init_struct);  /* WR/RD/RST引脚模式设置 */

    OLED_WR(1);
    OLED_RD(1);

    OLED_CS(1);
    OLED_RS(1);
    
    /* 复位时序 */
    OLED_RST(0);
    delay_ms(100);
    OLED_RST(1);

    oled_wr_byte(0xAE, OLED_CMD);   /* 关闭显示 */
    /* 其他初始化命令省略... */
}

/**
 * @brief   向OLED写入数据字节
 * @param   data: 数据字节
 *          cmd: 命令还是数据(OLED_CMD: 命令,OLED_DATA: 数据)
 * @retval  无
 */
static void oled_wr_byte(uint8_t data, uint8_t cmd)
{
    OLED_RS(cmd);  /* 数据类型,由传参决定 */
    OLED_CS(0);     /* 拉低片选线,选中SSD1306 */
    OLED_WR(0);     /* 拉低WR线,准备数据 */
    oled_data_out(data); /* WR低电平期间,准备数据 */
    OLED_WR(1);     /* 在WR上升沿,数据发出 */
    OLED_CS(1);     /* 取消片选 */
    OLED_RS(1);     /* 释放RS线,恢复默认 */
}

/**
 * @brief   在指定坐标画点
 * @param   x: x坐标
 *          y: y坐标
 * @retval  无
 */
void oled_draw_point_test(uint8_t x, uint8_t y)
{
    /* 页地址模式 */
    uint8_t page_num = y / 8;
    
    /* 1、发送页地址 */
    oled_wr_byte(0xB0 | page_num, OLED_CMD);
    
    /* 2、发送列地址 */
    oled_wr_byte((x & 0x0F) | 0x00, OLED_CMD);      /* 列地址低四位 */
    oled_wr_byte((x & 0xF0) >> 4 | 0x10, OLED_CMD); /* 列地址高四位 */
    
    /* 3、发送1字节数据 */
    oled_wr_byte(1 << (y % 8), OLED_DATA);
}

/**
 * @brief   清除OLED屏幕上的所有内容
 * @param   无
 * @retval  无
 */
void oled_clear(void)
{
    uint8_t i, n;

    for (i = 0; i < 8; i++)
    {
        oled_wr_byte(0xb0 + i, OLED_CMD); /* 设置页地址(0~7) */
        oled_wr_byte(0x00, OLED_CMD);     /* 设置显示位置—列低地址 */
        oled_wr_byte(0x10, OLED_CMD);     /* 设置显示位置—列高地址 */

        for (n = 0; n < 128; n++)
        {
            oled_wr_byte(0x00, OLED_DATA);
        }
    }
}

oled.h

#ifndef __OLED_H
#define __OLED_H

#include "stdlib.h" 
#include "./SYSTEM/sys/sys.h"


/******************************************************************************************/
/* OLED 8080 模式引脚 定义 */

/* 片选脚 */
#define OLED_CS_PORT                GPIOD
#define OLED_CS_PIN                 GPIO_PIN_6
#define OLED_CS_CLK_ENABLE()        do{ __HAL_RCC_GPIOD_CLK_ENABLE(); }while(0)   /* PD口时钟使能 */

/* 数据类型脚 命令/数据*/
#define OLED_RS_PORT                GPIOD
#define OLED_RS_PIN                 GPIO_PIN_3
#define OLED_RS_CLK_ENABLE()        do{ __HAL_RCC_GPIOD_CLK_ENABLE(); }while(0)   /* PD口时钟使能 */

/* 向OLED读取数据脚 */
#define OLED_RD_PORT                GPIOG
#define OLED_RD_PIN                 GPIO_PIN_13
#define OLED_RD_CLK_ENABLE()        do{ __HAL_RCC_GPIOG_CLK_ENABLE(); }while(0)   /* PG口时钟使能 */

/* 向OLED写入数据脚 */
#define OLED_WR_PORT                GPIOG
#define OLED_WR_PIN                 GPIO_PIN_14
#define OLED_WR_CLK_ENABLE()        do{ __HAL_RCC_GPIOG_CLK_ENABLE(); }while(0)   /* PG口时钟使能 */

/* 复位脚 */
#define OLED_RST_PORT               GPIOG
#define OLED_RST_PIN                GPIO_PIN_15
#define OLED_RST_CLK_ENABLE()       do{ __HAL_RCC_GPIOG_CLK_ENABLE(); }while(0)   /* PG口时钟使能 */

/* 数据脚 */
#define OLED_DATA_PORT               GPIOC
#define OLED_DATA_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
#define OLED_DATA_CLK_ENABLE()       do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0)   /* PC口时钟使能 */
/******************************************************************************************/

/* OLED 8080模式相关端口控制函数 定义 */
#define OLED_RST(x)     do{ x ? \
                                  HAL_GPIO_WritePin(OLED_RST_PORT, OLED_RST_PIN, GPIO_PIN_SET) : \
                                  HAL_GPIO_WritePin(OLED_RST_PORT, OLED_RST_PIN, GPIO_PIN_RESET); \
                        }while(0)       /* 设置RST引脚 */

#define OLED_CS(x)      do{ x ? \
                                  HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_SET) : \
                                  HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET); \
                        }while(0)       /* 设置CS引脚 */
#define OLED_RS(x)      do{ x ? \
                                  HAL_GPIO_WritePin(OLED_RS_PORT, OLED_RS_PIN, GPIO_PIN_SET) : \
                                  HAL_GPIO_WritePin(OLED_RS_PORT, OLED_RS_PIN, GPIO_PIN_RESET); \
                        }while(0)       /* 设置RS引脚 */
                              
#define OLED_WR(x)      do{ x ? \
                                  HAL_GPIO_WritePin(OLED_WR_PORT, OLED_WR_PIN, GPIO_PIN_SET) :  \
                                  HAL_GPIO_WritePin(OLED_WR_PORT, OLED_WR_PIN, GPIO_PIN_RESET); \
                        } while (0)     /* 设置WR引脚 */

#define OLED_RD(x)      do{ x ? \
                                  HAL_GPIO_WritePin(OLED_RD_PORT, OLED_RD_PIN, GPIO_PIN_SET) : \
                                  HAL_GPIO_WritePin(OLED_RD_PORT, OLED_RD_PIN, GPIO_PIN_RESET); \
                        }while(0)       /* 设置RD引脚 */

/* 命令/数据 定义 */
#define OLED_CMD        0       /* 写命令 */
#define OLED_DATA       1       /* 写数据 */

/******************************************************************************************/
    
static void oled_wr_byte(uint8_t data, uint8_t cmd);    /* 写一个字节到OLED */
void oled_init(void);           /* OLED初始化 */


#endif

oledfont.h

#ifndef __OLEDFONT_H
#define __OLEDFONT_H  

/* 常用ASCII表
 * 偏移量32 
 * ASCII字符集: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
 * PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式
 * 总共:3个字符集(12*12、16*16和24*24),用户可以自行新增其他分辨率的字符集。
 * 每个字符所占用的字节数为:(size/8+((size%8)?1:0))*(size/2),其中size:是字库生成时的点阵大小(12/16/24...)
 */
 
/* 12*12 ASCII字符集点阵 */
const unsigned char oled_asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/
{0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/
{0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/
{0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/
{0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/
{0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/
{0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/
{0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/
{0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/
{0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/
{0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/
{0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/
{0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/
{0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/
{0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/
{0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/
{0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/
{0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/
{0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/
{0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/
{0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/
{0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/
{0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/
{0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/
{0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/
{0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/
{0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/
{0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/
{0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/
{0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/
{0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/
{0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/
{0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/
{0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/
{0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/
{0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/
{0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/
{0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/
{0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/
{0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/
{0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/
{0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/
{0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/
{0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/
{0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/
{0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/
{0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/
{0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/
{0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/
{0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/
{0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/
{0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/
{0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/
{0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/
{0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/
{0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/
{0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/
{0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/
{0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/
{0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/
{0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/
{0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/
{0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/
{0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/
{0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/
{0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/
{0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/
{0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/
{0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/
{0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/
{0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/
{0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/
{0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/
}; 

/* 16*16 ASCII字符集点阵 */
const unsigned char oled_asc2_1608[95][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
{0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
{0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/
{0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
{0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
{0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
{0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
{0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
{0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/
{0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/
{0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/
{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/
{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/
{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/
{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/
{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/
{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/
{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/
{0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/
{0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/
{0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/
{0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/
{0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00},/*"C",35*/
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/
{0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/
{0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/
{0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/
{0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/
{0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/
{0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/
{0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/
{0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/
{0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/
{0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/
{0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/
{0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/
{0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/
{0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/
{0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/
{0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/
{0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/
{0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"\",60*/
{0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/
{0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/
{0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/
{0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/
{0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/
{0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/
{0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/
{0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/
{0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/
{0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/
{0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/
{0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/
{0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/
{0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/
{0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00},/*"o",79*/
{0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/
{0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/
{0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/
{0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/
{0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/
{0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/
{0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/
{0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/
{0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/
{0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
{0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/
}; 

/* 24*24 ASICII字符集点阵 */
const unsigned char oled_asc2_2412[95][36]={
{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},/*" ",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0x0F,0xFE,0x38,0x0F,0x80,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x31,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x00,0x00,0x00,0x61,0x80,0x00,0x67,0xF8,0x07,0xF9,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x61,0x80,0x00,0x67,0xF8,0x07,0xF9,0x80,0x00,0x61,0x80,0x00,0x00,0x00},/*"#",3*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0xE0,0x03,0xE0,0xF0,0x06,0x30,0x08,0x04,0x18,0x08,0x1F,0xFF,0xFE,0x04,0x0E,0x08,0x07,0x87,0xF0,0x03,0x81,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*"$",4*/
{0x01,0xF0,0x00,0x06,0x0C,0x00,0x04,0x04,0x08,0x06,0x0C,0x70,0x01,0xF9,0xC0,0x00,0x0E,0x00,0x00,0x3B,0xE0,0x00,0xEC,0x18,0x07,0x08,0x08,0x04,0x0C,0x18,0x00,0x03,0xE0,0x00,0x00,0x00},/*"%",5*/
{0x00,0x01,0xE0,0x00,0x07,0xF0,0x03,0xF8,0x18,0x04,0x1C,0x08,0x04,0x17,0x08,0x07,0xE1,0xD0,0x03,0xC0,0xE0,0x00,0x23,0xB0,0x00,0x3C,0x08,0x00,0x20,0x08,0x00,0x00,0x10,0x00,0x00,0x00},/*"&",6*/
{0x00,0x00,0x00,0x01,0x00,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x07,0x80,0xF0,0x0C,0x00,0x18,0x10,0x00,0x04,0x20,0x00,0x02,0x00,0x00,0x00},/*"(",8*/
{0x00,0x00,0x00,0x20,0x00,0x02,0x10,0x00,0x04,0x0C,0x00,0x18,0x07,0x80,0xF0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
{0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x66,0x00,0x00,0x66,0x00,0x00,0x3C,0x00,0x00,0x18,0x00,0x03,0xFF,0xC0,0x00,0x18,0x00,0x00,0x3C,0x00,0x00,0x66,0x00,0x00,0x66,0x00,0x00,0x42,0x00},/*"*",10*/
{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x01,0xFF,0xC0,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x1C,0x00,0x00,0x70,0x00,0x01,0x80,0x00,0x0E,0x00,0x00,0x38,0x00,0x00,0xC0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*"/",15*/
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x03,0x80,0x70,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"0",16*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x08,0x01,0x00,0x08,0x01,0x00,0x08,0x03,0xFF,0xF8,0x07,0xFF,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",17*/
{0x00,0x00,0x00,0x01,0xC0,0x38,0x02,0xC0,0x58,0x04,0x00,0x98,0x04,0x01,0x18,0x04,0x02,0x18,0x04,0x04,0x18,0x06,0x1C,0x18,0x03,0xF8,0x18,0x01,0xE0,0xF8,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",18*/
{0x00,0x00,0x00,0x01,0xC0,0xE0,0x03,0xC0,0xF0,0x04,0x00,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x06,0x18,0x08,0x03,0xF4,0x18,0x01,0xE7,0xF0,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x0D,0x00,0x00,0x11,0x00,0x00,0x61,0x00,0x00,0x81,0x08,0x03,0x01,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x01,0x08,0x00,0x01,0x08,0x00,0x00,0x00},/*"4",20*/
{0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xFC,0xD0,0x06,0x08,0x08,0x06,0x10,0x08,0x06,0x10,0x08,0x06,0x10,0x08,0x06,0x18,0x38,0x06,0x0F,0xF0,0x06,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",21*/
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x84,0x30,0x02,0x08,0x18,0x04,0x10,0x08,0x04,0x10,0x08,0x04,0x10,0x08,0x07,0x18,0x10,0x03,0x0F,0xF0,0x00,0x07,0xC0,0x00,0x00,0x00},/*"6",22*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x07,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0xF8,0x06,0x07,0xF8,0x06,0x18,0x00,0x06,0xE0,0x00,0x07,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00},/*"7",23*/
{0x00,0x00,0x00,0x01,0xE1,0xE0,0x03,0xF7,0xF0,0x06,0x34,0x10,0x04,0x18,0x08,0x04,0x18,0x08,0x04,0x0C,0x08,0x04,0x0C,0x08,0x06,0x16,0x18,0x03,0xF3,0xF0,0x01,0xC1,0xE0,0x00,0x00,0x00},/*"8",24*/
{0x00,0x00,0x00,0x00,0xF8,0x00,0x03,0xFC,0x30,0x03,0x06,0x38,0x04,0x02,0x08,0x04,0x02,0x08,0x04,0x02,0x08,0x04,0x04,0x10,0x03,0x08,0xF0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x38,0x00,0x70,0x38,0x00,0x70,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x1A,0x00,0x30,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x14,0x00,0x00,0x22,0x00,0x00,0x41,0x00,0x00,0x80,0x80,0x01,0x00,0x40,0x02,0x00,0x20,0x04,0x00,0x10,0x08,0x00,0x08,0x00,0x00,0x00},/*"<",28*/
{0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x21,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x04,0x00,0x10,0x02,0x00,0x20,0x01,0x00,0x40,0x00,0x80,0x80,0x00,0x41,0x00,0x00,0x22,0x00,0x00,0x14,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*">",30*/
{0x00,0x00,0x00,0x03,0xC0,0x00,0x04,0xC0,0x00,0x04,0x00,0x00,0x08,0x00,0x38,0x08,0x0F,0x38,0x08,0x08,0x38,0x08,0x10,0x00,0x0C,0x30,0x00,0x07,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00},/*"?",31*/
{0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xE0,0x03,0x80,0x70,0x02,0x0F,0x10,0x06,0x70,0x88,0x04,0xC0,0x88,0x04,0x83,0x08,0x04,0x7F,0x88,0x02,0xC0,0x90,0x03,0x01,0x20,0x00,0xFE,0x40},/*"@",32*/
{0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x01,0xF8,0x00,0x3E,0x08,0x01,0xC2,0x00,0x07,0x02,0x00,0x07,0xE2,0x00,0x00,0xFE,0x00,0x00,0x1F,0xC8,0x00,0x01,0xF8,0x00,0x00,0x38,0x00,0x00,0x08},/*"A",33*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x06,0x18,0x08,0x03,0xF4,0x18,0x01,0xE7,0xF0,0x00,0x01,0xE0,0x00,0x00,0x00},/*"B",34*/
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x02,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x10,0x06,0x00,0x20,0x07,0x80,0xC0,0x00,0x00,0x00},/*"C",35*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x18,0x02,0x00,0x10,0x03,0x80,0x70,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"D",36*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x3E,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x01,0x00,0x60,0x00,0x00,0x00},/*"E",37*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x00,0x04,0x08,0x00,0x04,0x08,0x00,0x04,0x3E,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00},/*"F",38*/
{0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x02,0x08,0x04,0x02,0x08,0x02,0x03,0xF0,0x07,0x83,0xF0,0x00,0x02,0x00,0x00,0x02,0x00},/*"G",39*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x04,0x08,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08},/*"H",40*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"I",41*/
{0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x07,0x00,0x00,0x01,0x04,0x00,0x01,0x04,0x00,0x01,0x04,0x00,0x03,0x07,0xFF,0xFE,0x07,0xFF,0xFC,0x04,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00},/*"J",42*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x0C,0x08,0x00,0x18,0x00,0x00,0x3E,0x00,0x04,0xC7,0x80,0x05,0x03,0xC8,0x06,0x00,0xF8,0x04,0x00,0x38,0x04,0x00,0x18,0x00,0x00,0x08},/*"K",43*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x00},/*"L",44*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0x80,0x08,0x07,0xFC,0x00,0x00,0x7F,0xC0,0x00,0x03,0xF8,0x00,0x07,0xC0,0x00,0x78,0x00,0x07,0x80,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08},/*"M",45*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0x00,0x08,0x03,0xC0,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x1E,0x00,0x00,0x07,0x00,0x00,0x01,0xC0,0x04,0x00,0xF0,0x07,0xFF,0xF8,0x04,0x00,0x00},/*"N",46*/
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x18,0x04,0x00,0x08,0x04,0x00,0x08,0x06,0x00,0x18,0x03,0x00,0x30,0x01,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x00,0x00},/*"O",47*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x04,0x08,0x04,0x04,0x00,0x04,0x04,0x00,0x04,0x04,0x00,0x04,0x04,0x00,0x06,0x0C,0x00,0x03,0xF8,0x00,0x01,0xF0,0x00,0x00,0x00,0x00},/*"P",48*/
{0x00,0x00,0x00,0x00,0x7F,0x80,0x01,0xFF,0xE0,0x03,0x80,0x70,0x06,0x00,0x88,0x04,0x00,0x88,0x04,0x00,0xC8,0x06,0x00,0x3C,0x03,0x00,0x3E,0x01,0xFF,0xE6,0x00,0x7F,0x84,0x00,0x00,0x00},/*"Q",49*/
{0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x08,0x08,0x04,0x08,0x00,0x04,0x0C,0x00,0x04,0x0F,0x00,0x04,0x0B,0xC0,0x06,0x10,0xF0,0x03,0xF0,0x38,0x01,0xE0,0x08,0x00,0x00,0x08},/*"R",50*/
{0x00,0x00,0x00,0x01,0xE0,0xF8,0x03,0xF0,0x30,0x06,0x30,0x10,0x04,0x18,0x08,0x04,0x18,0x08,0x04,0x0C,0x08,0x04,0x0C,0x08,0x02,0x06,0x18,0x02,0x07,0xF0,0x07,0x81,0xE0,0x00,0x00,0x00},/*"S",51*/
{0x01,0x80,0x00,0x06,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x07,0xFF,0xF8,0x04,0x00,0x08,0x04,0x00,0x00,0x04,0x00,0x00,0x06,0x00,0x00,0x01,0x80,0x00},/*"T",52*/
{0x04,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xF0,0x04,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x04,0x00,0x10,0x07,0xFF,0xE0,0x04,0x00,0x00},/*"U",53*/
{0x04,0x00,0x00,0x06,0x00,0x00,0x07,0xE0,0x00,0x07,0xFE,0x00,0x04,0x1F,0xE0,0x00,0x01,0xF8,0x00,0x00,0x38,0x00,0x01,0xE0,0x04,0x3E,0x00,0x07,0xC0,0x00,0x06,0x00,0x00,0x04,0x00,0x00},/*"V",54*/
{0x04,0x00,0x00,0x07,0xE0,0x00,0x07,0xFF,0xC0,0x04,0x1F,0xF8,0x00,0x07,0xC0,0x07,0xF8,0x00,0x07,0xFF,0x80,0x04,0x3F,0xF8,0x00,0x07,0xC0,0x04,0xF8,0x00,0x07,0x00,0x00,0x04,0x00,0x00},/*"W",55*/
{0x00,0x00,0x00,0x04,0x00,0x08,0x06,0x00,0x18,0x07,0xC0,0x78,0x05,0xF1,0xC8,0x00,0x3E,0x00,0x00,0x1F,0x80,0x04,0x63,0xE8,0x07,0x80,0xF8,0x06,0x00,0x18,0x04,0x00,0x08,0x00,0x00,0x00},/*"X",56*/
{0x04,0x00,0x00,0x06,0x00,0x00,0x07,0x80,0x00,0x07,0xE0,0x08,0x04,0x7C,0x08,0x00,0x1F,0xF8,0x00,0x07,0xF8,0x00,0x18,0x08,0x04,0xE0,0x08,0x07,0x00,0x00,0x06,0x00,0x00,0x04,0x00,0x00},/*"Y",57*/
{0x00,0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x38,0x04,0x00,0xF8,0x04,0x03,0xE8,0x04,0x0F,0x08,0x04,0x7C,0x08,0x05,0xF0,0x08,0x07,0xC0,0x08,0x07,0x00,0x18,0x04,0x00,0x60,0x00,0x00,0x00},/*"Z",58*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFE,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x00,0x00,0x00},/*"[",59*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x07,0x00,0x00,0x00,0xC0,0x00,0x00,0x38,0x00,0x00,0x06,0x00,0x00,0x01,0xC0,0x00,0x00,0x30,0x00,0x00,0x0E,0x00,0x00,0x01,0x00,0x00,0x00},/*"\",60*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x20,0x00,0x02,0x3F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01},/*"_",63*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x19,0xF8,0x00,0x1B,0x18,0x00,0x22,0x08,0x00,0x26,0x08,0x00,0x24,0x08,0x00,0x24,0x10,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x18},/*"a",65*/
{0x00,0x00,0x00,0x04,0x00,0x00,0x07,0xFF,0xF8,0x0F,0xFF,0xF0,0x00,0x18,0x18,0x00,0x10,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x18,0x00,0x1F,0xF0,0x00,0x0F,0xC0,0x00,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x18,0x30,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x3C,0x08,0x00,0x1C,0x10,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*"c",67*/
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x38,0x18,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x04,0x10,0x10,0x07,0xFF,0xF8,0x0F,0xFF,0xF0,0x00,0x00,0x10,0x00,0x00,0x00},/*"d",68*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x12,0x30,0x00,0x22,0x18,0x00,0x22,0x08,0x00,0x22,0x08,0x00,0x32,0x08,0x00,0x1E,0x10,0x00,0x0E,0x20,0x00,0x00,0x00},/*"e",69*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x01,0xFF,0xF8,0x03,0xFF,0xF8,0x06,0x20,0x08,0x04,0x20,0x08,0x04,0x20,0x08,0x07,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00},/*"f",70*/
{0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0E,0x6E,0x00,0x1F,0xF3,0x00,0x31,0xB1,0x00,0x20,0xB1,0x00,0x20,0xB1,0x00,0x31,0x91,0x00,0x1F,0x13,0x00,0x2E,0x1E,0x00,0x20,0x0E,0x00,0x30,0x00},/*"g",71*/
{0x00,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x00},/*"h",72*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x06,0x3F,0xF8,0x06,0x3F,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"i",73*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x20,0x01,0x00,0x20,0x01,0x00,0x20,0x03,0x06,0x3F,0xFE,0x06,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"j",74*/
{0x00,0x00,0x00,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x01,0x88,0x00,0x03,0x00,0x00,0x2F,0xC0,0x00,0x38,0xF8,0x00,0x20,0x38,0x00,0x20,0x08,0x00,0x00,0x08,0x00,0x00,0x00},/*"k",75*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x04,0x00,0x08,0x04,0x00,0x08,0x07,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"l",76*/
{0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x20,0x00,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x00,0x08},/*"m",77*/
{0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x10,0x08,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x1F,0xF8,0x00,0x00,0x08,0x00,0x00,0x00},/*"n",78*/
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x0F,0xF0,0x00,0x18,0x30,0x00,0x30,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x08,0x00,0x18,0x30,0x00,0x0F,0xF0,0x00,0x07,0xC0,0x00,0x00,0x00},/*"o",79*/
{0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x3F,0xFF,0x00,0x3F,0xFF,0x00,0x10,0x11,0x00,0x20,0x09,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x30,0x38,0x00,0x1F,0xF0,0x00,0x0F,0xC0,0x00,0x00,0x00},/*"p",80*/
{0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x1F,0xF0,0x00,0x38,0x18,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x09,0x00,0x10,0x11,0x00,0x1F,0xFF,0x00,0x3F,0xFF,0x00,0x00,0x01,0x00,0x00,0x00},/*"q",81*/
{0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x3F,0xF8,0x00,0x3F,0xF8,0x00,0x08,0x08,0x00,0x10,0x08,0x00,0x20,0x08,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x78,0x00,0x1E,0x18,0x00,0x33,0x08,0x00,0x23,0x08,0x00,0x21,0x08,0x00,0x21,0x88,0x00,0x21,0x98,0x00,0x30,0xF0,0x00,0x38,0x60,0x00,0x00,0x00},/*"s",83*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0xFF,0xF0,0x03,0xFF,0xF8,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"t",84*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x3F,0xF0,0x00,0x7F,0xF8,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x20,0x10,0x00,0x3F,0xF8,0x00,0x7F,0xF0,0x00,0x00,0x10,0x00,0x00,0x00},/*"u",85*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x30,0x00,0x00,0x3C,0x00,0x00,0x3F,0x80,0x00,0x23,0xF0,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x23,0x80,0x00,0x3C,0x00,0x00,0x30,0x00,0x00,0x20,0x00},/*"v",86*/
{0x00,0x20,0x00,0x00,0x3C,0x00,0x00,0x3F,0xE0,0x00,0x23,0xF8,0x00,0x00,0xE0,0x00,0x27,0x00,0x00,0x3E,0x00,0x00,0x3F,0xE0,0x00,0x21,0xF8,0x00,0x01,0xE0,0x00,0x3E,0x00,0x00,0x20,0x00},/*"w",87*/
{0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x20,0x08,0x00,0x38,0x38,0x00,0x3E,0x68,0x00,0x27,0x80,0x00,0x03,0xC8,0x00,0x2C,0xF8,0x00,0x38,0x38,0x00,0x20,0x18,0x00,0x20,0x08,0x00,0x00,0x00},/*"x",88*/
{0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x30,0x03,0x00,0x3C,0x01,0x00,0x3F,0x83,0x00,0x23,0xEC,0x00,0x00,0x70,0x00,0x23,0x80,0x00,0x3C,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00},/*"y",89*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x00,0x20,0x38,0x00,0x20,0xF8,0x00,0x23,0xE8,0x00,0x2F,0x88,0x00,0x3E,0x08,0x00,0x38,0x08,0x00,0x20,0x18,0x00,0x00,0x70,0x00,0x00,0x00},/*"z",90*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x14,0x00,0x1F,0xF7,0xFC,0x30,0x00,0x06,0x20,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},/*"{",91*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x30,0x00,0x06,0x1F,0xF7,0xFC,0x00,0x14,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x0C,0x00,0x00,0x10,0x00,0x00},/*"~",94*/
};

#endif

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/OLED/oled.h"

int main(void)
{
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 串口初始化为115200 */
    led_init();                             /* 初始化LED */
    oled_init();                            /* 初始化OLED */
    oled_clear();                           /* 清屏 */

//    oled_draw_point_test(0, 0);           /* 画点测试 */
//    oled_draw_point_test(10, 0);
//    oled_draw_point_test(10, 10);
//    oled_draw_point_test(20, 20);
    
    oled_show_char_test(10, 10, 1);        /* 在指定坐标显示字符 */
    oled_refresh_gram();                    /* 更新显存数据到OLED屏幕 */
    
    while (1)
    {
        delay_ms(500);                      /* 延时500毫秒 */
        LED0_TOGGLE();                      /* LED0闪烁 */
    }
}

七、总结

1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片
1.3寸 oled画线程序,STM32,ATK_OLED模块,SSD1306工作8080时序,GRAM是图形显示数据RAM,字模生成软件,OLED基本驱动步骤,OLED驱动原理,OLED驱动芯片文章来源地址https://www.toymoban.com/news/detail-839485.html

到了这里,关于【正点原子STM32】OLED实验(OLED显示屏、ATK_OLED模块,OLED驱动原理、SSD1306工作时序(8080时序),OLED驱动芯片,字符显示原理、字模生成软件,OLED基本驱动步骤)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103驱动oled显示屏

    oled显示屏和其他显示屏类似,不过他只有0.96英寸,屏幕较小,但是使用起来比较方便。有二种驱动方式,分别为IIC,和SPI驱动。驱动方式比较简单。IIC驱动的话只需要4根线,电源,地线,数据线,和时钟线。 我这里使用的是IIC协议驱动oled显示屏,如果想了解IIC协议的可以看

    2024年02月11日
    浏览(48)
  • 5、江科大stm32视频学习笔记——OLED显示屏

    目录 1、OLED简介  2、OLED硬件电路 3、OLED驱动函函数简介和应用 4、用keil进行调试 4引脚OLED SCL和SDA是I2C通信引脚,需要接在I2C通信的引脚上 实验中用的模块是GPIO口模拟的I2C通信,故SCL和SDA两个端口可以接在任意的GPIO口上 7引脚OLED 右边5个引脚是SPI通信协议的引脚 如果是GPI

    2024年02月14日
    浏览(39)
  • STM32单片机(四)第二节:OLED显示屏

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月16日
    浏览(47)
  • 基于HAL库的stm32的OLED显示屏显示(模拟I2C,四脚,0.96寸)

    参考视频:江科大oled程序移植stm32hal库,freertos学习,cpu使用率_哔哩哔哩_bilibili ​ STM32入门教程-2023持续更新中_哔哩哔哩_bilibili 高速和低速晶振均选择为陶瓷晶振即可。 不需更改初始化配置,因为模拟I2C初始化时会设置这两个引脚的电平 step1、step2完成后生成工程即可。 代

    2024年02月06日
    浏览(50)
  • STM32F103硬件IIC控制4针0.96寸OLED显示屏

    OLED使用的0.96寸四针屏幕,以下直接看实际操作。 使用PCtoLCD2002软件提取OLED字模。 注意红色方框的选项内容,不要选错了,选错会导致烧录程序后无法显示。 此为硬件IIC,如果使用过我的模拟IIC控制程序可直接看 void OLED_Write_Command(unsigned char IIC_Command); void OLED_Write_Data(unsig

    2024年02月02日
    浏览(47)
  • STM32F103模拟IIC控制4针0.96寸OLED显示屏

    OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为

    2023年04月24日
    浏览(50)
  • STM32F103模拟SPI控制6针/7针0.96寸OLED显示屏

    OLED主要参数 1、高分辨率:128 64(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多)。 2、广可视角度:大于160°。 3、低功耗:正常显示时0.04W。 4、宽供电范围:直流3.3V-5V。 5、工业级:工作温度范围-30°℃~70°℃。 6、体积小:28.8mm 28.5mm。 7、通信方式:lIC、SPI。 8、亮

    2024年02月04日
    浏览(155)
  • STM32F103硬件SPI控制6针/7针0.96寸OLED显示屏

    OLED主要参数 1、高分辨率:128 64(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多)。 2、广可视角度:大于160°。 3、低功耗:正常显示时0.04W。 4、宽供电范围:直流3.3V-5V。 5、工业级:工作温度范围-30°℃~70°℃。 6、体积小:28.8mm 28.5mm。 7、通信方式:lIC、SPI。 8、亮

    2024年02月17日
    浏览(77)
  • STM32 F103C8T6学习笔记8:0.96寸单色OLED显示屏显示字符

    使用STM32F103 C8T6 驱动0.96寸单色OLED显示屏: OLED显示屏的驱动,在设计开发中OLED显示屏十分常见,因此今日学习一下。一篇文章从程序到显示都讲通。 文章提供源码、原理解释、测试工程下载,测试效果图展示。   目录 OLED驱动原理—IIC通信: SSD1306 单色 0.96 OLED 显示屏特性

    2024年02月12日
    浏览(55)
  • STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片

    今日学习0.96寸单色OLED显示屏的自由取模显示: 宋体汉字比较复杂,常用字符可以直接复制存下来,毕竟只有那么几十个字母字符,但汉字实在太多了,基本不会全部放在单片机里存着,一般用到多少个字就取几个字的模,因此汉字放在这里与自由取模一起讲。 文章提供源码

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包