基于Stm32f103软件iic利用SH1106驱动0.96寸OLED

第一次尝试写OLED的驱动,并自己利用取模软件造了基本的字库,再根据字库写了不同的显示函数。

打开OLED屏的数据手册我们可以看到一个完整的驱动流程

接下来我们只需要根据流程发送这些指令就可以点亮OLED屏幕了,根据这个流程图,我们可以把Display Data Sent前面的步骤归纳成OLED的初始化。

事实上,初始化过程中,你只需要依次发送图上十六进制指令就可以了,但是为了后续的使用,我分别将Set Display Off(0xAE)、Clear Screen、Set Display Off(0xAF)这三个指令单独分装成函数,那么我们可以发现,Set Display Off(0xAE),Set Display Off(0xAF)已经明确给出了指令,那么Clear Screen该怎么写呢?

清屏操作实际就是将屏幕上128*64个像素点全部清零(熄灭)就变成黑屏了,你也可以试试在初始化过程中省略清屏会出现效果,接下来就说说如何控制屏幕上的每一个像素点(重点)这个搞明白了就可以在屏幕上显示很多东西了。

我们要点亮这个S,只需要确定好page起始地址,再确定列起始地址,再向这列写入8位数据(因为这里1个page控制了8行),就可以控制这一列像素点的亮灭,发送完第一列的数据,我们可以连续发送数据,每发送一次列地址会自动加一。比如点亮这个S的具体步骤就是:发送page地址,发送列地址,连续发送8次数据,就可以在这个8*8的方块上显示S了。

知道这个之后我们就可以写清屏函数了,这个思路与后面显示字符起始是一样的

我们先看一下写入的流程是什么?发送从机地址(0x78,其中包括7位地址位1位读/写位),发送control byte(0x00为指令,0x40为数据)这里要注意一下,这个control byte可以理解成从机子地址,发送data byte,言归正传,下面上清屏函数的代码,老规矩,先上一下.h文件

#ifndef __SH1106_H
#define __SH1106_H
#include "headfile.h"

#define OLED0561_ADD    0x78  // OLED的I2C地址(禁止修改)
#define COM                0x00  // OLED 指令(禁止修改)
#define DAT             0x40  // OLED 数据(禁止修改)



void OLED_Off(void);
void OLED_On(void);
void OLED_Clear(void);
void OLED_Init(void);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t Char);
void OLED_ShowString(uint8_t x,uint8_t y, char *String);
void OLED_ShowNum(uint8_t x,uint8_t y, uint8_t Num,uint8_t Len);

#endif
void OLED_Clear(void)
{
    for(uint8_t i=0xb0;i<=0xb7;i++)//固定page,循环列方式
    {
        Soft_IIC_SendByte(OLED0561_ADD,COM,i);//page地址
        Soft_IIC_SendByte(OLED0561_ADD,COM,0x10);//列高位
        Soft_IIC_SendByte(OLED0561_ADD,COM,0x02);//列低位,从第二列开始!!
        for(uint8_t j=0;j<=127;j++)
        {
            Soft_IIC_SendByte(OLED0561_ADD,DAT,0x00);
        }
        
    }
}

看了这段代码你可能会疑惑,page地址和列地址是多少,上数据手册

从数据手册可以看出一共有8个page(0xb0~0xb7),列一共有132列,并将要分高低列分开发送,那么你仔细看清屏代码你会发现,为什么会是从第二列开始的呢,因为SH1106可以驱动132列,而我们屏幕是128列,显示有两列的偏移,我们要软件修正一下。

然后是开启显示和关闭显示的函数,很简单直接发送指令就好了

void OLED_Off(void)
{
    Soft_IIC_SendByte(OLED0561_ADD,COM,0xae);
}

void OLED_On(void)
{
    Soft_IIC_SendByte(OLED0561_ADD,COM,0xaf);
}

有了上面三个函数,我们就可以顺利编写初始化函数了

void OLED_Init(void)
{
    uint8_t Init[]={0xb7,        //固定启动指令
                    0x00,0x10,
                    0xd5,0x80,
                    0xa8,0x3f,
                    0xd3,0x00,
                    0x40,
                    0xad,0x8b,
                    0xa1,
                    0xc8,
                    0xda,0x12,
                    0x81,0xbf,
                    0xd9,0x22,
                    0xdb,0x40,
                    0x32,
                    0xa6,};
    
    OLED_Off();
    Soft_IIC_SendBuffer(OLED0561_ADD,COM,&Init[0],24);
    OLED_Clear();
    OLED_On();              
}

上面数组的指令是根据驱动流程(本文第一张图)获得的,其中前三个指令是对Initial Settings Configuration 的执行,设置起始页,起始列,不设置也没什么影响,因为我们发送数据前都会写起始地址的指令。

注意调用以上初始化程序,你不会看到然后效果,因为我们清屏函数是像素点全灭。

然后我们就来想想,如何显示一个字符,因为我们所用的字符都是固定的,只需要写入固定的数据,就像上面S那个例子,但是我们人为去决定像素点的亮灭显示字符,可能会造成字符不太规范,且耗时麻烦,这里引入取模软件Pctolcd2002。

首先要把取模软件这样设置,你通过右下角的取模演示,你可以很清楚的明白之前我们操作像素点的过程。

一般英文字符我们采用16*8(行*列)的大小,这就是基本的取模方法,我们取模后的数据会存到一个数组中,我们先想想如何才能输入一个字符,能够对应到这个字符在数组中的位置,先上代码。

uint8_t Ascii[]=
    {
        0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,/*"!",0*/
        0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",1*/
        0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00,/*"#",2*/
        0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00,/*"$",3*/
        0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",4*/
        0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10,/*"&",5*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,/*",",6*/
        0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,/*"(",7*/
        0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,/*")",8*/
        0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",9*/
        0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,/*"+",10*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00,/*",",11*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"-",12*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",13*/
        0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,/*"/",14*/
        0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",15*/
        0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",16*/
        0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",17*/
        0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",18*/
        0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",19*/
        0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",20*/
        0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",21*/
        0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",22*/
        0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",23*/
        0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",24*/
        0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",25*/
        0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,/*";",26*/
        0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,/*"<",27*/
        0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"=",28*/
        0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,/*">",29*/
        0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00,/*"?",30*/
        0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x2F,0x28,0x17,0x00,/*"@",31*/
        0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",32*/
        0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",33*/
        0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",34*/
        0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",35*/
        0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",36*/
        0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",37*/
        0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,/*"G",38*/
        0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",39*/
        0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",40*/
        0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,/*"J",41*/
        0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,/*"K",42*/
        0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,/*"L",43*/
        0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,/*"M",44*/
        0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",45*/
        0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",46*/
        0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",47*/
        0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,/*"Q",48*/
        0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",49*/
        0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,/*"S",50*/
        0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"T",51*/
        0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",52*/
        0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*"V",53*/
        0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",54*/
        0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",55*/
        0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"Y",56*/
        0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,/*"Z",57*/
        0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,/*"[",58*/
        0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,/*"/",59*/
        0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,/*"]",60*/
        0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",61*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/*"_",62*/
        0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",63*/
        0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,/*"a",64*/
        0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"b",65*/
        0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",66*/
        0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",67*/
        0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",68*/
        0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"f",69*/
        0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,/*"g",70*/
        0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",71*/
        0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"i",72*/
        0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,/*"j",73*/
        0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00,/*"k",74*/
        0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",75*/
        0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",76*/
        0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"n",77*/
        0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",78*/
        0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00,/*"p",79*/
        0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80,/*"q",80*/
        0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",81*/
        0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",82*/
        0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00,/*"t",83*/
        0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",84*/
        0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00,/*"v",85*/
        0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,/*"w",86*/
        0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,/*"x",87*/
        0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00,/*"y",88*/
        0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,/*"z",89*/
        0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40,/*"{",90*/
        0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",91*/
        0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00,/*"}",92*/
        0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",93*/
    };

void OLED_ShowChar(uint8_t x,uint8_t y, uint8_t Char)//显示16*8(行*列) x为0-120,y为0-7
{
    uint16_t j=0;
    j=(Char-0x21)*16;
    for(uint8_t i=0;i<=1;i++)
    {
        Soft_IIC_SendByte(OLED0561_ADD,COM,y+0xb0);//page地址实质为y
        Soft_IIC_SendByte(OLED0561_ADD,COM,x/16+0x10);//列高位
        Soft_IIC_SendByte(OLED0561_ADD,COM,x%16+0x02);//列低位,实质为x
        Soft_IIC_SendBuffer(OLED0561_ADD,DAT,&Ascii[j],8);
        y++;
        j+=8;
    }
}

我利用Ascii码的方法去对应位置,我们这个字库也是按照ascii码表的顺序取的,例如第一个叹号对应的ascii值就为0x21,利用j=(Char-0x21)*16即可对应到数组首地址,此外因为我们取模一个字符有16个字节,前8个字节为字符上部分,后8个字节为字符下半部分,分开发送时注意page地址的变化、数组首地址的变化。

搞清楚显示单个字符后,其他操作就简单了,我直接上剩下几个显示函数的代码

oid OLED_ShowString(uint8_t x,uint8_t y, char *String)
{
    while(*String != '\0')
    {
        OLED_ShowChar(x,y,*String++);
        x+=8;
    }
}

void OLED_ShowNum(uint8_t x,uint8_t y, uint8_t Num,uint8_t Len)
{
   uint16_t j0,j1=0;
    
   if(Len==1)
   {
       j0=Num*16+(15*16);
        for(uint8_t i=0;i<=1;i++)
        {
            Soft_IIC_SendByte(OLED0561_ADD,COM,y+0xb0);//page地址实质为y
            Soft_IIC_SendByte(OLED0561_ADD,COM,x/16+0x10);//列高位
            Soft_IIC_SendByte(OLED0561_ADD,COM,x%16+0x02);//列低位,实质为x
            Soft_IIC_SendBuffer(OLED0561_ADD,DAT,&Ascii[j0],8);
            y++;
            j0+=8;
        }  
   }
   
   if(Len==2)
   {
       uint8_t H=0,L=0;
       H=Num/10;
       L=Num%10;
       
       j0=H*16+(15*16);
       j1=L*16+(15*16);
       
       for(uint8_t i=0;i<=1;i++)
       {
           Soft_IIC_SendByte(OLED0561_ADD,COM,y+0xb0);//page地址实质为y
           Soft_IIC_SendByte(OLED0561_ADD,COM,x/16+0x10);//列高位
           Soft_IIC_SendByte(OLED0561_ADD,COM,x%16+0x02);//列低位,实质为x
           Soft_IIC_SendBuffer(OLED0561_ADD,DAT,&Ascii[j0],8);
           y++;
           j0+=8;
       } 
       
       y-=2;
       x+=8;
       
       for(uint8_t i=0;i<=1;i++)
       {
           Soft_IIC_SendByte(OLED0561_ADD,COM,y+0xb0);//page地址实质为y
           Soft_IIC_SendByte(OLED0561_ADD,COM,x/16+0x10);//列高位
           Soft_IIC_SendByte(OLED0561_ADD,COM,x%16+0x02);//列低位,实质为x
           Soft_IIC_SendBuffer(OLED0561_ADD,DAT,&Ascii[j1],8);
           y++;
           j1+=8;
       }       
   }
   
}

代码还有有待优化的地方,另外还有好几种显示函数的写法(我合理猜测)比如行列的方式。

如有错误,敬请指正!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值